[
  {
    "path": ".github/workflows/go.yml",
    "content": "name: Build Zeppelin\r\n\r\non:\r\n  push:\r\n  pull_request:\r\n  workflow_dispatch:\r\n  release:\r\n    types: [published]\r\n\r\njobs:\r\n  build:\r\n    runs-on: ${{ matrix.os }}\r\n    strategy:\r\n      matrix:\r\n        go-version: [\"1.22.x\"]\r\n        os: [ubuntu-latest, macos-latest]\r\n        arch: [amd64, arm64]\r\n\r\n    steps:\r\n      - uses: actions/checkout@v4\r\n      - name: Setup Go\r\n        uses: actions/setup-go@v4\r\n        with:\r\n          go-version: ${{ matrix.go-version }}\r\n      - name: Install libdeflate\r\n        run: |\r\n          if [ ${{ runner.os }} == 'Linux' ]; then\r\n            sudo apt-get update\r\n            sudo apt-get install -y libdeflate-dev\r\n          elif [ ${{ runner.os }} == 'macOS' ]; then\r\n            brew install libdeflate\r\n          fi\r\n      - name: Build\r\n        run: go build -v\r\n      - name: Upload Go build results linux\r\n        uses: actions/upload-artifact@v3\r\n        if: ${{ runner.os == 'Linux' && matrix.arch == 'amd64' }}\r\n        with:\r\n          name: Zeppelin-AMD64-Linux.zip\r\n          path: zeppelin\r\n      - name: Upload Go build results arm64-linux\r\n        uses: actions/upload-artifact@v3\r\n        if: ${{ runner.os == 'Linux' && matrix.arch == 'arm64' }}\r\n        with:\r\n          name: Zeppelin-ARM64-Linux.zip\r\n          path: zeppelin\r\n      - name: Upload Go build results macos\r\n        uses: actions/upload-artifact@v3\r\n        if: ${{ runner.os == 'macOS' && matrix.arch == 'amd64' }}\r\n        with:\r\n          name: Zeppelin-AMD64-macOS.zip\r\n          path: zeppelin\r\n      - name: Upload Go build results arm64-macos\r\n        uses: actions/upload-artifact@v3\r\n        if: ${{ runner.os == 'macOS' && matrix.arch == 'arm64' }}\r\n        with:\r\n          name: Zeppelin-ARM64-macOS.zip\r\n          path: zeppelin"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\r\n                           Version 2.0, January 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\r\n\r\n   Licensed under the Apache License, Version 2.0 (the \"License\");\r\n   you may not use this file except in compliance with the License.\r\n   You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n   Unless required by applicable law or agreed to in writing, software\r\n   distributed under the License is distributed on an \"AS IS\" BASIS,\r\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n   See the License for the specific language governing permissions and\r\n   limitations under the License.\r\n"
  },
  {
    "path": "commands/commands.go",
    "content": "package commands\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/server/command\"\r\n\r\nvar Commands = []command.Command{\r\n\tmem, debug, tick, timecmd, gc,\r\n}\r\n"
  },
  {
    "path": "commands/debug.go",
    "content": "package commands\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/server/player\"\n\t\"math\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n\t\"github.com/zeppelinmc/zeppelin/server/command\"\n\n\t//\"github.com/zeppelinmc/zeppelin/server/session\"\n\t\"github.com/zeppelinmc/zeppelin/util\"\n)\n\nvar debug = command.Command{\n\tNode:      command.NewLiteral(\"debug\"),\n\tAliases:   []string{\"f3\"},\n\tNamespace: \"zeppelin\",\n\tCallback: func(ccc command.CommandCallContext) {\n\t\tplayer, ok := ccc.Executor.(*player.Player)\n\t\tif !ok {\n\t\t\tccc.Executor.SystemMessage(text.TextComponent{\n\t\t\t\tText:  \"This command should be used by a player.\",\n\t\t\t\tColor: \"red\",\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t\tx, y, z := player.Position()\n\t\tchunkX, chunkY, chunkZ := int32(x)>>4, int32(y)>>4, int32(z)>>4\n\t\txb, yb, zb := int32(math.Floor(x)), int32(math.Floor(y)), int32(math.Floor(z))\n\t\trx, rz := chunkX>>5, chunkZ>>5\n\n\t\tyaw, pitch := player.Rotation()\n\n\t\tdimension := player.Dimension()\n\n\t\tc, err := dimension.GetChunk(chunkX, chunkZ)\n\t\tif err != nil {\n\t\t\tccc.Executor.SystemMessage(text.TextComponent{\n\t\t\t\tText:  \"Unrendered chunk\",\n\t\t\t\tColor: \"red\",\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t\tonBlock, _ := c.Block(xb&0x0f, yb-1, zb&0x0f)\n\t\tsky, _ := c.SkyLightLevel(xb&0x0f, yb, zb&0x0f)\n\n\t\tccc.Executor.SystemMessage(text.Unmarshalf(\n\t\t\t'&', //ccc.Executor.Config().ChatFormatter.Rune(),\n\t\t\t\"XYZ: %.03f / %.05f / %.03f\\nBlock: %d %d %d [%d %d %d]\\nChunk: %d %d %d [%d %d in r.%d.%d.mca]\\nStanding on: %s [%v]\\nFacing: (%.01f / %.01f)\\nClient Light: %d (%d sky, 0 block)\\n\\nYou are using: %s\",\n\t\t\tx, y, z,\n\t\t\txb, yb, zb,\n\t\t\txb&0xf, yb&0xf, zb&0xf,\n\t\t\tchunkX, chunkY, chunkZ,\n\t\t\tchunkX&31, chunkZ&31,\n\t\t\trx, rz,\n\t\t\tonBlock.Name, onBlock.Properties,\n\t\t\tutil.NormalizeYaw(yaw), pitch,\n\t\t\tsky, sky,\n\t\t\t\"idk\",\n\t\t\t//s.ClientName(),\n\t\t))\n\t},\n}\n"
  },
  {
    "path": "commands/gc.go",
    "content": "package commands\r\n\r\nimport (\r\n\t\"runtime\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/command\"\r\n)\r\n\r\nvar gc = command.Command{\r\n\tNode:      command.NewLiteral(\"gc\"),\r\n\tNamespace: \"zeppelin\",\r\n\tCallback: func(ccc command.CommandCallContext) {\r\n\t\truntime.GC()\r\n\r\n\t\tccc.Executor.SystemMessage(text.Text(\"Done.\").WithColor(text.BrightGreen))\r\n\t},\r\n}\r\n"
  },
  {
    "path": "commands/mem.go",
    "content": "package commands\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"runtime\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/buffers\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n\t\"github.com/zeppelinmc/zeppelin/server\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/command\"\r\n)\r\n\r\nvar memStats runtime.MemStats\r\n\r\nvar mem = command.Command{\r\n\tNode:      command.NewLiteral(\"mem\"),\r\n\tNamespace: \"zeppelin\",\r\n\tCallback: func(ccc command.CommandCallContext) {\r\n\t\truntime.ReadMemStats(&memStats)\r\n\t\tloaded := ccc.Server.(*server.Server).World.LoadedChunks()\r\n\t\tgoroutines := runtime.NumGoroutine()\r\n\r\n\t\tccc.Executor.SystemMessage(text.TextComponent{\r\n\t\t\tText: fmt.Sprintf(\r\n\t\t\t\t\"Server memory usage: \\n\\nAlloc: %dMiB, Total Alloc: %dMiB\\nLoaded Chunks: %d\\nBuffer size: %dB\\nGoroutines: %d\",\r\n\t\t\t\tmemStats.Alloc/1024/1024, memStats.TotalAlloc/1024/1024, loaded, buffers.Size(), goroutines,\r\n\t\t\t),\r\n\t\t})\r\n\t},\r\n}\r\n"
  },
  {
    "path": "commands/tick.go",
    "content": "package commands\n\nimport (\n\t\"time\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n\t\"github.com/zeppelinmc/zeppelin/server\"\n\t\"github.com/zeppelinmc/zeppelin/server/command\"\n)\n\nvar tick = command.Command{\n\tNode: command.NewLiteral(\"tick\", command.NewLiteral(\"info\"), command.NewLiteral(\"freeze\"), command.NewLiteral(\"unfreeze\")),\n\tCallback: func(ccc command.CommandCallContext) {\n\t\ttickManager := ccc.Server.(*server.Server).TickManager\n\t\tcommand := ccc.Arguments.Fallback(0, \"info\")\n\t\tnum := tickManager.Count()\n\n\t\tswitch command {\n\t\tcase \"info\":\n\t\t\tfreq := tickManager.Frequency()\n\t\t\tccc.Executor.SystemMessage(text.Sprintf(\n\t\t\t\t\"Server Tickers: %d\\nTicking Frequency: %.02ftps (expected ticks per second)\",\n\t\t\t\tnum, 1/(float64(freq)/float64(time.Second)),\n\t\t\t))\n\t\tcase \"freeze\":\n\t\t\ttickManager.Freeze()\n\t\t\tccc.Executor.SystemMessage(text.Sprintf(\"Froze %d tickers\", num))\n\t\tcase \"unfreeze\":\n\t\t\ttickManager.Unfreeze()\n\t\t\tccc.Executor.SystemMessage(text.Sprintf(\"Froze %d tickers\", num))\n\t\t}\n\n\t},\n}\n"
  },
  {
    "path": "commands/time.go",
    "content": "package commands\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/server/command\"\n)\n\nvar timecmd = command.Command{\n\tNode: command.NewLiteral(\"time\" /*command.NewCommand(\"add\", command.NewTimeArgument(\"time\", 0)), command.NewCommand(\"set\", command.NewTimeArgument(\"time\", 0))*/),\n\tCallback: func(ccc command.CommandCallContext) {\n\t\t/*command := ccc.Arguments.At(0)\n\t\tw := ccc.Server.(*server.Server).World\n\n\t\tswitch command {\n\t\tcase \"set\":\n\t\t\tt := ccc.Arguments.At(1)\n\t\t\ttime, err := strconv.Atoi(t)\n\t\t\tif t == \"\" || err != nil {\n\t\t\t\tccc.Reply(text.Sprint(\"Invalid time\"))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ta, _ := w.Time()\n\t\t\tccc.Executor.UpdateTime(a, int64(time))\n\t\t}*/\n\t},\n}\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/zeppelinmc/zeppelin\n\ngo 1.23\n\nrequire (\n\tgithub.com/fatih/color v1.17.0\n\tgithub.com/google/uuid v1.6.0\n\tgolang.org/x/term v0.22.0\n)\n\nrequire (\n\tgithub.com/4kills/go-libdeflate/v2 v2.2.0\n\tgithub.com/pierrec/lz4/v4 v4.1.21\n)\n\nrequire github.com/oq-x/unsafe2 v0.0.0-20240901191313-2b7bec1d9e3b\n\nrequire (\n\tgithub.com/aimjel/mine-net v0.0.0-20241231185445-f0751c927ecb // indirect\n\tgithub.com/grailbio/base v0.0.11 // indirect\n)\n\nrequire (\n\tgithub.com/4kills/go-zlib v1.2.0\n\tgithub.com/aimjel/minecraft v0.0.0-20240907220502-e1fe5798908b\n\tgithub.com/aquilax/go-perlin v1.1.0\n\tgithub.com/mattn/go-colorable v0.1.13 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgolang.org/x/sys v0.25.0 // indirect\n)\n"
  },
  {
    "path": "go.sum",
    "content": "cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=\ncloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=\ncloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=\ncloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=\ncloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=\ncloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=\ncloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=\ncloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=\ncloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=\ngithub.com/4kills/go-libdeflate/v2 v2.2.0 h1:2kdYT79I+k23LO6VLn9p0l1Og47EWWgKbC1n353zE30=\ngithub.com/4kills/go-libdeflate/v2 v2.2.0/go.mod h1:hyouZv4OAhHaaMpYuejstUN0xOg8mA+yy75WE3Ty6SM=\ngithub.com/4kills/go-zlib v1.2.0 h1:h/OjHfOi0ZGAhotXzFVJK7V97cKNsEqRJVmJo4e8H6A=\ngithub.com/4kills/go-zlib v1.2.0/go.mod h1:ngBUonyN1YJBHSknfLPNtWokAjYhHsaZDio8yS+BqSo=\ngithub.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=\ngithub.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=\ngithub.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=\ngithub.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=\ngithub.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=\ngithub.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=\ngithub.com/StackExchange/wmi v0.0.0-20170410192909-ea383cf3ba6e/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=\ngithub.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=\ngithub.com/aimjel/mine-net v0.0.0-20241231184943-192b6fd6bfdc h1:Fl6/rTVRsK3yRvLIe59RgElHb/fpVVo8fOm1SYvAfS8=\ngithub.com/aimjel/mine-net v0.0.0-20241231184943-192b6fd6bfdc/go.mod h1:2p/uMjMBAOvMK8NvNnTsXS7s00IYvbS3Ji3YM2ApzxA=\ngithub.com/aimjel/mine-net v0.0.0-20241231185445-f0751c927ecb h1:DzjkzmO1C8qXdEUSWU0I4hHEi0tuaFNrKeLeRZ8ntZo=\ngithub.com/aimjel/mine-net v0.0.0-20241231185445-f0751c927ecb/go.mod h1:2p/uMjMBAOvMK8NvNnTsXS7s00IYvbS3Ji3YM2ApzxA=\ngithub.com/aimjel/minecraft v0.0.0-20240907220502-e1fe5798908b h1:P5dA2C10r7BqzbhXqjjx07+LBV1tcsioFJrogWBOOBY=\ngithub.com/aimjel/minecraft v0.0.0-20240907220502-e1fe5798908b/go.mod h1:jb47g4nDw3J8JdA4WxQpDx25NoIZiyNCjFOtM1b3Urk=\ngithub.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=\ngithub.com/aquilax/go-perlin v1.1.0 h1:Gg+3jQ24wT4Y5GI7TCRLmYarzUG0k+n/JATFqOimb7s=\ngithub.com/aquilax/go-perlin v1.1.0/go.mod h1:z9Rl7EM4BZY0Ikp2fEN1I5mKSOJ26HQpk0O2TBdN2HE=\ngithub.com/aws/aws-sdk-go v1.23.14/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=\ngithub.com/aws/aws-sdk-go v1.23.22/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=\ngithub.com/aws/aws-sdk-go v1.34.31/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=\ngithub.com/biogo/store v0.0.0-20190426020002-884f370e325d/go.mod h1:Iev9Q3MErcn+w3UOJD/DkEzllvugfdx7bGcMOFhvr/4=\ngithub.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=\ngithub.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM=\ngithub.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=\ngithub.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=\ngithub.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=\ngithub.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=\ngithub.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=\ngithub.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=\ngithub.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=\ngithub.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=\ngithub.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=\ngithub.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=\ngithub.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=\ngithub.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=\ngithub.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=\ngithub.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=\ngithub.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=\ngithub.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=\ngithub.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=\ngithub.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=\ngithub.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=\ngithub.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=\ngithub.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=\ngithub.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=\ngithub.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=\ngithub.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=\ngithub.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=\ngithub.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\ngithub.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=\ngithub.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=\ngithub.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=\ngithub.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=\ngithub.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=\ngithub.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=\ngithub.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=\ngithub.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=\ngithub.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=\ngithub.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=\ngithub.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=\ngithub.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=\ngithub.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=\ngithub.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=\ngithub.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=\ngithub.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=\ngithub.com/google/gops v0.3.6/go.mod h1:RZ1rH95wsAGX4vMWKmqBOIWynmWisBf4QFdgT/k/xOI=\ngithub.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=\ngithub.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=\ngithub.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=\ngithub.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=\ngithub.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\ngithub.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=\ngithub.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=\ngithub.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=\ngithub.com/grailbio/base v0.0.1/go.mod h1:wVM2Cq2/HT0rt6WYGQhXJ3CCLkNnGjeAAOPHCZ2IsN0=\ngithub.com/grailbio/base v0.0.11 h1:F/khklg9LwJDZpdHaHBvJIQrZfthNfcz3h2WuiwqK7E=\ngithub.com/grailbio/base v0.0.11/go.mod h1:8xmAiPsu9U7ZrRuaUCSuT2SDJS97QXGqVKpn0Den8GA=\ngithub.com/grailbio/testutil v0.0.1/go.mod h1:j7teGaXqRY1n6m7oM8oy954lxL37Myt7nEJZlif3nMA=\ngithub.com/grailbio/testutil v0.0.3/go.mod h1:f9+y7xMXeXwyNcdV5cmo6GzRiitSOubMmqcqEON7NQQ=\ngithub.com/grailbio/v23/factories/grail v0.0.0-20190904050408-8a555d238e9a/go.mod h1:2g5HI42KHw+BDBdjLP3zs+WvTHlDK3RoE8crjCl26y4=\ngithub.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok=\ngithub.com/hanwen/go-fuse/v2 v2.0.2/go.mod h1:HH3ygZOoyRbP9y2q7y3+JM6hPL+Epe29IbWaS0UA81o=\ngithub.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=\ngithub.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=\ngithub.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=\ngithub.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=\ngithub.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=\ngithub.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=\ngithub.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=\ngithub.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=\ngithub.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=\ngithub.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=\ngithub.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=\ngithub.com/keybase/go-keychain v0.0.0-20190828153431-2390ae572545/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc=\ngithub.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=\ngithub.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=\ngithub.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=\ngithub.com/klauspost/compress v1.8.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=\ngithub.com/klauspost/compress v1.8.6/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=\ngithub.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=\ngithub.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=\ngithub.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=\ngithub.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=\ngithub.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=\ngithub.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=\ngithub.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=\ngithub.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=\ngithub.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=\ngithub.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=\ngithub.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=\ngithub.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=\ngithub.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=\ngithub.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=\ngithub.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=\ngithub.com/oq-x/unsafe2 v0.0.0-20240901191313-2b7bec1d9e3b h1:ffDVPOtSkPRHwJxp34oBUxgxR8H4arPUSzQMwT3fZi8=\ngithub.com/oq-x/unsafe2 v0.0.0-20240901191313-2b7bec1d9e3b/go.mod h1:x0z103mg/p7DX2tk7+9ubWfXbh+ynkAtwRlEOVEbIkk=\ngithub.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=\ngithub.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=\ngithub.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=\ngithub.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=\ngithub.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=\ngithub.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=\ngithub.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=\ngithub.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=\ngithub.com/shirou/gopsutil v2.19.9+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=\ngithub.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=\ngithub.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=\ngithub.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=\ngithub.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=\ngithub.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=\ngithub.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=\ngithub.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=\ngithub.com/vanadium/go-mdns-sd v0.0.0-20181006014439-f1a1ccd1252e/go.mod h1:35fXDjvKtzyf89fHHhyTTNLHaG2CkI7u/GvO59PIjP4=\ngithub.com/vitessio/vitess v2.1.1+incompatible/go.mod h1:A11WWLimUfZAYYm8P1I63RryRPP2GdpHRgQcfa++OnQ=\ngithub.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=\ngithub.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=\ngithub.com/yasushi-saito/zlibng v0.0.0-20190905015749-ec536402779e/go.mod h1:qD8maXXiM82RPOfKUGWetL74si8WnsRS7LNPDWK7byI=\ngithub.com/yasushi-saito/zlibng v0.0.0-20190922135643-2a860060b80c/go.mod h1:fmRgeAuoXV70NcmjNe3PyhylzfGSgyLv9nZaW/I/C7Q=\ngithub.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngithub.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngo.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=\ngo.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=\ngo.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA=\ngo.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=\ngo.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=\ngo.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=\ngo.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=\ngolang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=\ngolang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=\ngolang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=\ngolang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=\ngolang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=\ngolang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\ngolang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=\ngolang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=\ngolang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=\ngolang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=\ngolang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=\ngolang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=\ngolang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=\ngolang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=\ngolang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=\ngolang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\ngolang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=\ngolang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sys v0.0.0-20171017063910-8dbc5d05d6ed/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=\ngolang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=\ngolang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=\ngolang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=\ngolang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=\ngolang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=\ngolang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\ngolang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\ngolang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=\ngolang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=\ngolang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=\ngonum.org/v1/gonum v0.0.0-20190902003836-43865b531bee/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=\ngonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=\ngonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=\ngoogle.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=\ngoogle.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=\ngoogle.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\ngoogle.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\ngoogle.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=\ngoogle.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=\ngoogle.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=\ngoogle.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=\ngoogle.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=\ngoogle.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=\ngoogle.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=\ngoogle.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\ngoogle.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=\ngoogle.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=\ngoogle.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=\ngoogle.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=\ngoogle.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=\ngoogle.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=\ngoogle.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=\ngoogle.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=\ngoogle.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=\ngoogle.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=\ngoogle.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=\ngopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=\ngopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=\ngopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\nhonnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=\nhonnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=\nk8s.io/api v0.0.0-20181213150558-05914d821849/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA=\nk8s.io/apimachinery v0.0.0-20181127025237-2b1284ed4c93/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0=\nk8s.io/client-go v10.0.0+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s=\nk8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=\nrsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=\nrsc.io/goversion v1.0.0/go.mod h1:Eih9y/uIBS3ulggl7KNJ09xGSLcuNaLgmvvqa07sgfo=\nrsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=\nsigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=\nv.io v0.1.5/go.mod h1:Apu/AQfn7lq+o3m+ReLtlrKxkZTTo2p6mLXlioAUWA0=\nv.io v0.1.15/go.mod h1:Ort0a9YYK5eDJZ1Bc5m5hroWkygXzkifJzmlRpaGbWk=\nv.io/x/lib v0.1.4/go.mod h1:maU79RWqiiC9ARbvS+2Q8tqZUnQiHxeJDriXcW7cYg8=\nv.io/x/lib v0.1.6/go.mod h1:aLm+mPXyXf4Vd/n+1f4LcSQFFgqNhNzwQvHYfXoOLlE=\nv.io/x/lib v0.1.7/go.mod h1:aLm+mPXyXf4Vd/n+1f4LcSQFFgqNhNzwQvHYfXoOLlE=\nv.io/x/ref/internal/logger v0.1.1/go.mod h1:00nuJdZEVCzMOn9y474jZ+e6B9R/ydLW7d6IQFl/NHU=\nv.io/x/ref/lib/flags/sitedefaults v0.1.1/go.mod h1:ew4Igo60KMBDYhnxH6l7P+qBCJiqR8PVp7fJJYGqILA=\n"
  },
  {
    "path": "main.go",
    "content": "package main\n\nimport (\n\t_ \"embed\"\n\t\"github.com/zeppelinmc/zeppelin/properties\"\n\t\"math/rand\"\n\t\"os\"\n\t\"runtime\"\n\t\"runtime/debug\"\n\t\"runtime/pprof\"\n\t\"slices\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/zeppelinmc/zeppelin/commands\"\n\t\"github.com/zeppelinmc/zeppelin/server\"\n\t\"github.com/zeppelinmc/zeppelin/server/command\"\n\t\"github.com/zeppelinmc/zeppelin/server/world\"\n\t\"github.com/zeppelinmc/zeppelin/util\"\n\t\"github.com/zeppelinmc/zeppelin/util/console\"\n\t\"github.com/zeppelinmc/zeppelin/util/log\"\n\t\"golang.org/x/term\"\n)\n\nvar timeStart = time.Now()\n\nfunc main() {\n\tlog.Infolnf(\"Zeppelin 1.21 Minecraft server with %s on platform %s-%s\", runtime.Version(), runtime.GOOS, runtime.GOARCH)\n\n\tmax, ok := console.GetFlag(\"xmem\")\n\tif ok {\n\t\tm, err := util.ParseSizeUnit(max)\n\t\tif err == nil {\n\t\t\tdebug.SetMemoryLimit(int64(m))\n\t\t\tlog.Infolnf(\"Memory usage is limited to %s\", util.FormatSizeUnit(m))\n\t\t}\n\t}\n\n\tif slices.Index(os.Args, \"--cpuprof\") != -1 {\n\t\tif f, err := os.Create(\"zeppelin-cpu-profile\"); err == nil {\n\t\t\tpprof.StartCPUProfile(f)\n\t\t\tlog.Infoln(\"Started CPU profiler (writing to zeppelin-cpu-profile)\")\n\n\t\t\tdefer func() {\n\t\t\t\tlog.Infoln(\"Stopped CPU profiler\")\n\t\t\t\tpprof.StopCPUProfile()\n\t\t\t\tf.Close()\n\t\t\t}()\n\t\t}\n\t}\n\n\tif slices.Index(os.Args, \"--memprof\") != -1 {\n\t\tdefer func() {\n\t\t\tlog.InfolnClean(\"Writing memory profile to zeppelin-mem-profile\")\n\t\t\tf, _ := os.Create(\"zeppelin-mem-profile\")\n\t\t\tpprof.Lookup(\"allocs\").WriteTo(f, 0)\n\t\t\tf.Close()\n\t\t}()\n\t}\n\n\tcfg := loadConfig()\n\tif cfg.LevelSeed == \"\" {\n\t\tcfg.LevelSeed = strconv.FormatInt(rand.Int63(), 10)\n\t}\n\n\tw, err := world.NewWorld(cfg)\n\tif err != nil {\n\t\tlog.Errorlnf(\"Error preparing level: %v\", w)\n\t\treturn\n\t}\n\n\tlog.Infof(\"Binding server to %s:%d\\n\", cfg.ServerIp, cfg.ServerPort)\n\n\trawTerminal := slices.Index(os.Args, \"--no-raw-terminal\") == -1\n\n\tsrv, err := server.New(cfg, w)\n\tif err != nil {\n\t\tlog.Errorln(\"Error binding server:\", err)\n\t\treturn\n\t}\n\tsrv.CommandManager = command.NewManager(srv, commands.Commands...)\n\tif rawTerminal {\n\t\toldState, err := term.MakeRaw(int(os.Stdin.Fd()))\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tgo console.StartRawConsole(srv)\n\n\t\tdefer term.Restore(int(os.Stdin.Fd()), oldState)\n\t} else {\n\t\tgo console.StartConsole(srv)\n\t}\n\tsrv.Start(timeStart)\n}\n\nfunc loadConfig() properties.ServerProperties {\n\tfile, err := os.ReadFile(\"server.properties\")\n\tif err != nil {\n\t\tfile, err := os.Create(\"server.properties\")\n\t\tif err == nil {\n\t\t\tproperties.Marshal(file, properties.Default)\n\t\t\tfile.Close()\n\t\t}\n\t\treturn properties.Default\n\t}\n\tvar cfg properties.ServerProperties\n\n\terr = properties.Unmarshal(string(file), &cfg)\n\tif err != nil {\n\t\tcfg = properties.Default\n\t}\n\n\treturn cfg\n}\n"
  },
  {
    "path": "properties/decode.go",
    "content": "// Package properties provides parsing of .properties files\npackage properties\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Unmarshal decodes the properties file\nfunc Unmarshal(src string, dst any) error {\n\tproperties := strings.Split(src, \"\\n\")\n\tval := reflect.ValueOf(dst)\n\n\tswitch val.Kind() {\n\tcase reflect.Pointer:\n\t\tval = val.Elem()\n\t\tswitch val.Kind() {\n\t\tcase reflect.Struct:\n\t\t\treturn unmarshalStruct(properties, structMap(val))\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"Unmarshal excepts a pointer of a struct or map, not %s\", val.Kind())\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"Unmarshal excepts a pointer of a struct or map, not %s\", val.Kind())\n\t}\n}\n\nfunc unmarshalStruct(props []string, v map[string]reflect.Value) error {\n\tfor _, line := range props {\n\t\tif len(line) == 0 {\n\t\t\tcontinue //comment\n\t\t}\n\t\tif line[0] == '#' {\n\t\t\tcontinue //comment\n\t\t}\n\t\tif line[0] == '!' {\n\t\t\tcontinue //comment\n\t\t}\n\n\t\tvar key, value string\n\t\tfor i, char := range line {\n\t\t\tif char == '=' || char == ':' || char == ' ' {\n\t\t\t\tkey = line[:i]\n\t\t\t\tif i != len(line)-2 {\n\t\t\t\t\tvalue = line[i+1:]\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif value == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tvalue = strings.TrimSpace(value)\n\t\tvalue = strings.ReplaceAll(value, \"\\\\n\", \"\\n\")\n\t\tvalue = strings.ReplaceAll(value, \"\\\\r\", \"\\r\")\n\t\tvalue = strings.ReplaceAll(value, \"\\\\t\", \"\\t\")\n\n\t\tfield, ok := v[key]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch field.Kind() {\n\t\tcase reflect.String:\n\t\t\tfield.SetString(value)\n\t\tcase reflect.Bool:\n\t\t\tswitch value {\n\t\t\tcase \"true\":\n\t\t\t\tfield.SetBool(true)\n\t\t\tcase \"false\":\n\t\t\t\tfield.SetBool(false)\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"unsupported value %s for type boolean\", value)\n\t\t\t}\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\ti, err := strconv.ParseInt(value, 10, field.Type().Bits())\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"unsupported value %s for type integer: %v\", value, err)\n\t\t\t}\n\t\t\tfield.SetInt(i)\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\ti, err := strconv.ParseUint(value, 10, field.Type().Bits())\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"unsupported value %s for type integer: %v\", value, err)\n\t\t\t}\n\t\t\tfield.SetUint(i)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc structMap(val reflect.Value) map[string]reflect.Value {\n\tvar sm = make(map[string]reflect.Value, val.NumField())\n\n\tvt := val.Type()\n\tfor i := 0; i < val.NumField(); i++ {\n\t\tft := vt.Field(i)\n\t\tfv := val.Field(i)\n\n\t\tif !ft.IsExported() {\n\t\t\tcontinue\n\t\t}\n\t\tname := ft.Name\n\t\tpropName, ok := ft.Tag.Lookup(\"properties\")\n\t\tif ok {\n\t\t\tif propName == \"-\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tname = propName\n\t\t\tif i := strings.Index(name, \",omitempty\"); i != -1 {\n\t\t\t\tname = name[:i]\n\t\t\t}\n\t\t}\n\t\tif name == \"\" {\n\t\t\tname = ft.Name\n\t\t}\n\n\t\tsm[name] = fv\n\t}\n\n\treturn sm\n}\n"
  },
  {
    "path": "properties/encode.go",
    "content": "package properties\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unsafe\"\n)\n\n// Marshal encodes the properties file\nfunc Marshal(dst io.Writer, p any) error {\n\tval := reflect.ValueOf(p)\n\tswitch val.Kind() {\n\tcase reflect.Struct:\n\t\treturn encodePropsStruct(dst, val)\n\tdefault:\n\t\treturn fmt.Errorf(\"Marshal excepts a struct or map, not %s\", val.Kind())\n\t}\n}\n\nfunc encodePropsStruct(dst io.Writer, v reflect.Value) error {\n\tvt := v.Type()\n\tfor i := 0; i < v.NumField(); i++ {\n\t\ttf := vt.Field(i)\n\t\tvf := v.Field(i)\n\t\tname, ok, omitempty := name(tf)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tif omitempty && vf.IsZero() {\n\t\t\tcontinue\n\t\t}\n\n\t\tif i != 0 {\n\t\t\tif err := writeString(dst, \"\\n\"); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tif err := writeString(dst, name+\"=\"); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tswitch vf.Kind() {\n\t\tcase reflect.String, reflect.Bool, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\tif err := writeString(dst, fmt.Sprint(vf.Interface())); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unsupported kind %s for encode struct\", vf.Kind())\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc name(tf reflect.StructField) (n string, ok bool, omitempty bool) {\n\tif !tf.IsExported() {\n\t\treturn \"\", false, false\n\t}\n\tname := tf.Name\n\n\tpropName, ok := tf.Tag.Lookup(\"properties\")\n\tif !ok {\n\t\treturn name, true, false\n\t}\n\tif propName == \"-\" {\n\t\treturn name, false, false\n\t}\n\tname = propName\n\n\ti := strings.Index(name, \",omitempty\")\n\tif i == -1 {\n\t\treturn name, true, false\n\t}\n\n\tname = name[:i]\n\tif name == \"\" {\n\t\tname = tf.Name\n\t}\n\n\treturn name, true, true\n}\n\nfunc writeString(w io.Writer, str string) error {\n\t_, err := w.Write(unsafe.Slice(unsafe.StringData(str), len(str)))\n\n\treturn err\n}\n"
  },
  {
    "path": "properties/properties.go",
    "content": "// Package properties provides encoding and decoding of .properties files\n\npackage properties\n\ntype formatter string\n\nfunc (f formatter) Rune() rune {\n\treturn rune(f[0])\n}\n\ntype ServerProperties struct {\n\tAcceptTransfers       bool   `properties:\"accept-transfers\"`\n\tAllowFlight           bool   `properties:\"allow-flight\"`\n\tAllowNether           bool   `properties:\"allow-nether\"`\n\tBroadcastConsoleToOps bool   `properties:\"broadcast-console-to-ops\"`\n\tBroadcastRconToOps    bool   `properties:\"broadcast-rcon-to-ops\"`\n\tDifficulty            string `properties:\"difficulty\"`\n\n\tEnableCommandBlock bool      `properties:\"enable-command-block\"`\n\tEnableRCON         bool      `properties:\"enable-rcon\"`\n\tEnableStatus       bool      `properties:\"enable-status\"`\n\tEnableQuery        bool      `properties:\"enable-query\"`\n\tEnableChat         bool      `properties:\"enable-chat\"`\n\tEnableEncryption   bool      `properties:\"enable-encryption\"`\n\tChatFormatter      formatter `properties:\"chat-formatter\"`\n\n\tSystemChatFormat string `properties:\"system-chat-format\"`\n\n\tEnforceSecureProfile           bool   `properties:\"enforce-secure-profile\"`\n\tEnforceWhitelist               bool   `properties:\"enforce-whitelist\"`\n\tEntityBroadcastRangePrecentage int    `properties:\"state-broadcast-range-precentage\"`\n\tForceGamemode                  bool   `properties:\"force-gamemode\"`\n\tFunctionPermissionLevel        int    `properties:\"function-permission-level\"`\n\tGamemode                       string `properties:\"gamemode\"`\n\tGenerateStructures             bool   `properties:\"generate-structures\"`\n\tGeneratorSettings              string `properties:\"generator-settings\"`\n\tHardcore                       bool   `properties:\"hardcore\"`\n\tHideOnlinePlayers              bool   `properties:\"hide-online-players\"`\n\tInitialDisabledPacks           string `properties:\"initial-disabled-packs\"`\n\tInitialEnabledPacks            string `properties:\"initial-enabled-packs\"`\n\tLevelName                      string `properties:\"level-name\"`\n\tLevelSeed                      string `properties:\"level-seed\"`\n\tLevelType                      string `properties:\"level-type\"`\n\tLogIPs                         bool   `properties:\"log-ips\"`\n\tMaxPlayers                     int    `properties:\"max-players\"`\n\tMOTD                           string `properties:\"motd\"`\n\tNetworkCompressionThreshold    int    `properties:\"network-compression-threshold\"`\n\n\tOnlineMode              bool   `properties:\"online-mode\"`\n\tOpPermissionLevel       int    `properties:\"op-permission-level\"`\n\tPlayerIdleTimeout       int    `properties:\"player-idle-timeout\"`\n\tPreventProxyConnections bool   `properties:\"prevent-proxy-connections\"`\n\tPvP                     bool   `properties:\"pvp\"`\n\tQueryPort               uint16 `properties:\"query.port\"`\n\tRCONPassword            string `properties:\"rcon.password\"`\n\tRCONPort                uint16 `properties:\"rcon.port\"`\n\n\t// NOTE: unlike java edition, this accepts deflate, lz4, none AND gzip.\n\tRegionFileCompression string `properties:\"region-file-compression\"`\n\tResourcePack          string `properties:\"resource-pack\"`\n\tResourcePackId        string `properties:\"resource-pack-id\"`\n\tResourcePackSha1      string `properties:\"resource-pack-sha1\"`\n\tRequireResourcePack   string `properties:\"require-resource-pack\"`\n\tServerIp              string `properties:\"server-ip\"`\n\tServerPort            uint16 `properties:\"server-port\"`\n\n\tSimulationDistance int32 `properties:\"simulation-distance\"`\n\n\tSpawnMonsters   bool `properties:\"spawn-monsters\"`\n\tSpawnProtection int  `properties:\"spawn-protection\"`\n\n\tViewDistance int32 `properties:\"view-distance\"`\n\tWhiteList    bool  `properties:\"white-list\"`\n}\n\nvar Default = ServerProperties{\n\tAllowNether:                    true,\n\tBroadcastConsoleToOps:          true,\n\tBroadcastRconToOps:             true,\n\tDifficulty:                     \"easy\",\n\tEnableStatus:                   true,\n\tEnableChat:                     true,\n\tChatFormatter:                  \"§\",\n\tEntityBroadcastRangePrecentage: 100,\n\tFunctionPermissionLevel:        2,\n\tGamemode:                       \"survival\",\n\tGenerateStructures:             true,\n\tInitialEnabledPacks:            \"vanilla\",\n\tLevelName:                      \"world\",\n\tLevelType:                      \"minecraft:normal\",\n\tLogIPs:                         true,\n\tMaxPlayers:                     20,\n\tMOTD:                           \"A Minecraft Server\",\n\tNetworkCompressionThreshold:    256,\n\tOnlineMode:                     true,\n\tOpPermissionLevel:              4,\n\tPvP:                            true,\n\tQueryPort:                      25565,\n\tRCONPort:                       25575,\n\tRegionFileCompression:          \"deflate\",\n\tServerPort:                     25565,\n\tSimulationDistance:             10,\n\tSpawnMonsters:                  true,\n\tSpawnProtection:                16,\n\tViewDistance:                   10,\n}\n"
  },
  {
    "path": "protocol/nbt/decoder.go",
    "content": "package nbt\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"math\"\r\n\t\"reflect\"\r\n\t\"strings\"\r\n\t\"sync\"\r\n\t\"unsafe\"\r\n)\r\n\r\nvar valueMap = sync.Pool{\r\n\tNew: func() any {\r\n\t\treturn make(map[string]reflect.Value)\r\n\t}}\r\n\r\nfunc generateMap(v reflect.Value) map[string]reflect.Value {\r\n\tm := valueMap.Get().(map[string]reflect.Value)\r\n\tclear(m)\r\n\tty := v.Type()\r\n\tfor i := 0; i < v.NumField(); i++ {\r\n\t\tft := ty.Field(i)\r\n\r\n\t\tif !ft.IsExported() {\r\n\t\t\tcontinue\r\n\t\t}\r\n\r\n\t\tfound := ft.Name\r\n\t\tif n, ok := ft.Tag.Lookup(\"nbt\"); ok {\r\n\t\t\tfound = n\r\n\t\t}\r\n\t\tif i := strings.Index(found, \",omitempty\"); i != -1 {\r\n\t\t\tfound = found[:i]\r\n\t\t}\r\n\r\n\t\tm[found] = v.Field(i)\r\n\t}\r\n\r\n\treturn m\r\n}\r\n\r\nconst (\r\n\tEnd = iota\r\n\tByte\r\n\tShort\r\n\tInt\r\n\tLong\r\n\tFloat\r\n\tDouble\r\n\tByteArray\r\n\tString\r\n\tList\r\n\tCompound\r\n\tIntArray\r\n\tLongArray\r\n)\r\n\r\ntype Decoder struct {\r\n\trd io.Reader\r\n\tdontReadRootCompoundName,\r\n\tdisallowUnknownFields bool\r\n}\r\n\r\nfunc NewDecoder(rd io.Reader) *Decoder {\r\n\treturn &Decoder{rd: rd}\r\n}\r\n\r\nfunc (d *Decoder) ReadRootName(v bool) {\r\n\td.dontReadRootCompoundName = !v\r\n}\r\n\r\nfunc (d *Decoder) DisallowUnknownFields(v bool) {\r\n\td.disallowUnknownFields = v\r\n}\r\n\r\n// Unmarshal is the same as making a new decoder and using it on a bytes.Reader of the input\r\nfunc Unmarshal(input []byte, v any) (rootName string, err error) {\r\n\treturn NewDecoder(bytes.NewReader(input)).Decode(v)\r\n}\r\n\r\nfunc (d *Decoder) DecodeRootCompound(v any) (rootName string, err error) {\r\n\tval := reflect.ValueOf(v)\r\n\tif val.Kind() != reflect.Pointer {\r\n\t\treturn \"\", fmt.Errorf(\"Decode expects a pointer\")\r\n\t}\r\n\tval = val.Elem()\r\n\r\n\tif !d.dontReadRootCompoundName {\r\n\t\trootName, err = d.readString()\r\n\t\tif err != nil {\r\n\t\t\treturn\r\n\t\t}\r\n\t}\r\n\r\n\tswitch val.Kind() {\r\n\tcase reflect.Struct:\r\n\t\tm := generateMap(val)\r\n\t\tdefer func() {\r\n\t\t\tclear(m)\r\n\t\t\tvalueMap.Put(m)\r\n\t\t}()\r\n\r\n\t\tif err := d.decodeCompoundStruct(m); err != nil {\r\n\t\t\treturn \"\", err\r\n\t\t}\r\n\tcase reflect.Map:\r\n\t\tif val.IsNil() {\r\n\t\t\tval.Set(reflect.MakeMap(val.Type()))\r\n\t\t}\r\n\t\tif err := d.decodeCompoundMap(val); err != nil {\r\n\t\t\treturn rootName, err\r\n\t\t}\r\n\tdefault:\r\n\t\treturn rootName, fmt.Errorf(\"Decode expects a pointer of struct/map, not %s\", val.Type())\r\n\t}\r\n\r\n\treturn\r\n}\r\n\r\n// Decode will decode the nbt file into v and return the root name of the file\r\nfunc (d *Decoder) Decode(v any) (rootName string, err error) {\r\n\tval := reflect.ValueOf(v)\r\n\tif val.Kind() != reflect.Pointer {\r\n\t\treturn \"\", fmt.Errorf(\"Decode expects a pointer\")\r\n\t}\r\n\tval = val.Elem()\r\n\r\n\ttypeId, err := d.readByte()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\tif typeId != Compound {\r\n\t\treturn \"\", fmt.Errorf(\"expected a compound first element\")\r\n\t}\r\n\r\n\tif !d.dontReadRootCompoundName {\r\n\t\trootName, err = d.readString()\r\n\t\tif err != nil {\r\n\t\t\treturn\r\n\t\t}\r\n\t}\r\n\r\n\tswitch val.Kind() {\r\n\tcase reflect.Struct:\r\n\t\tm := generateMap(val)\r\n\t\tdefer func() {\r\n\t\t\tclear(m)\r\n\t\t\tvalueMap.Put(m)\r\n\t\t}()\r\n\r\n\t\tif err := d.decodeCompoundStruct(m); err != nil {\r\n\t\t\treturn \"\", err\r\n\t\t}\r\n\tcase reflect.Map:\r\n\t\tif val.IsNil() {\r\n\t\t\tval.Set(reflect.MakeMap(val.Type()))\r\n\t\t}\r\n\t\tif err := d.decodeCompoundMap(val); err != nil {\r\n\t\t\treturn rootName, err\r\n\t\t}\r\n\tdefault:\r\n\t\treturn rootName, fmt.Errorf(\"Decode expects a pointer of struct/map, not %s\", val.Type())\r\n\t}\r\n\r\n\treturn\r\n}\r\n\r\nfunc (d *Decoder) decodeCompoundMap(_map reflect.Value) error {\r\n\tvar typeId [1]byte\r\n\tfor {\r\n\t\terr := d.readTo(typeId[:])\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif typeId[0] == End {\r\n\t\t\treturn nil\r\n\t\t}\r\n\r\n\t\tname, err := d.readString()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tnameVal := reflect.ValueOf(name)\r\n\t\tswitch typeId[0] {\r\n\t\tcase Byte:\r\n\t\t\td, err := d.readByte()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch _map.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint8:\r\n\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(uint8(d)))\r\n\t\t\tcase reflect.Int8:\r\n\t\t\tcase reflect.Bool:\r\n\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(*(*bool)(unsafe.Pointer(&d))))\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {\r\n\t\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign byte to type %s for field %s\", _map.Type().Elem(), name)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Short:\r\n\t\t\td, err := d.readShort()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch _map.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint16:\r\n\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(uint16(d)))\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {\r\n\t\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign short to type %s for field %s\", _map.Type().Elem(), name)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Int:\r\n\t\t\td, err := d.readInt()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch _map.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint32:\r\n\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(uint32(d)))\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {\r\n\t\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign int to type %s for field %s\", _map.Type().Elem(), name)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Long:\r\n\t\t\td, err := d.readLong()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch _map.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint64:\r\n\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(uint64(d)))\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {\r\n\t\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign long to type %s for field %s\", _map.Type().Elem(), name)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase String:\r\n\t\t\td, err := d.readString()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {\r\n\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d))\r\n\t\t\t} else {\r\n\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn fmt.Errorf(\"cannot assign string to type %s for field %s\", _map.Type().Elem(), name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Float:\r\n\t\t\td, err := d.readFloat()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {\r\n\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d))\r\n\t\t\t} else {\r\n\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn fmt.Errorf(\"cannot assign float to type %s for field %s\", _map.Type().Elem(), name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Double:\r\n\t\t\td, err := d.readDouble()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {\r\n\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d))\r\n\t\t\t} else {\r\n\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn fmt.Errorf(\"cannot assign double to type %s for field %s\", _map.Type().Elem(), name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase ByteArray:\r\n\t\t\td, err := d.readByteArray()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch _map.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Slice:\r\n\t\t\t\tswitch _map.Type().Elem().Elem().Kind() {\r\n\t\t\t\tcase reflect.Int8:\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(*(*[]int8)(unsafe.Pointer(&d))))\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {\r\n\t\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign byte array to type %s for field %s\", _map.Type().Elem(), name)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase IntArray:\r\n\t\t\td, err := d.readIntArray()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch _map.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Slice:\r\n\t\t\t\tswitch _map.Type().Elem().Elem().Kind() {\r\n\t\t\t\tcase reflect.Uint32:\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(*(*[]uint32)(unsafe.Pointer(&d))))\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {\r\n\t\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign int array to type %s for field %s\", _map.Type().Elem(), name)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase LongArray:\r\n\t\t\td, err := d.readLongArray()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch _map.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Slice:\r\n\t\t\t\tswitch _map.Type().Elem().Elem().Kind() {\r\n\t\t\t\tcase reflect.Uint64:\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(*(*[]uint64)(unsafe.Pointer(&d))))\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(_map.Type().Elem()) {\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(_map.Type().Elem()) {\r\n\t\t\t\t\t\t_map.SetMapIndex(nameVal, reflect.ValueOf(d).Convert(_map.Type().Elem()))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign long array to type %s for field %s\", _map.Type().Elem(), name)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase List:\r\n\t\t\tswitch _map.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Slice:\r\n\t\t\t\ts := reflect.MakeSlice(_map.Type().Elem(), 0, 0)\r\n\t\t\t\td.decodeList(s)\r\n\t\t\t\t_map.SetMapIndex(nameVal, s)\r\n\t\t\tcase reflect.Array:\r\n\t\t\t\ts := reflect.New(_map.Type().Elem()).Elem()\r\n\t\t\t\td.decodeList(s)\r\n\t\t\t\t_map.SetMapIndex(nameVal, s)\r\n\t\t\t}\r\n\t\tcase Compound:\r\n\t\t\tswitch _map.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Map:\r\n\t\t\t\ts := reflect.MakeMap(_map.Type().Elem())\r\n\t\t\t\tif err := d.decodeCompoundMap(s); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\t_map.SetMapIndex(nameVal, s)\r\n\t\t\tcase reflect.Struct:\r\n\t\t\t\tz := reflect.New(_map.Type().Elem()).Elem()\r\n\t\t\t\tm := generateMap(z)\r\n\t\t\t\tdefer func() {\r\n\t\t\t\t\tclear(m)\r\n\t\t\t\t\tvalueMap.Put(m)\r\n\t\t\t\t}()\r\n\r\n\t\t\t\tif err := d.decodeCompoundStruct(m); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\t_map.SetMapIndex(nameVal, z)\r\n\t\t\tcase reflect.Interface:\r\n\t\t\t\tif _map.Type().Elem().NumMethod() == 0 {\r\n\t\t\t\t\ts := reflect.MakeMap(reflect.TypeOf(map[string]any{}))\r\n\r\n\t\t\t\t\tif err := d.decodeCompoundMap(s); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\t\t_map.SetMapIndex(nameVal, s)\r\n\t\t\t\t\tcontinue\r\n\t\t\t\t}\r\n\t\t\t\tfallthrough\r\n\t\t\tdefault:\r\n\t\t\t\treturn fmt.Errorf(\"cannot assign compound to type %s on field %s\", _map.Type().Elem(), name)\r\n\t\t\t}\r\n\t\tdefault:\r\n\t\t\treturn fmt.Errorf(\"unknown tag %d\", typeId[0])\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunc (d *Decoder) decodeCompoundStruct(_struct map[string]reflect.Value) error {\r\n\tvar typeId [1]byte\r\n\tfor {\r\n\t\terr := d.readTo(typeId[:])\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif typeId[0] == End {\r\n\t\t\treturn nil\r\n\t\t}\r\n\r\n\t\tname, err := d.readString()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tvar z, valid = _struct[name]\r\n\r\n\t\tswitch typeId[0] {\r\n\t\tcase Byte:\r\n\t\t\td, err := d.readByte()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif valid {\r\n\t\t\t\tswitch z.Kind() {\r\n\t\t\t\tcase reflect.Uint8:\r\n\t\t\t\t\tz.SetUint(uint64(d))\r\n\t\t\t\tcase reflect.Int8:\r\n\t\t\t\t\tz.SetInt(int64(d))\r\n\t\t\t\tcase reflect.Bool:\r\n\t\t\t\t\tz.SetBool(*(*bool)(unsafe.Pointer(&d)))\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif reflect.TypeOf(d).AssignableTo(z.Type()) {\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(z.Type()) {\r\n\t\t\t\t\t\t\tz.Set(reflect.ValueOf(d).Convert(z.Type()))\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign byte to type %s for field %s\", z.Type(), name)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Short:\r\n\t\t\td, err := d.readShort()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif valid {\r\n\t\t\t\tswitch z.Kind() {\r\n\t\t\t\tcase reflect.Uint16:\r\n\t\t\t\t\tz.SetUint(uint64(d))\r\n\t\t\t\tcase reflect.Int16:\r\n\t\t\t\t\tz.SetInt(int64(d))\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif reflect.TypeOf(d).AssignableTo(z.Type()) {\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(z.Type()) {\r\n\t\t\t\t\t\t\tz.Set(reflect.ValueOf(d).Convert(z.Type()))\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign short to type %s for field %s\", z.Type(), name)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Int:\r\n\t\t\td, err := d.readInt()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif valid {\r\n\t\t\t\tswitch z.Type().Kind() {\r\n\t\t\t\tcase reflect.Uint32, reflect.Uint:\r\n\t\t\t\t\tz.SetUint(uint64(d))\r\n\t\t\t\tcase reflect.Int32, reflect.Int:\r\n\t\t\t\t\tz.SetInt(int64(d))\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif reflect.TypeOf(d).AssignableTo(z.Type()) {\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(z.Type()) {\r\n\t\t\t\t\t\t\tz.Set(reflect.ValueOf(d).Convert(z.Type()))\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign int to type %s for field %s\", z.Type(), name)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Long:\r\n\t\t\td, err := d.readLong()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif valid {\r\n\t\t\t\tswitch z.Type().Kind() {\r\n\t\t\t\tcase reflect.Uint64:\r\n\t\t\t\t\tz.SetUint(uint64(d))\r\n\t\t\t\tcase reflect.Int64:\r\n\t\t\t\t\tz.SetInt(d)\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif reflect.TypeOf(d).AssignableTo(z.Type()) {\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(z.Type()) {\r\n\t\t\t\t\t\t\tz.Set(reflect.ValueOf(d).Convert(z.Type()))\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign long to type %s for field %s\", z.Type(), name)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase String:\r\n\t\t\td, err := d.readString()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif valid {\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(z.Type()) {\r\n\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(z.Type()) {\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d).Convert(z.Type()))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign string to type %s for field %s\", z.Type(), name)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Float:\r\n\t\t\td, err := d.readFloat()\r\n\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif valid {\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(z.Type()) {\r\n\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(z.Type()) {\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d).Convert(z.Type().Elem()))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign float to type %s for field %s\", z.Type(), name)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Double:\r\n\t\t\td, err := d.readDouble()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif valid {\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(z.Type()) {\r\n\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(z.Type()) {\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d).Convert(z.Type()))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign double to type %s for field %s\", z.Type(), name)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase ByteArray:\r\n\t\t\td, err := d.readByteArray()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif valid {\r\n\t\t\t\tswitch z.Type().Kind() {\r\n\t\t\t\tcase reflect.Slice:\r\n\t\t\t\t\tswitch z.Type().Elem().Kind() {\r\n\t\t\t\t\tcase reflect.Int8:\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(*(*[]int8)(unsafe.Pointer(&d))))\r\n\t\t\t\t\tcase reflect.Uint8:\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t\t}\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif reflect.TypeOf(d).AssignableTo(z.Type()) {\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(z.Type()) {\r\n\t\t\t\t\t\t\tz.Set(reflect.ValueOf(d).Convert(z.Type()))\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign byte array to type %s for field %s\", z.Type(), name)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase IntArray:\r\n\t\t\td, err := d.readIntArray()\r\n\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif valid {\r\n\t\t\t\tswitch z.Type().Kind() {\r\n\t\t\t\tcase reflect.Slice:\r\n\t\t\t\t\tswitch z.Type().Elem().Kind() {\r\n\t\t\t\t\tcase reflect.Uint32:\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(*(*[]uint32)(unsafe.Pointer(&d))))\r\n\t\t\t\t\tcase reflect.Int32:\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t\t}\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif reflect.TypeOf(d).AssignableTo(z.Type()) {\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(z.Type()) {\r\n\t\t\t\t\t\t\tz.Set(reflect.ValueOf(d).Convert(z.Type()))\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign int array to type %s for field %s\", z.Type(), name)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase LongArray:\r\n\t\t\td, err := d.readLongArray()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif valid {\r\n\t\t\t\tswitch z.Type().Kind() {\r\n\t\t\t\tcase reflect.Slice:\r\n\t\t\t\t\tswitch z.Type().Elem().Kind() {\r\n\t\t\t\t\tcase reflect.Uint64:\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(*(*[]uint64)(unsafe.Pointer(&d))))\r\n\t\t\t\t\tcase reflect.Int64:\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t\t}\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif reflect.TypeOf(d).AssignableTo(z.Type()) {\r\n\t\t\t\t\t\tz.Set(reflect.ValueOf(d))\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif reflect.TypeOf(d).ConvertibleTo(z.Type()) {\r\n\t\t\t\t\t\t\tz.Set(reflect.ValueOf(d).Convert(z.Type()))\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn fmt.Errorf(\"cannot assign long array to type %s for field %s\", z.Type(), name)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase List:\r\n\t\t\tif valid {\r\n\t\t\t\tswitch z.Type().Kind() {\r\n\t\t\t\tcase reflect.Slice:\r\n\t\t\t\t\td.decodeList(z)\r\n\t\t\t\tcase reflect.Array:\r\n\t\t\t\t\ts := reflect.New(z.Type()).Elem()\r\n\t\t\t\t\td.decodeList(s)\r\n\t\t\t\t\tz.Set(s)\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\td._decodeList()\r\n\t\t\t}\r\n\t\tcase Compound:\r\n\t\t\tif valid {\r\n\t\t\t\tswitch z.Type().Kind() {\r\n\t\t\t\tcase reflect.Struct:\r\n\t\t\t\t\tm := generateMap(_struct[name])\r\n\t\t\t\t\tdefer valueMap.Put(m)\r\n\r\n\t\t\t\t\tif err := d.decodeCompoundStruct(m); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\tcase reflect.Interface:\r\n\t\t\t\t\tif z.Type().NumMethod() == 0 {\r\n\t\t\t\t\t\ts := reflect.MakeMap(reflect.TypeOf(map[string]any{}))\r\n\r\n\t\t\t\t\t\tif err := d.decodeCompoundMap(s); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tz.Set(s)\r\n\t\t\t\t\t\tcontinue\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfallthrough\r\n\t\t\t\tcase reflect.Map:\r\n\t\t\t\t\ts := reflect.MakeMap(z.Type())\r\n\t\t\t\t\tif err := d.decodeCompoundMap(s); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\t\tz.Set(s)\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn fmt.Errorf(\"cannot assign compound to type %s on field %s\", z.Type(), name)\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\td.decodeCompound()\r\n\t\t\t}\r\n\t\tdefault:\r\n\t\t\treturn fmt.Errorf(\"unknown tag %d\", typeId[0])\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// TODO add byte, int, long array IMPORTANT!\r\nfunc (d *Decoder) decodeList(list reflect.Value) error {\r\n\ttypeId, err := d.readByte()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\tlength, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif list.Len() < int(length) {\r\n\t\tswitch list.Kind() {\r\n\t\tcase reflect.Slice:\r\n\t\t\tlist.Set(reflect.MakeSlice(list.Type(), int(length), int(length)))\r\n\t\tcase reflect.Array:\r\n\t\t\treturn fmt.Errorf(\"list of size %d is too big for array %s\", length, list.Type())\r\n\t\t}\r\n\t}\r\n\r\n\tfor i := 0; i < int(length); i++ {\r\n\t\tswitch typeId {\r\n\t\tcase Byte:\r\n\t\t\td, err := d.readByte()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch list.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint8:\r\n\t\t\t\tlist.Index(i).Set(reflect.ValueOf(uint8(d)))\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {\r\n\t\t\t\t\tlist.Index(i).Set(reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn fmt.Errorf(\"cannot assign byte to type %s for index %d\", list.Type().Elem(), i)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Short:\r\n\t\t\td, err := d.readShort()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch list.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint16:\r\n\t\t\t\tlist.Index(i).Set(reflect.ValueOf(uint16(d)))\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {\r\n\t\t\t\t\tlist.Index(i).Set(reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn fmt.Errorf(\"cannot assign short to type %s for index %d\", list.Type().Elem(), i)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Int:\r\n\t\t\td, err := d.readInt()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch list.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint32:\r\n\t\t\t\tlist.Index(i).Set(reflect.ValueOf(uint32(d)))\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {\r\n\t\t\t\t\tlist.Index(i).Set(reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn fmt.Errorf(\"cannot assign int to type %s for index %d\", list.Type().Elem(), i)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Long:\r\n\t\t\td, err := d.readLong()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tswitch list.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint64:\r\n\t\t\t\tlist.Index(i).Set(reflect.ValueOf(uint64(d)))\r\n\t\t\tdefault:\r\n\t\t\t\tif reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {\r\n\t\t\t\t\tlist.Index(i).Set(reflect.ValueOf(d))\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn fmt.Errorf(\"cannot assign long to type %s for index %d\", list.Type().Elem(), i)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase Float:\r\n\t\t\td, err := d.readFloat()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {\r\n\t\t\t\tlist.Index(i).Set(reflect.ValueOf(d))\r\n\t\t\t} else {\r\n\t\t\t\treturn fmt.Errorf(\"cannot assign float to type %s for index %d\", list.Type().Elem(), i)\r\n\t\t\t}\r\n\t\tcase Double:\r\n\t\t\td, err := d.readDouble()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {\r\n\t\t\t\tlist.Index(i).Set(reflect.ValueOf(d))\r\n\t\t\t} else {\r\n\t\t\t\treturn fmt.Errorf(\"cannot assign double to type %s for index %d\", list.Type().Elem(), i)\r\n\t\t\t}\r\n\t\tcase String:\r\n\t\t\td, err := d.readString()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif reflect.TypeOf(d).AssignableTo(list.Type().Elem()) {\r\n\t\t\t\tlist.Index(i).Set(reflect.ValueOf(d))\r\n\t\t\t} else {\r\n\t\t\t\treturn fmt.Errorf(\"cannot assign string to type %s for index %d\", list.Type().Elem(), i)\r\n\t\t\t}\r\n\t\tcase Compound:\r\n\t\t\tswitch list.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Struct:\r\n\t\t\t\tm := generateMap(list.Index(i))\r\n\t\t\t\tdefer valueMap.Put(m)\r\n\r\n\t\t\t\tif err := d.decodeCompoundStruct(m); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase reflect.Map:\r\n\t\t\t\tlist.Index(i).Set(reflect.MakeMap(list.Type().Elem()))\r\n\t\t\t\tif err := d.decodeCompoundMap(list.Index(i)); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\treturn fmt.Errorf(\"cannot assign compound to type %s on index %d\", list.Type().Elem(), i)\r\n\t\t\t}\r\n\t\tcase List:\r\n\t\t\tswitch list.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Slice:\r\n\t\t\t\tlist.Index(i).Set(reflect.MakeSlice(list.Type().Elem(), 0, 0))\r\n\t\t\t\tfallthrough\r\n\t\t\tcase reflect.Array:\r\n\t\t\t\tif err := d.decodeList(list.Index(i)); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\treturn fmt.Errorf(\"cannot assign list to type %s on index %d\", list.Type().Elem(), i)\r\n\t\t\t}\r\n\t\tdefault:\r\n\t\t\treturn fmt.Errorf(\"unknown tag %d\", typeId)\r\n\t\t}\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) decodeCompound() error {\r\n\tfor {\r\n\t\ttypeId, err := d.readByte()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tif typeId == End {\r\n\t\t\treturn nil\r\n\t\t}\r\n\t\t_, err = d.readString()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tswitch typeId {\r\n\t\tcase Byte:\r\n\t\t\t_, err := d.readByte()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Short:\r\n\t\t\t_, err := d.readShort()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Int:\r\n\t\t\t_, err := d.readInt()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Long:\r\n\t\t\t_, err := d.readLong()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Float:\r\n\t\t\t_, err := d.readFloat()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Double:\r\n\t\t\t_, err := d.readDouble()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase ByteArray:\r\n\t\t\t_, err := d.readByteArray()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase IntArray:\r\n\t\t\t_, err := d.readIntArray()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase LongArray:\r\n\t\t\t_, err := d.readLongArray()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase String:\r\n\t\t\t_, err := d.readString()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Compound:\r\n\t\t\tif err := d.decodeCompound(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase List:\r\n\t\t\tif err := d._decodeList(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunc (d *Decoder) _decodeList() error {\r\n\ttypeId, err := d.readByte()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\tlength, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor i := 0; i < int(length); i++ {\r\n\t\tswitch typeId {\r\n\t\tcase Byte:\r\n\t\t\tif _, err := d.readByte(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Short:\r\n\t\t\tif _, err := d.readShort(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Int:\r\n\t\t\tif _, err := d.readInt(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Long:\r\n\t\t\tif _, err := d.readLong(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Float:\r\n\t\t\tif _, err := d.readFloat(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Double:\r\n\t\t\tif _, err := d.readDouble(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase String:\r\n\t\t\tif _, err := d.readString(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase List:\r\n\t\t\tif err := d._decodeList(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Compound:\r\n\t\t\tif err := d.decodeCompound(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase ByteArray:\r\n\t\t\tif _, err := d.readByteArray(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase IntArray:\r\n\t\t\tif _, err := d.readIntArray(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase LongArray:\r\n\t\t\tif _, err := d.readLongArray(); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) readByte() (int8, error) {\r\n\tvar data [1]byte\r\n\t_, err := d.rd.Read(data[:])\r\n\treturn int8(data[0]), err\r\n}\r\n\r\nfunc (d *Decoder) readTo(t []byte) error {\r\n\t_, err := d.rd.Read(t)\r\n\treturn err\r\n}\r\n\r\nfunc (d *Decoder) readShort() (int16, error) {\r\n\tvar data [2]byte\r\n\t_, err := d.rd.Read(data[:])\r\n\r\n\treturn int16(data[0])<<8 | int16(data[1]), err\r\n}\r\n\r\nfunc (d *Decoder) readInt() (int32, error) {\r\n\tvar data [4]byte\r\n\t_, err := d.rd.Read(data[:])\r\n\r\n\treturn int32(data[0])<<24 | int32(data[1])<<16 | int32(data[2])<<8 | int32(data[3]), err\r\n}\r\n\r\nfunc (d *Decoder) readLong() (int64, error) {\r\n\tvar data [8]byte\r\n\t_, err := d.rd.Read(data[:])\r\n\r\n\treturn int64(data[0])<<56 | int64(data[1])<<48 | int64(data[2])<<40 | int64(data[3])<<32 | int64(data[4])<<24 | int64(data[5])<<16 | int64(data[6])<<8 | int64(data[7]), err\r\n}\r\n\r\nfunc (d *Decoder) readFloat() (float32, error) {\r\n\ti, err := d.readInt()\r\n\treturn math.Float32frombits(uint32(i)), err\r\n}\r\n\r\nfunc (d *Decoder) readDouble() (float64, error) {\r\n\ti, err := d.readLong()\r\n\treturn math.Float64frombits(uint64(i)), err\r\n}\r\n\r\nfunc (d *Decoder) readString() (string, error) {\r\n\tl, err := d.readShort()\r\n\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\r\n\tif l < 0 {\r\n\t\treturn \"\", fmt.Errorf(\"negative length for make (read string)\")\r\n\t}\r\n\r\n\tvar data = make([]byte, l)\r\n\t_, err = d.rd.Read(data)\r\n\treturn string(data), err\r\n}\r\n\r\nfunc (d *Decoder) readByteArray() ([]byte, error) {\r\n\tl, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn nil, err\r\n\t}\r\n\r\n\tif l < 0 {\r\n\t\treturn nil, fmt.Errorf(\"negative length for make (read byte array)\")\r\n\t}\r\n\r\n\tvar data = make([]byte, l)\r\n\t_, err = d.rd.Read(data)\r\n\r\n\treturn data, err\r\n}\r\n\r\nfunc (d *Decoder) readIntArray() ([]int32, error) {\r\n\tl, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn nil, err\r\n\t}\r\n\tif l < 0 {\r\n\t\treturn nil, fmt.Errorf(\"negative length for make (read int array)\")\r\n\t}\r\n\tvar data = make([]byte, l*4)\r\n\t_, err = d.rd.Read(data)\r\n\tif err != nil {\r\n\t\treturn nil, err\r\n\t}\r\n\r\n\tvar sl = make([]int32, l)\r\n\r\n\tfor i := range sl {\r\n\t\tsl[i] = int32(data[i*4+0])<<24 | int32(data[i*4+1])<<16 | int32(data[i*4+2])<<8 | int32(data[i*4+3])\r\n\t}\r\n\treturn sl, nil\r\n}\r\n\r\nfunc (d *Decoder) readLongArray() ([]int64, error) {\r\n\tl, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn nil, err\r\n\t}\r\n\tif l < 0 {\r\n\t\treturn nil, fmt.Errorf(\"negative length for make (read long array)\")\r\n\t}\r\n\tvar data = make([]byte, l*8)\r\n\t_, err = d.rd.Read(data)\r\n\r\n\tif err != nil {\r\n\t\treturn nil, err\r\n\t}\r\n\r\n\tvar sl = make([]int64, l)\r\n\r\n\tfor i := range sl {\r\n\t\tsl[i] = int64(data[i*8+0])<<56 | int64(data[i*8+1])<<48 | int64(data[i*8+2])<<40 | int64(data[i*8+3])<<32 | int64(data[i*8+4])<<24 | int64(data[i*8+5])<<16 | int64(data[i*8+6])<<8 | int64(data[i*8+7])\r\n\t}\r\n\treturn sl, nil\r\n}\r\n"
  },
  {
    "path": "protocol/nbt/encoder.go",
    "content": "package nbt\r\n\r\nimport (\r\n\t\"encoding/binary\"\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"math\"\r\n\t\"reflect\"\r\n\t\"strings\"\r\n\t\"unsafe\"\r\n)\r\n\r\ntype Encoder struct {\r\n\tw                         io.Writer\r\n\tdontWriteRootCompoundName bool\r\n}\r\n\r\nfunc NewEncoder(w io.Writer) *Encoder {\r\n\treturn &Encoder{w: w}\r\n}\r\n\r\nfunc (e *Encoder) Encode(name string, v any) error {\r\n\tif err := e.writeByte(Compound); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif !e.dontWriteRootCompoundName {\r\n\t\tif err := e.writeString(name); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tval := reflect.ValueOf(v)\r\n\tswitch val.Kind() {\r\n\tcase reflect.Struct:\r\n\t\treturn e.encodeCompoundStruct(val)\r\n\tcase reflect.Map:\r\n\t\treturn e.encodeCompoundMap(val)\r\n\tdefault:\r\n\t\treturn fmt.Errorf(\"Encode expects map/struct, not %s\", val.Type())\r\n\t}\r\n}\r\n\r\nfunc (e *Encoder) WriteRootName(val bool) {\r\n\te.dontWriteRootCompoundName = !val\r\n}\r\n\r\nfunc (e *Encoder) writeBytes(b ...byte) error {\r\n\t_, err := e.w.Write(b)\r\n\treturn err\r\n}\r\n\r\nfunc (e *Encoder) writeByte(b int8) error {\r\n\treturn e.writeBytes(byte(b))\r\n}\r\n\r\nfunc (e *Encoder) writeShort(s int16) error {\r\n\treturn e.writeBytes(\r\n\t\tbyte(s>>8),\r\n\t\tbyte(s),\r\n\t)\r\n}\r\n\r\nfunc (e *Encoder) writeInt(i int32) error {\r\n\treturn e.writeBytes(\r\n\t\tbyte(i>>24),\r\n\t\tbyte(i>>16),\r\n\t\tbyte(i>>8),\r\n\t\tbyte(i),\r\n\t)\r\n}\r\n\r\nfunc (e *Encoder) writeLong(l int64) error {\r\n\treturn e.writeBytes(\r\n\t\tbyte(l>>56),\r\n\t\tbyte(l>>48),\r\n\t\tbyte(l>>40),\r\n\t\tbyte(l>>32),\r\n\t\tbyte(l>>24),\r\n\t\tbyte(l>>16),\r\n\t\tbyte(l>>8),\r\n\t\tbyte(l),\r\n\t)\r\n}\r\n\r\nfunc (e *Encoder) writeFloat(f float32) error {\r\n\treturn e.writeInt(int32(math.Float32bits(f)))\r\n}\r\n\r\nfunc (e *Encoder) writeDouble(d float64) error {\r\n\treturn e.writeLong(int64(math.Float64bits(d)))\r\n}\r\n\r\nfunc (e *Encoder) writeIntArray(il []int32) error {\r\n\tif err := e.writeInt(int32(len(il))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn binary.Write(e.w, binary.BigEndian, il)\r\n}\r\n\r\nfunc (e *Encoder) writeLongArray(ll []int64) error {\r\n\tif err := e.writeInt(int32(len(ll))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn binary.Write(e.w, binary.BigEndian, ll)\r\n}\r\n\r\nfunc (e *Encoder) writeString(s string) error {\r\n\tif err := e.writeShort(int16(len(s))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn e.writeBytes([]byte(s)...)\r\n}\r\n\r\nfunc (e *Encoder) encodeCompoundStruct(val reflect.Value) error {\r\n\tfor i := 0; i < val.NumField(); i++ {\r\n\t\ttf := val.Type().Field(i)\r\n\t\tf := val.Field(i)\r\n\t\tif !tf.IsExported() {\r\n\t\t\tcontinue\r\n\t\t}\r\n\t\tname := tf.Name\r\n\t\tif v, ok := tf.Tag.Lookup(\"nbt\"); ok {\r\n\t\t\tname = v\r\n\t\t}\r\n\t\tif name == \"-\" {\r\n\t\t\tcontinue\r\n\t\t}\r\n\t\tvar omitempty bool\r\n\r\n\t\ti := strings.Index(name, \",omitempty\")\r\n\t\tif i != -1 {\r\n\t\t\tname = name[:i]\r\n\t\t\tomitempty = true\r\n\t\t}\r\n\r\n\t\tif omitempty && f.IsZero() {\r\n\t\t\tcontinue\r\n\t\t}\r\n\r\n\t\tif f.Kind() == reflect.Interface {\r\n\t\t\tf = f.Elem()\r\n\t\t}\r\n\t\tswitch f.Kind() {\r\n\t\tcase reflect.Bool:\r\n\t\t\tif err := e.writeByte(Byte); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tb := f.Bool()\r\n\t\t\tif err := e.writeByte(*(*int8)(unsafe.Pointer(&b))); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Int8, reflect.Uint8:\r\n\t\t\tif err := e.writeByte(Byte); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif f.CanUint() {\r\n\t\t\t\tif err := e.writeByte(int8(f.Uint())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif err := e.writeByte(int8(f.Int())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Int16, reflect.Uint16:\r\n\t\t\tif err := e.writeByte(Short); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif f.CanUint() {\r\n\t\t\t\tif err := e.writeShort(int16(f.Uint())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif err := e.writeShort(int16(f.Int())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Int32, reflect.Uint32:\r\n\t\t\tif err := e.writeByte(Int); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif f.CanUint() {\r\n\t\t\t\tif err := e.writeInt(int32(f.Uint())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif err := e.writeInt(int32(f.Int())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Int64, reflect.Uint64:\r\n\t\t\tif err := e.writeByte(Long); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif f.CanUint() {\r\n\t\t\t\tif err := e.writeLong(int64(f.Uint())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif err := e.writeLong(int64(f.Int())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Float32:\r\n\t\t\tif err := e.writeByte(Float); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeFloat(float32(f.Float())); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Float64:\r\n\t\t\tif err := e.writeByte(Double); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeDouble(f.Float()); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.String:\r\n\t\t\tif err := e.writeByte(String); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(f.String()); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Slice, reflect.Array:\r\n\t\t\tswitch f.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint8, reflect.Int8:\r\n\t\t\t\tif err := e.writeByte(ByteArray); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif err := e.writeInt(int32(f.Len())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tfor i := 0; i < f.Len(); i++ {\r\n\t\t\t\t\tval := f.Index(i)\r\n\t\t\t\t\tswitch val.Kind() {\r\n\t\t\t\t\tcase reflect.Int8:\r\n\t\t\t\t\t\tif err := e.writeByte(int8(val.Int())); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\tcase reflect.Uint8:\r\n\t\t\t\t\t\tif err := e.writeByte(int8(val.Uint())); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tcase reflect.Uint32, reflect.Int32:\r\n\t\t\t\tif err := e.writeByte(IntArray); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeInt(int32(f.Len())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tfor i := 0; i < f.Len(); i++ {\r\n\t\t\t\t\tfi := f.Index(i)\r\n\t\t\t\t\tif f.CanUint() {\r\n\t\t\t\t\t\tif err := e.writeInt(int32(fi.Uint())); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif err := e.writeInt(int32(fi.Int())); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tcase reflect.Uint64, reflect.Int64:\r\n\t\t\t\tif err := e.writeByte(LongArray); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeInt(int32(f.Len())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tfor i := 0; i < f.Len(); i++ {\r\n\t\t\t\t\tx := f.Index(i)\r\n\r\n\t\t\t\t\tif x.CanUint() {\r\n\t\t\t\t\t\tif err := e.writeLong(int64(x.Uint())); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif err := e.writeLong(x.Int()); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tif err := e.writeByte(List); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.encodeList(f); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Struct:\r\n\t\t\tif err := e.writeByte(Compound); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.encodeCompoundStruct(f); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Map:\r\n\t\t\tif err := e.writeByte(Compound); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.encodeCompoundMap(f); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\treturn e.writeByte(0)\r\n}\r\n\r\nfunc (e *Encoder) encodeCompoundMap(val reflect.Value) error {\r\n\tfor _, key := range val.MapKeys() {\r\n\t\tf := val.MapIndex(key)\r\n\t\tname := key.String()\r\n\r\n\t\tswitch f.Kind() {\r\n\t\tcase reflect.Bool:\r\n\t\t\tif err := e.writeByte(Byte); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tb := f.Bool()\r\n\t\t\tif err := e.writeByte(*(*int8)(unsafe.Pointer(&b))); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Int8, reflect.Uint8:\r\n\t\t\tif err := e.writeByte(Byte); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif f.CanUint() {\r\n\t\t\t\tif err := e.writeByte(int8(f.Uint())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif err := e.writeByte(int8(f.Int())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Int16, reflect.Uint16:\r\n\t\t\tif err := e.writeByte(Short); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif f.CanUint() {\r\n\t\t\t\tif err := e.writeShort(int16(f.Uint())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif err := e.writeShort(int16(f.Int())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Int32, reflect.Uint32:\r\n\t\t\tif err := e.writeByte(Int); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif f.CanUint() {\r\n\t\t\t\tif err := e.writeInt(int32(f.Uint())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif err := e.writeInt(int32(f.Int())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Int64, reflect.Uint64:\r\n\t\t\tif err := e.writeByte(Long); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif f.CanUint() {\r\n\t\t\t\tif err := e.writeLong(int64(f.Uint())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif err := e.writeLong(int64(f.Int())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Float32:\r\n\t\t\tif err := e.writeByte(Float); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeFloat(float32(f.Float())); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Float64:\r\n\t\t\tif err := e.writeByte(Double); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeDouble(f.Float()); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.String:\r\n\t\t\tif err := e.writeByte(String); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(f.String()); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Slice, reflect.Array:\r\n\t\t\tswitch f.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint8, reflect.Int8:\r\n\t\t\t\tif err := e.writeByte(ByteArray); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeInt(int32(f.Len())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tfor i := 0; i < f.Len(); i++ {\r\n\t\t\t\t\tval := f.Index(i)\r\n\t\t\t\t\tswitch val.Kind() {\r\n\t\t\t\t\tcase reflect.Int8:\r\n\t\t\t\t\t\tif err := e.writeByte(int8(val.Int())); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\tcase reflect.Uint8:\r\n\t\t\t\t\t\tif err := e.writeByte(int8(val.Uint())); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tcase reflect.Uint32, reflect.Int32:\r\n\t\t\t\tif err := e.writeByte(IntArray); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeIntArray(*(*[]int32)(f.UnsafePointer())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase reflect.Uint64, reflect.Int64:\r\n\t\t\t\tif err := e.writeByte(LongArray); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeLongArray(*(*[]int64)(f.UnsafePointer())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tif err := e.writeByte(List); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := e.encodeList(f); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Struct:\r\n\t\t\tif err := e.writeByte(Compound); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.encodeCompoundStruct(f); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Map:\r\n\t\t\tif err := e.writeByte(Compound); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.writeString(name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := e.encodeCompoundMap(f); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\treturn e.writeByte(0)\r\n}\r\n\r\nfunc (e *Encoder) encodeList(val reflect.Value) error {\r\n\tif err := e.writeByte(e.tagFor(val.Type().Elem())); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := e.writeInt(int32(val.Len())); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tfor i := 0; i < val.Len(); i++ {\r\n\t\tf := val.Index(i)\r\n\t\tswitch val.Type().Elem().Kind() {\r\n\t\tcase reflect.Bool:\r\n\r\n\t\t\tb := f.Bool()\r\n\t\t\tif err := e.writeByte(*(*int8)(unsafe.Pointer(&b))); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Int8:\r\n\t\t\tif err := e.writeByte(int8(f.Int())); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Uint8:\r\n\t\t\tif err := e.writeByte(int8(f.Uint())); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Int16:\r\n\t\t\tif err := e.writeShort(int16(f.Int())); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Uint16:\r\n\t\t\tif err := e.writeShort(int16(f.Uint())); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Int32:\r\n\t\t\tif err := e.writeInt(int32(f.Int())); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Uint32:\r\n\t\t\tif err := e.writeInt(int32(f.Uint())); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Int64:\r\n\t\t\tif err := e.writeLong(f.Int()); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Uint64:\r\n\t\t\tif err := e.writeLong(int64(f.Uint())); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.String:\r\n\t\t\tif err := e.writeString(f.String()); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Slice, reflect.Array:\r\n\t\t\tswitch f.Type().Elem().Kind() {\r\n\t\t\tcase reflect.Uint8, reflect.Int8:\r\n\t\t\t\tif err := e.writeInt(int32(f.Len())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tfor i := 0; i < f.Len(); i++ {\r\n\t\t\t\t\tval := f.Index(i)\r\n\t\t\t\t\tswitch val.Kind() {\r\n\t\t\t\t\tcase reflect.Int8:\r\n\t\t\t\t\t\tif err := e.writeByte(int8(val.Int())); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\tcase reflect.Uint8:\r\n\t\t\t\t\t\tif err := e.writeByte(int8(val.Uint())); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tcase reflect.Uint32, reflect.Int32:\r\n\t\t\t\tif err := e.writeIntArray(*(*[]int32)(f.UnsafePointer())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase reflect.Uint64, reflect.Int64:\r\n\t\t\t\tif err := e.writeInt(int32(f.Len())); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tfor i := 0; i < f.Len(); i++ {\r\n\t\t\t\t\tx := f.Index(i)\r\n\r\n\t\t\t\t\tif x.CanUint() {\r\n\t\t\t\t\t\tif err := e.writeLong(int64(x.Uint())); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif err := e.writeLong(x.Int()); err != nil {\r\n\t\t\t\t\t\t\treturn err\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\tif err := e.encodeList(f); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase reflect.Float32:\r\n\t\t\tif err := e.writeFloat(float32(f.Float())); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Float64:\r\n\t\t\tif err := e.writeDouble(f.Float()); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Struct:\r\n\t\t\tif err := e.encodeCompoundStruct(f); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase reflect.Map:\r\n\t\t\tif err := e.encodeCompoundMap(f); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (e *Encoder) tagFor(typ reflect.Type) int8 {\r\n\tswitch typ.Kind() {\r\n\tcase reflect.Uint8, reflect.Int8, reflect.Bool:\r\n\t\treturn Byte\r\n\tcase reflect.Uint16, reflect.Int16:\r\n\t\treturn Short\r\n\tcase reflect.Uint32, reflect.Int32:\r\n\t\treturn Int\r\n\tcase reflect.Uint64, reflect.Int64:\r\n\t\treturn Long\r\n\tcase reflect.Float32:\r\n\t\treturn Float\r\n\tcase reflect.Float64:\r\n\t\treturn Double\r\n\tcase reflect.Struct, reflect.Map:\r\n\t\treturn Compound\r\n\tcase reflect.String:\r\n\t\treturn String\r\n\tcase reflect.Slice, reflect.Array:\r\n\t\t{\r\n\t\t\tswitch typ.Elem().Kind() {\r\n\t\t\tcase reflect.Uint8, reflect.Int8:\r\n\t\t\t\treturn ByteArray\r\n\t\t\tcase reflect.Uint32, reflect.Int32:\r\n\t\t\t\treturn IntArray\r\n\t\t\tcase reflect.Uint64, reflect.Int64:\r\n\t\t\t\treturn LongArray\r\n\t\t\tdefault:\r\n\t\t\t\treturn List\r\n\t\t\t}\r\n\t\t}\r\n\tdefault:\r\n\t\treturn 0\r\n\t}\r\n}\r\n"
  },
  {
    "path": "protocol/nbt/qnbt/abi.go",
    "content": "package qnbt\r\n\r\nimport (\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/oq-x/unsafe2\"\r\n)\r\n\r\ntype name struct {\r\n\tBytes *byte\r\n}\r\n\r\nfunc (n name) exported() bool {\r\n\treturn (*n.Bytes)&(1<<0) != 0\r\n}\r\n\r\nfunc (n name) hastag() bool {\r\n\treturn (*n.Bytes)&(1<<1) != 0\r\n}\r\n\r\nfunc (n name) embedded() bool {\r\n\treturn (*n.Bytes)&(1<<3) != 0\r\n}\r\n\r\nfunc (n name) rvi(off int) (int, int) {\r\n\tv := 0\r\n\tfor i := 0; ; i++ {\r\n\t\tx := *n.data(off + i)\r\n\t\tv += int(x&0x7f) << (7 * i)\r\n\t\tif x&0x80 == 0 {\r\n\t\t\treturn i + 1, v\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunc (n name) data(off int) *byte {\r\n\treturn (*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(n.Bytes)) + uintptr(off)))\r\n}\r\n\r\nfunc (n name) name() string {\r\n\ti, l := n.rvi(1)\r\n\treturn unsafe.String(n.data(i+1), l)\r\n}\r\n\r\nfunc (n name) tag() string {\r\n\tif !n.hastag() {\r\n\t\treturn \"\"\r\n\t}\r\n\ti, l := n.rvi(1)\r\n\ti2, l2 := n.rvi(1 + i + l)\r\n\treturn unsafe.String(n.data(1+i+l+i2), l2)\r\n}\r\n\r\ntype structField struct {\r\n\tname name\r\n\ttyp  *unsafe2.Type\r\n\toff  uintptr\r\n}\r\n\r\ntype structType struct {\r\n\tunsafe2.Type\r\n\tpkgPath name\r\n\tfields  []structField\r\n}\r\n\r\ntype ptrType struct {\r\n\tunsafe2.Type\r\n\telem *unsafe2.Type\r\n}\r\n\r\ntype arrayType struct {\r\n\tunsafe2.Type\r\n\telem  *unsafe2.Type\r\n\tslice *unsafe2.Type\r\n\tlen   uintptr\r\n}\r\n\r\ntype mapType struct {\r\n\tunsafe2.Type\r\n\tkey  *unsafe2.Type\r\n\telem *unsafe2.Type\r\n\t// rest is unimportant\r\n}\r\n\r\n// returns the element of a pointer\r\nfunc ptrelem(t *unsafe2.Type, v uintptr) (*unsafe2.Type, unsafe.Pointer) {\r\n\tptr_t := *(*ptrType)(unsafe.Pointer(t))\r\n\r\n\telem_t := ptr_t.elem\r\n\r\n\treturn elem_t, unsafe.Pointer(v)\r\n}\r\n\r\nfunc kindOf(t *unsafe2.Type) uint8 {\r\n\treturn t.Kind & kindm\r\n}\r\n\r\nconst (\r\n\tkindm = (1 << 5) - 1\r\n)\r\n\r\nfunc kind_name(k uint8) string {\r\n\tswitch k {\r\n\tcase bool_k:\r\n\t\treturn \"bool\"\r\n\r\n\tcase int_k:\r\n\t\treturn \"int\"\r\n\tcase int8_k:\r\n\t\treturn \"int8\"\r\n\tcase int16_k:\r\n\t\treturn \"int16\"\r\n\tcase int32_k:\r\n\t\treturn \"int32\"\r\n\tcase int64_k:\r\n\t\treturn \"int64\"\r\n\r\n\tcase uint_k:\r\n\t\treturn \"uint\"\r\n\tcase uint8_k:\r\n\t\treturn \"uint8\"\r\n\tcase uint16_k:\r\n\t\treturn \"uint16\"\r\n\tcase uint32_k:\r\n\t\treturn \"uint32\"\r\n\tcase uint64_k:\r\n\t\treturn \"uint64\"\r\n\tcase uintptr_k:\r\n\t\treturn \"uintptr\"\r\n\r\n\tcase float32_k:\r\n\t\treturn \"float32\"\r\n\tcase float64_k:\r\n\t\treturn \"float64\"\r\n\tcase complex64_k:\r\n\t\treturn \"complex64\"\r\n\tcase complex128_k:\r\n\t\treturn \"complex128\"\r\n\r\n\tcase array_k:\r\n\t\treturn \"array\"\r\n\tcase chan_k:\r\n\t\treturn \"chan\"\r\n\tcase func_k:\r\n\t\treturn \"func\"\r\n\tcase interface_k:\r\n\t\treturn \"interface\"\r\n\tcase map_k:\r\n\t\treturn \"map\"\r\n\tcase pointer_k:\r\n\t\treturn \"pointer\"\r\n\tcase slice_k:\r\n\t\treturn \"slice\"\r\n\tcase string_k:\r\n\t\treturn \"string\"\r\n\tcase struct_k:\r\n\t\treturn \"struct\"\r\n\tcase unsafe_ptr_k:\r\n\t\treturn \"unsafe.Pointer\"\r\n\tdefault:\r\n\t\treturn \"invalid\"\r\n\t}\r\n}\r\n\r\nconst (\r\n\tinvalid_k uint8 = iota\r\n\tbool_k\r\n\tint_k\r\n\tint8_k\r\n\tint16_k\r\n\tint32_k\r\n\tint64_k\r\n\tuint_k\r\n\tuint8_k\r\n\tuint16_k\r\n\tuint32_k\r\n\tuint64_k\r\n\tuintptr_k\r\n\tfloat32_k\r\n\tfloat64_k\r\n\tcomplex64_k\r\n\tcomplex128_k\r\n\tarray_k\r\n\tchan_k\r\n\tfunc_k\r\n\tinterface_k\r\n\tmap_k\r\n\tpointer_k\r\n\tslice_k\r\n\tstring_k\r\n\tstruct_k\r\n\tunsafe_ptr_k\r\n)\r\n\r\nfunc setSliceArray(s, a unsafe.Pointer, l int) {\r\n\t*(*uintptr)(s) = uintptr(a)\r\n\t*(*int)(unsafe.Add(s, ptrSize)) = l\r\n\t*(*int)(unsafe.Add(s, ptrSize*2)) = l\r\n}\r\n\r\nvar ptrSize = unsafe.Sizeof(0)\r\n"
  },
  {
    "path": "protocol/nbt/qnbt/buffer.go",
    "content": "package qnbt\r\n\r\nimport (\r\n\t\"io\"\r\n\t\"unsafe\"\r\n)\r\n\r\ntype bufferedReader struct {\r\n\tsrc io.Reader\r\n\tbuf []byte\r\n\r\n\tr, w int\r\n}\r\n\r\nfunc (rd *bufferedReader) available() int {\r\n\treturn rd.w - rd.r\r\n}\r\n\r\nfunc (rd *bufferedReader) readBytes(num int) ([]byte, error) {\r\n\tif err := rd.fill(num); err != nil {\r\n\t\treturn nil, err\r\n\t}\r\n\tb := rd.buf[rd.r : rd.r+num]\r\n\trd.r += num\r\n\r\n\treturn b, nil\r\n}\r\n\r\nfunc (rd *bufferedReader) readBytesString(num int) (string, error) {\r\n\tb, err := rd.readBytes(num)\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\r\n\treturn unsafe.String(unsafe.SliceData(b), num), nil\r\n}\r\n\r\nfunc (rd *bufferedReader) fill(min int) error {\r\n\tif rd.available() < min {\r\n\t\trd.r, rd.w = 0, copy(rd.buf, rd.buf[rd.r:rd.w])\r\n\r\n\t\tfor i := 0; i < 5; i++ {\r\n\t\t\tn, err := rd.src.Read(rd.buf[rd.w:])\r\n\t\t\trd.w += n\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tmin -= n\r\n\t\t\tif min <= 0 || rd.w == len(rd.buf) {\r\n\t\t\t\treturn nil\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn io.ErrNoProgress\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (rd *bufferedReader) skip(n int) error {\r\n\tavail := rd.w - rd.r\r\n\tif avail > n {\r\n\t\trd.r += n\r\n\t\treturn nil\r\n\t}\r\n\r\n\tn -= avail\r\n\trd.r += avail\r\n\r\n\trd.r, rd.w = 0, copy(rd.buf, rd.buf[rd.r:rd.w])\r\n\r\n\tfor n > 0 {\r\n\t\tmx := n\r\n\t\tif mx >= len(rd.buf) {\r\n\t\t\tmx = len(rd.buf)\r\n\t\t}\r\n\t\tx, err := rd.src.Read(rd.buf[rd.w : rd.w+mx])\r\n\t\trd.w += x\r\n\t\trd.r += x\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tif rd.w == len(rd.buf) {\r\n\t\t\trd.r, rd.w = 0, 0\r\n\t\t}\r\n\r\n\t\tn -= x\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/nbt/qnbt/decode.go",
    "content": "// deprecated: :(\r\npackage qnbt\r\n\r\nimport (\r\n\t\"errors\"\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"sync\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/oq-x/unsafe2\"\r\n)\r\n\r\ntype MismatchError struct {\r\n\t// name of the field trying to decode\r\n\tname string\r\n\t// the type kind expected\r\n\texpectedKind string\r\n\t// the type kind got\r\n\tgotKind string\r\n\t// the tag got\r\n\ttag string\r\n}\r\n\r\nfunc (m MismatchError) Error() string {\r\n\treturn fmt.Sprintf(\"MismatchError: tag %s (expected %s), got %s (while decoding %s)\", m.tag, m.expectedKind, m.gotKind, m.name)\r\n}\r\n\r\nvar (\r\n\tErrExpectPointer = errors.New(\"expected a pointer for dst\")\r\n\tErrUnsupported   = errors.New(\"unsupported type\")\r\n\tErrUnknownTag    = errors.New(\"unknown tag\")\r\n)\r\n\r\nvar decoders = sync.Pool{\r\n\tNew: func() any {\r\n\t\treturn new(Decoder)\r\n\t},\r\n}\r\n\r\nvar readers = sync.Pool{\r\n\tNew: func() any {\r\n\t\tr := new(bufferedReader)\r\n\t\tr.buf = make([]byte, 1024)\r\n\t\treturn r\r\n\t},\r\n}\r\n\r\ntype Decoder struct {\r\n\t// if disallowUnknownKeys is enabled, the decoder will return an error if it reads a name not in the struct\r\n\tdisallowUnknownKeys bool\r\n\t// if networkNBT is enabled, the name for the root compound will not be read\r\n\tnetworkNBT bool\r\n\r\n\trd *bufferedReader\r\n}\r\n\r\n// Close closes the decoder for further use and puts it back in the decoder pool\r\nfunc (d *Decoder) Close() {\r\n\treaders.Put(d.rd)\r\n\td.rd = nil\r\n\tdecoders.Put(d)\r\n}\r\n\r\nfunc NewDecoder(rd io.Reader) *Decoder {\r\n\tdc := decoders.Get().(*Decoder)\r\n\tdc.disallowUnknownKeys, dc.networkNBT = false, false\r\n\tdc.rd = &bufferedReader{\r\n\t\tsrc: rd,\r\n\t\tbuf: make([]byte, 1024),\r\n\t}\r\n\r\n\tdc.rd = readers.Get().(*bufferedReader)\r\n\tdc.rd.buf, dc.rd.src, dc.rd.r, dc.rd.w = slicesize(dc.rd.buf, 1024), rd, 0, 0\r\n\r\n\treturn dc\r\n}\r\n\r\nfunc slicesize(s []byte, l int) []byte {\r\n\tif l < len(s) {\r\n\t\treturn s[:l]\r\n\t} else {\r\n\t\treturn make([]byte, l)\r\n\t}\r\n}\r\n\r\nfunc (dc *Decoder) DisallowUnknownKeys(v bool) *Decoder {\r\n\tdc.disallowUnknownKeys = v\r\n\treturn dc\r\n}\r\n\r\nfunc (dc *Decoder) NetworkNBT(v bool) *Decoder {\r\n\tdc.networkNBT = v\r\n\treturn dc\r\n}\r\n\r\nfunc Unmarshal(data []byte, dst any) (rootName string, err error) {\r\n\tdc := decoders.Get().(*Decoder)\r\n\tdefer decoders.Put(dc)\r\n\r\n\tdc.disallowUnknownKeys, dc.networkNBT = false, false\r\n\r\n\tdc.rd = readers.Get().(*bufferedReader)\r\n\tdc.rd.buf, dc.rd.src, dc.rd.r, dc.rd.w = data, nil, 0, len(data)\r\n\r\n\treturn dc.DecodeAndClose(dst)\r\n}\r\n\r\n// DecodeAndClose decodes into dst and closes the decoder\r\nfunc (d *Decoder) DecodeAndClose(dst any) (rootName string, err error) {\r\n\tdefer d.Close()\r\n\treturn d.Decode(dst)\r\n}\r\n\r\nfunc (d *Decoder) Decode(dst any) (rootName string, err error) {\r\n\tid := unsafe2.InterfaceData(dst)\r\n\ttyp := (*unsafe2.Type)(unsafe.Pointer(id.Type))\r\n\r\n\tif kindOf(typ) != pointer_k {\r\n\t\treturn rootName, ErrExpectPointer\r\n\t}\r\n\r\n\ttyp, v := ptrelem(typ, id.Value)\r\n\r\n\trootTagS, err := d.rd.readBytesString(1)\r\n\tif err != nil {\r\n\t\treturn rootName, err\r\n\t}\r\n\r\n\tif !d.networkNBT {\r\n\t\tif err := d.readString(&rootName); err != nil {\r\n\t\t\treturn rootName, err\r\n\t\t}\r\n\t}\r\n\r\n\tswitch rootTagS {\r\n\tcase string_t_b:\r\n\t\tif k := kindOf(typ); k != string_k {\r\n\t\t\treturn rootName, MismatchError{\r\n\t\t\t\texpectedKind: \"string\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(rootTagS),\r\n\t\t\t\tname:         \"root\",\r\n\t\t\t}\r\n\t\t}\r\n\tcase compound_t_b:\r\n\t\tswitch k := kindOf(typ); k {\r\n\t\tcase struct_k:\r\n\t\t\ttyp := (*structType)(unsafe.Pointer(typ))\r\n\t\t\ts := newStruct(typ, v)\r\n\t\t\tdefer structs.Put(s)\r\n\r\n\t\t\tif err := d.decodeStructCompound(s); err != nil {\r\n\t\t\t\treturn rootName, err\r\n\t\t\t}\r\n\t\tdefault:\r\n\t\t\treturn rootName, MismatchError{\r\n\t\t\t\texpectedKind: \"struct\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(rootTagS),\r\n\t\t\t\tname:         \"root\",\r\n\t\t\t}\r\n\t\t}\r\n\tdefault:\r\n\t\treturn rootName, ErrUnsupported\r\n\t}\r\n\r\n\treturn rootName, nil\r\n}\r\n\r\nfunc (d *Decoder) discardCompound() error {\r\n\tfor {\r\n\t\ttag, err := d.readByte2()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tif tag == end_t {\r\n\t\t\treturn nil\r\n\t\t}\r\n\t\tif err := d.skipString(); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\ts, err := d.discard(tag)\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif !s {\r\n\t\t\tswitch tag {\r\n\t\t\tcase compound_t:\r\n\t\t\t\tif err := d.discardCompound(); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase list_t:\r\n\t\t\t\tif err := d.discardList(); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\treturn ErrUnknownTag\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunc (d *Decoder) discard(tag_b byte) (skipped bool, err error) {\r\n\tswitch tag_b {\r\n\tcase byte_t:\r\n\t\treturn true, d.rd.skip(1)\r\n\tcase short_t:\r\n\t\treturn true, d.rd.skip(2)\r\n\tcase int_t, float_t:\r\n\t\treturn true, d.rd.skip(4)\r\n\tcase long_t, double_t:\r\n\t\treturn true, d.rd.skip(8)\r\n\tcase byte_array_t:\r\n\t\tl, err := d.readInt()\r\n\t\tif err != nil {\r\n\t\t\treturn true, err\r\n\t\t}\r\n\t\treturn true, d.rd.skip(int(l))\r\n\tcase string_t:\r\n\t\tl, err := d.readShort()\r\n\t\tif err != nil {\r\n\t\t\treturn true, err\r\n\t\t}\r\n\t\treturn true, d.rd.skip(int(l))\r\n\tcase int_array_t:\r\n\t\tl, err := d.readInt()\r\n\t\tif err != nil {\r\n\t\t\treturn true, err\r\n\t\t}\r\n\t\treturn true, d.rd.skip(int(l) * 4)\r\n\tcase long_array_t:\r\n\t\tl, err := d.readInt()\r\n\t\tif err != nil {\r\n\t\t\treturn true, err\r\n\t\t}\r\n\t\treturn true, d.rd.skip(int(l) * 8)\r\n\tdefault:\r\n\t\treturn\r\n\t}\r\n}\r\n"
  },
  {
    "path": "protocol/nbt/qnbt/list.go",
    "content": "package qnbt\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"strconv\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/oq-x/unsafe2\"\r\n)\r\n\r\nfunc (d *Decoder) decodeListSlice(ptr unsafe.Pointer, t *ptrType) error {\r\n\ttag, err := d.readByte2()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tl, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif tag == end_t {\r\n\t\treturn nil\r\n\t}\r\n\r\n\tcap := *(*int)(unsafe.Add(ptr, ptrSize*2))\r\n\tarray := &array_t{\r\n\t\telem: t.elem,\r\n\t\tptr:  unsafe.Pointer(*(*uintptr)(ptr)),\r\n\t\tlen:  uintptr(cap),\r\n\t}\r\n\r\n\tif int(l) > cap {\r\n\t\tarray.ptr = mallocgc(uintptr(l)*array.elem.Size, nil, true)\r\n\t\tarray.len = uintptr(l)\r\n\t\tsetSliceArray(ptr, array.ptr, int(l))\r\n\t}\r\n\r\n\treturn d.readListArray(tag, l, array)\r\n}\r\n\r\ntype array_t struct {\r\n\telem *unsafe2.Type\r\n\tptr  unsafe.Pointer\r\n\tlen  uintptr\r\n}\r\n\r\nfunc (a *array_t) index(i int) unsafe.Pointer {\r\n\treturn unsafe.Add(a.ptr, a.elem.Size*uintptr(i))\r\n}\r\n\r\nfunc (d *Decoder) decodeListArray(a *array_t) error {\r\n\ttag, err := d.readByte2()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tl, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif tag == end_t {\r\n\t\treturn nil\r\n\t}\r\n\r\n\tif uintptr(l) < a.len {\r\n\t\treturn fmt.Errorf(\"array too small\")\r\n\t}\r\n\r\n\treturn d.readListArray(tag, l, a)\r\n}\r\n\r\nfunc (d *Decoder) readListArray(tag byte, l int32, a *array_t) error {\r\n\tkind := kindOf(a.elem)\r\n\r\n\tfor i := 0; i < int(l); i++ {\r\n\t\tiptr := a.index(i)\r\n\r\n\t\t//if err := match(\"\", tag, a.elem); err != nil {\r\n\t\t//\treturn err\r\n\t\t//}\r\n\r\n\t\tswitch tag {\r\n\t\tcase byte_t:\r\n\t\t\tif err := d.readBytePtr(iptr); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase short_t:\r\n\t\t\tif err := d.readShortPtr(iptr); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase int_t, float_t:\r\n\t\t\tif err := d.readIntPtr(iptr); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase long_t, double_t:\r\n\t\t\tif err := d.readLongPtr(iptr); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase byte_array_t:\r\n\t\t\tswitch kind {\r\n\t\t\tcase array_k:\r\n\t\t\t\tif err := d.readByteArray(iptr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase slice_k:\r\n\t\t\t\tl, err := d.readInt()\r\n\t\t\t\tif err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\r\n\t\t\t\tptr := mallocgc(uintptr(l), nil, true)\r\n\t\t\t\tif err := d.decodeByteArray(int(l), ptr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tsetSliceArray(iptr, ptr, int(l))\r\n\t\t\t}\r\n\t\tcase string_t:\r\n\t\t\tif err := d.readStringPtr(iptr); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase long_array_t:\r\n\t\t\tswitch kind {\r\n\t\t\tcase array_k:\r\n\t\t\t\tif err := d.readLongArray(iptr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase slice_k:\r\n\t\t\t\tl, err := d.readInt()\r\n\t\t\t\tif err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\r\n\t\t\t\tptr := mallocgc(uintptr(l)*8, nil, true)\r\n\t\t\t\tif err := d.decodeLongArray(int(l), ptr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tsetSliceArray(iptr, ptr, int(l))\r\n\t\t\t}\r\n\t\tcase int_array_t:\r\n\t\t\tswitch kind {\r\n\t\t\tcase array_k:\r\n\t\t\t\tif err := d.readIntArray(iptr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase slice_k:\r\n\t\t\t\tl, err := d.readInt()\r\n\t\t\t\tif err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\r\n\t\t\t\tptr := mallocgc(uintptr(l)*4, nil, true)\r\n\t\t\t\tif err := d.decodeIntArray(int(l), ptr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tsetSliceArray(iptr, ptr, int(l))\r\n\t\t\t}\r\n\t\tcase compound_t:\r\n\t\t\tswitch kind {\r\n\t\t\tcase struct_k:\r\n\t\t\t\ts := newStruct((*structType)(unsafe.Pointer(a.elem)), iptr)\r\n\t\t\t\tif err := d.decodeStructCompound(s); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tstructs.Put(s)\r\n\t\t\tcase map_k:\r\n\t\t\t\tt := (*mapType)(unsafe.Pointer(a.elem))\r\n\t\t\t\tif kK, kE := kindOf(t.key), kindOf(t.elem); kK != string_k || kE != string_k {\r\n\t\t\t\t\treturn MismatchError{\r\n\t\t\t\t\t\tname:         strconv.Itoa(i),\r\n\t\t\t\t\t\texpectedKind: \"struct/map[string]string\",\r\n\t\t\t\t\t\tgotKind:      fmt.Sprintf(\"map[%s]%s\", kind_name(kK), kind_name(kE)),\r\n\t\t\t\t\t\t//tag:          tagName(tag),\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tm := *(*map[string]string)(iptr)\r\n\r\n\t\t\t\tif m == nil {\r\n\t\t\t\t\tm = make(map[string]string)\r\n\t\t\t\t\t*(*map[string]string)(iptr) = m\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif err := d.decodeMapString(m); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase list_t:\r\n\t\t\tswitch kind {\r\n\t\t\tcase array_k:\r\n\t\t\t\tarr := (*arrayType)(unsafe.Pointer(a.elem))\r\n\t\t\t\tif err := d.decodeListArray(&array_t{arr.elem, iptr, arr.len}); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase slice_k:\r\n\t\t\t\tif err := d.decodeListSlice(iptr, (*ptrType)(unsafe.Pointer(a.elem))); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tdefault:\r\n\t\t\treturn ErrUnknownTag\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) discardList() error {\r\n\ttag, err := d.readByte2()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tlen, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tf := fixedSize(tag)\r\n\tif f == 0 {\r\n\t\treturn nil\r\n\t}\r\n\tif f != -1 {\r\n\t\treturn d.rd.skip(f * int(len))\r\n\t}\r\n\r\n\tfor i := int32(0); i < len; i++ {\r\n\t\ts, err := d.discard(tag)\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif !s {\r\n\t\t\tswitch tag {\r\n\t\t\tcase compound_t:\r\n\t\t\t\tif err := d.discardCompound(); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase list_t:\r\n\t\t\t\tif err := d.discardList(); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\treturn ErrUnknownTag\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc fixedSize(tag byte) int {\r\n\tswitch tag {\r\n\tcase end_t:\r\n\t\treturn 0\r\n\tcase byte_t:\r\n\t\treturn 1\r\n\tcase short_t:\r\n\t\treturn 2\r\n\tcase int_t, float_t:\r\n\t\treturn 4\r\n\tcase long_t, double_t:\r\n\t\treturn 8\r\n\tdefault:\r\n\t\treturn -1\r\n\t}\r\n}\r\n"
  },
  {
    "path": "protocol/nbt/qnbt/malloc.go",
    "content": "package qnbt\r\n\r\nimport (\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/oq-x/unsafe2\"\r\n)\r\n\r\n//go:linkname mallocgc runtime.mallocgc\r\nfunc mallocgc(size uintptr, typ *unsafe2.Type, needzero bool) unsafe.Pointer\r\n"
  },
  {
    "path": "protocol/nbt/qnbt/map.go",
    "content": "package qnbt\r\n\r\nimport \"fmt\"\r\n\r\nfunc (d *Decoder) decodeMapString(m map[string]string) error {\r\n\tvar name string\r\n\tfor {\r\n\t\ttag, err := d.rd.readBytesString(1)\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tif tag == end_t_b {\r\n\t\t\treturn nil\r\n\t\t}\r\n\t\tif err := d.readStringNonCopy(&name); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tif tag != string_t_b {\r\n\t\t\treturn fmt.Errorf(\"expected string tag, got %s\", tagName(tag))\r\n\t\t}\r\n\r\n\t\tvar v string\r\n\t\tif err := d.readString(&v); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tm[name] = v\r\n\t}\r\n}\r\n"
  },
  {
    "path": "protocol/nbt/qnbt/primitive.go",
    "content": "package qnbt\r\n\r\nimport (\r\n\t\"encoding/binary\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/nbt/qnbt/native\"\r\n)\r\n\r\nconst (\r\n\tend_t = iota\r\n\tbyte_t\r\n\tshort_t\r\n\tint_t\r\n\tlong_t\r\n\tfloat_t\r\n\tdouble_t\r\n\tbyte_array_t\r\n\tstring_t\r\n\tlist_t\r\n\tcompound_t\r\n\tint_array_t\r\n\tlong_array_t\r\n)\r\n\r\n// a little trick to avoid allocations\r\nvar (\r\n\tend_t_b        = string([]byte{end_t})\r\n\tbyte_t_b       = string([]byte{byte_t})\r\n\tshort_t_b      = string([]byte{short_t})\r\n\tint_t_b        = string([]byte{int_t})\r\n\tlong_t_b       = string([]byte{long_t})\r\n\tfloat_t_b      = string([]byte{float_t})\r\n\tdouble_t_b     = string([]byte{double_t})\r\n\tbyte_array_t_b = string([]byte{byte_array_t})\r\n\tstring_t_b     = string([]byte{string_t})\r\n\tlist_t_b       = string([]byte{list_t})\r\n\tcompound_t_b   = string([]byte{compound_t})\r\n\tint_array_t_b  = string([]byte{int_array_t})\r\n\tlong_array_t_b = string([]byte{long_array_t})\r\n)\r\n\r\nfunc tagName(t string) string {\r\n\tswitch t {\r\n\tcase end_t_b:\r\n\t\treturn \"TAG_End\"\r\n\tcase byte_t_b:\r\n\t\treturn \"TAG_Byte\"\r\n\tcase short_t_b:\r\n\t\treturn \"TAG_Short\"\r\n\tcase int_t_b:\r\n\t\treturn \"TAG_Int\"\r\n\tcase long_t_b:\r\n\t\treturn \"TAG_Long\"\r\n\tcase float_t_b:\r\n\t\treturn \"TAG_Float\"\r\n\tcase double_t_b:\r\n\t\treturn \"TAG_Double\"\r\n\tcase byte_array_t_b:\r\n\t\treturn \"TAG_Byte_Array\"\r\n\tcase string_t_b:\r\n\t\treturn \"TAG_String\"\r\n\tcase list_t_b:\r\n\t\treturn \"TAG_List\"\r\n\tcase compound_t_b:\r\n\t\treturn \"TAG_Compound\"\r\n\tcase int_array_t_b:\r\n\t\treturn \"TAG_Int_Array\"\r\n\tcase long_array_t_b:\r\n\t\treturn \"TAG_Long_Array\"\r\n\tdefault:\r\n\t\treturn \"Unknown\"\r\n\t}\r\n}\r\n\r\nfunc (d *Decoder) load(length int) []byte {\r\n\tb := d.rd.buf[d.rd.r : d.rd.r+length]\r\n\td.rd.r += length\r\n\r\n\treturn b\r\n}\r\n\r\nfunc (d *Decoder) readByte(b *byte) error {\r\n\tif err := d.rd.fill(1); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\t*b = d.rd.buf[d.rd.r]\r\n\td.rd.r++\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) readByte2() (byte, error) {\r\n\tif err := d.rd.fill(1); err != nil {\r\n\t\treturn 0, err\r\n\t}\r\n\r\n\tb := d.rd.buf[d.rd.r]\r\n\td.rd.r++\r\n\r\n\treturn b, nil\r\n}\r\nfunc (d *Decoder) readBytePtr(ptr unsafe.Pointer) error {\r\n\treturn d.readByte((*byte)(ptr))\r\n}\r\n\r\nfunc (d *Decoder) readShort() (int16, error) {\r\n\tif err := d.rd.fill(2); err != nil {\r\n\t\treturn 0, err\r\n\t}\r\n\r\n\treturn int16(binary.BigEndian.Uint16(d.load(2))), nil\r\n}\r\n\r\nfunc (d *Decoder) readShortPtr(ptr unsafe.Pointer) error {\r\n\tif err := d.rd.fill(2); err != nil {\r\n\t\treturn err\r\n\t}\r\n\ts := unsafe.Slice((*byte)(ptr), 2)\r\n\r\n\tcopy(s, d.load(2))\r\n\r\n\tif !native.SystemBigEndian {\r\n\t\tnative.Convert16(s)\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) readInt() (int32, error) {\r\n\tif err := d.rd.fill(4); err != nil {\r\n\t\treturn 0, err\r\n\t}\r\n\r\n\treturn int32(binary.BigEndian.Uint32(d.load(4))), nil\r\n}\r\n\r\nfunc (d *Decoder) readIntPtr(ptr unsafe.Pointer) error {\r\n\tif err := d.rd.fill(4); err != nil {\r\n\t\treturn err\r\n\t}\r\n\ts := unsafe.Slice((*byte)(ptr), 4)\r\n\r\n\tcopy(s, d.load(4))\r\n\r\n\tif !native.SystemBigEndian {\r\n\t\tnative.Convert32(s)\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) readLongPtr(ptr unsafe.Pointer) error {\r\n\tif err := d.rd.fill(8); err != nil {\r\n\t\treturn err\r\n\t}\r\n\ts := unsafe.Slice((*byte)(ptr), 8)\r\n\r\n\tcopy(s, d.load(8))\r\n\r\n\tif !native.SystemBigEndian {\r\n\t\tnative.Convert64(s)\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) skipString() error {\r\n\tl, err := d.readShort()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn d.rd.skip(int(l))\r\n}\r\n\r\nfunc (d *Decoder) readString(dst *string) error {\r\n\tl, err := d.readShort()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := d.rd.fill(int(l)); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\t*dst = string(d.load(int(l)))\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) readStringNonCopy(dst *string) error {\r\n\tl, err := d.readShort()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := d.rd.fill(int(l)); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tbuf := d.rd.buf[d.rd.r : d.rd.r+int(l)]\r\n\td.rd.r += int(l)\r\n\r\n\t*dst = unsafe.String(unsafe.SliceData(buf), len(buf))\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) readStringPtr(dst unsafe.Pointer) error {\r\n\treturn d.readString((*string)(dst))\r\n}\r\n\r\nfunc (d *Decoder) readLongArray(ptr unsafe.Pointer) error {\r\n\tl, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\treturn d.decodeLongArray(int(l), ptr)\r\n}\r\n\r\nfunc (d *Decoder) decodeLongArray(len int, ptr unsafe.Pointer) error {\r\n\tfor i := 0; i < len; i++ {\r\n\t\tif err := d.readLongPtr(ptr); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tptr = unsafe.Add(ptr, 8)\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) readIntArray(ptr unsafe.Pointer) error {\r\n\tl, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\treturn d.decodeIntArray(int(l), ptr)\r\n}\r\n\r\nfunc (d *Decoder) decodeIntArray(len int, ptr unsafe.Pointer) error {\r\n\tfor i := 0; i < len; i++ {\r\n\t\tif err := d.readIntPtr(ptr); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tptr = unsafe.Add(ptr, 4)\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (d *Decoder) readByteArray(ptr unsafe.Pointer) error {\r\n\tl, err := d.readInt()\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\treturn d.decodeByteArray(int(l), ptr)\r\n}\r\n\r\n/*func (d *Decoder) decodeByteArray(len int, ptr unsafe.Pointer) error {\r\n\tdata, err := d.rd.readBytes(len)\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\tcopy(unsafe.Slice((*byte)(ptr), len), data)\r\n\r\n\treturn nil\r\n}\r\n*/\r\n\r\nfunc (d *Decoder) decodeByteArray(l int, ptr unsafe.Pointer) error {\r\n\tfor l > 0 {\r\n\t\tlr := min(len(d.rd.buf), l)\r\n\t\tdata, err := d.rd.readBytes(lr)\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tcopy(unsafe.Slice((*byte)(ptr), l), data)\r\n\t\tl -= lr\r\n\t\tptr = unsafe.Add(ptr, lr)\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/nbt/qnbt/qnbt.go",
    "content": "// qNBT is a very efficient NBT decoder!\r\n// Caveats: does not work with []any, map[string]any or maps in general (except for map[string]string)\r\n// Specification:\r\n// Uses very lite, custom reflection (mostly unsafe)\r\n\r\npackage qnbt\r\n"
  },
  {
    "path": "protocol/nbt/qnbt/struct.go",
    "content": "package qnbt\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"strings\"\r\n\t\"sync\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/oq-x/unsafe2\"\r\n)\r\n\r\nvar structs = sync.Pool{\r\n\tNew: func() any {\r\n\t\treturn &struct_t{\r\n\t\t\tnames: make(map[string]int),\r\n\t\t}\r\n\t}}\r\n\r\nfunc newStruct(t *structType, ptr unsafe.Pointer) *struct_t {\r\n\ts := structs.Get().(*struct_t)\r\n\tclear(s.names)\r\n\r\n\ts.t = t\r\n\ts.ptr = ptr\r\n\r\n\tfor i, f := range t.fields {\r\n\t\tif !f.name.exported() {\r\n\t\t\tcontinue\r\n\t\t}\r\n\t\tname := f.name.name()\r\n\r\n\t\tif nbtname, ok := findNBTTag(f.name.tag()); ok {\r\n\t\t\tname = nbtname\r\n\t\t\tif name == \"-\" {\r\n\t\t\t\tcontinue\r\n\t\t\t}\r\n\t\t\tif i := strings.Index(name, \",omitempty\"); i != -1 {\r\n\t\t\t\tname = name[:i]\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ts.names[name] = i\r\n\t}\r\n\r\n\treturn s\r\n}\r\n\r\nfunc findNBTTag(tag string) (string, bool) {\r\n\ti := strings.Index(tag, `nbt:\"`)\r\n\tif i == -1 {\r\n\t\treturn \"\", false\r\n\t}\r\n\ttag = tag[i+5:]\r\n\ti = strings.Index(tag, `\"`)\r\n\tif i == -1 {\r\n\t\treturn \"\", false\r\n\t}\r\n\r\n\treturn tag[:i], true\r\n}\r\n\r\ntype struct_t struct {\r\n\tt *structType\r\n\r\n\tnames map[string]int\r\n\tptr   unsafe.Pointer\r\n}\r\n\r\nfunc (s *struct_t) field(n string) (f *structField, ptr unsafe.Pointer, ok bool) {\r\n\ti, ok := s.names[n]\r\n\r\n\tif !ok {\r\n\t\treturn nil, nil, ok\r\n\t}\r\n\r\n\tft := s.t.fields[i]\r\n\r\n\treturn &ft, unsafe.Add(s.ptr, ft.off), ok\r\n}\r\n\r\nfunc (d *Decoder) decodeStructCompound(s *struct_t) error {\r\n\tvar name string\r\n\tfor {\r\n\t\ttag, err := d.readByte2()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tif tag == end_t {\r\n\t\t\treturn nil\r\n\t\t}\r\n\t\tif err := d.readStringNonCopy(&name); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tfield, fieldPtr, ok := s.field(name)\r\n\r\n\t\tif ok {\r\n\t\t\t//if err := match(name, tag, field.typ); err != nil {\r\n\t\t\t//\treturn err\r\n\t\t\t//}\r\n\r\n\t\t\tswitch tag {\r\n\t\t\tcase byte_t:\r\n\t\t\t\tif err := d.readBytePtr(fieldPtr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase string_t:\r\n\t\t\t\tif err := d.readStringPtr(fieldPtr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase short_t:\r\n\t\t\t\tif err := d.readShortPtr(fieldPtr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase int_t, float_t:\r\n\t\t\t\tif err := d.readIntPtr(fieldPtr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase long_t, double_t:\r\n\t\t\t\tif err := d.readLongPtr(fieldPtr); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase byte_array_t:\r\n\t\t\t\tswitch kindOf(field.typ) {\r\n\t\t\t\tcase array_k:\r\n\t\t\t\t\tif err := d.readByteArray(fieldPtr); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\tcase slice_k:\r\n\t\t\t\t\tl, err := d.readInt()\r\n\t\t\t\t\tif err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tptr := mallocgc(uintptr(l), nil, true)\r\n\t\t\t\t\tif err := d.decodeByteArray(int(l), ptr); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetSliceArray(fieldPtr, ptr, int(l))\r\n\t\t\t\t}\r\n\t\t\tcase long_array_t:\r\n\t\t\t\tswitch kindOf(field.typ) {\r\n\t\t\t\tcase array_k:\r\n\t\t\t\t\tif err := d.readLongArray(fieldPtr); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\tcase slice_k:\r\n\t\t\t\t\tl, err := d.readInt()\r\n\t\t\t\t\tif err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tptr := mallocgc(uintptr(l)*8, nil, true)\r\n\t\t\t\t\tif err := d.decodeLongArray(int(l), ptr); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetSliceArray(fieldPtr, ptr, int(l))\r\n\t\t\t\t}\r\n\t\t\tcase int_array_t:\r\n\t\t\t\tswitch kindOf(field.typ) {\r\n\t\t\t\tcase array_k:\r\n\t\t\t\t\tif err := d.readIntArray(fieldPtr); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\tcase slice_k:\r\n\t\t\t\t\tl, err := d.readInt()\r\n\t\t\t\t\tif err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tptr := mallocgc(uintptr(l)*4, nil, true)\r\n\t\t\t\t\tif err := d.decodeIntArray(int(l), ptr); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetSliceArray(fieldPtr, ptr, int(l))\r\n\t\t\t\t}\r\n\t\t\tcase compound_t:\r\n\t\t\t\tswitch kindOf(field.typ) {\r\n\t\t\t\tcase struct_k:\r\n\t\t\t\t\ts := newStruct((*structType)(unsafe.Pointer(field.typ)), fieldPtr)\r\n\t\t\t\t\tif err := d.decodeStructCompound(s); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstructs.Put(s)\r\n\t\t\t\tcase map_k:\r\n\t\t\t\t\tt := (*mapType)(unsafe.Pointer(field.typ))\r\n\t\t\t\t\tif kK, kE := kindOf(t.key), kindOf(t.elem); kK != string_k || kE != string_k {\r\n\t\t\t\t\t\treturn MismatchError{\r\n\t\t\t\t\t\t\tname:         name,\r\n\t\t\t\t\t\t\texpectedKind: \"struct/map[string]string\",\r\n\t\t\t\t\t\t\tgotKind:      fmt.Sprintf(\"map[%s]%s\", kind_name(kK), kind_name(kE)),\r\n\t\t\t\t\t\t\ttag:          tagName(string([]byte{tag})),\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tm := *(*map[string]string)(fieldPtr)\r\n\r\n\t\t\t\t\tif m == nil {\r\n\t\t\t\t\t\tm = make(map[string]string)\r\n\t\t\t\t\t\t*(*map[string]string)(fieldPtr) = m\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif err := d.decodeMapString(m); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tcase list_t:\r\n\t\t\t\tswitch kindOf(field.typ) {\r\n\t\t\t\tcase array_k:\r\n\t\t\t\t\tt := (*arrayType)(unsafe.Pointer(field.typ))\r\n\t\t\t\t\tif err := d.decodeListArray(&array_t{t.elem, fieldPtr, t.len}); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\tcase slice_k:\r\n\t\t\t\t\tif err := d.decodeListSlice(fieldPtr, (*ptrType)(unsafe.Pointer(field.typ))); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\treturn ErrUnknownTag\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\ts, err := d.discard(tag)\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif !s {\r\n\t\t\t\tswitch tag {\r\n\t\t\t\tcase compound_t:\r\n\t\t\t\t\tif err := d.discardCompound(); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\tcase list_t:\r\n\t\t\t\t\tif err := d.discardList(); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\tdefault:\r\n\t\t\t\t\treturn ErrUnknownTag\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t//fmt.Println(tag, name)\r\n\t}\r\n}\r\n\r\nfunc match(name, tag_b string, t *unsafe2.Type) error {\r\n\tk := kindOf(t)\r\n\tswitch tag_b {\r\n\tcase byte_t_b:\r\n\t\tif k != uint8_k && k != int8_k && k != bool_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"uint8/int8/bool\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase short_t_b:\r\n\t\tif k != int16_k && k != uint16_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"int16/uint16\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase int_t_b:\r\n\t\tif k != int32_k && k != uint32_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"int32/uint32\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase long_t_b:\r\n\t\tif k != int64_k && k != uint64_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"int64/uint64\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase float_t_b:\r\n\t\tif k != float32_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"float32\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase double_t_b:\r\n\t\tif k != float64_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"float64\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase byte_array_t_b:\r\n\t\tif k != slice_k && k != array_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"[]uint8/[]int8\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\t\tbase := (*ptrType)(unsafe.Pointer(t))\r\n\r\n\t\telemKind := kindOf(base.elem)\r\n\r\n\t\tif elemKind != int8_k && elemKind != uint8_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"[]uint8/[]int8\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase string_t_b:\r\n\t\tif k != string_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"string\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase list_t_b:\r\n\t\tif k != slice_k && k != array_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"slice/array\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase compound_t_b:\r\n\t\tif k != struct_k && k != map_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"struct/map[string]string\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase int_array_t_b:\r\n\t\tif k != slice_k && k != array_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"[]uint32/[]int32\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\t\tbase := (*ptrType)(unsafe.Pointer(t))\r\n\r\n\t\telemKind := kindOf(base.elem)\r\n\r\n\t\tif elemKind != int32_k && elemKind != uint32_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"[]uint32/[]int32\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\tcase long_array_t_b:\r\n\t\tif k != slice_k && k != array_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"[]uint64/[]int64\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\t\tbase := (*ptrType)(unsafe.Pointer(t))\r\n\r\n\t\telemKind := kindOf(base.elem)\r\n\r\n\t\tif elemKind != int64_k && elemKind != uint64_k {\r\n\t\t\treturn MismatchError{\r\n\t\t\t\tname:         name,\r\n\t\t\t\texpectedKind: \"[]uint64/[]int64\",\r\n\t\t\t\tgotKind:      kind_name(k),\r\n\t\t\t\ttag:          tagName(tag_b),\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/nbt/staticReader.go",
    "content": "package nbt\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"unsafe\"\r\n)\r\n\r\n/*\r\nReader is an NBT decoder that uses no reflection. it should be used for static structures.\r\n\r\nThe read functions read the type id, name and value\r\n*/\r\ntype StaticReader struct {\r\n\tr io.Reader\r\n}\r\n\r\nfunc NewStaticReader(r io.Reader) StaticReader {\r\n\treturn StaticReader{r}\r\n}\r\n\r\n// reads a byte\r\nfunc (r StaticReader) readByte() (byte, error) {\r\n\tvar data [1]byte\r\n\t_, err := r.r.Read(data[:])\r\n\r\n\treturn data[0], err\r\n}\r\n\r\n// reads a short, big endian\r\nfunc (r StaticReader) readShort() (int16, error) {\r\n\tvar data [2]byte\r\n\t_, err := r.r.Read(data[:])\r\n\r\n\treturn int16(data[0])<<8 | int16(data[1]), err\r\n}\r\n\r\n// reads an int, big endian\r\nfunc (r StaticReader) readInt() (int32, error) {\r\n\tvar data [4]byte\r\n\t_, err := r.r.Read(data[:])\r\n\r\n\treturn int32(data[0])<<24 | int32(data[1])<<16 | int32(data[2])<<8 | int32(data[3]), err\r\n}\r\n\r\n// reads a long, big endian\r\nfunc (r StaticReader) readLong() (int64, error) {\r\n\tvar data [8]byte\r\n\t_, err := r.r.Read(data[:])\r\n\r\n\treturn int64(data[0])<<56 | int64(data[1])<<48 | int64(data[2])<<40 | int64(data[3])<<32 | int64(data[4])<<24 | int64(data[5])<<16 | int64(data[6])<<8 | int64(data[7]), err\r\n}\r\n\r\n// reads a string prefixed by a short of its length\r\nfunc (r StaticReader) readString() (string, error) {\r\n\tlength, err := r.readShort()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\tif length < 0 {\r\n\t\treturn \"\", fmt.Errorf(\"negative length for make (read string)\")\r\n\t}\r\n\tvar data = make([]byte, length)\r\n\r\n\tif _, err := r.r.Read(data); err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\r\n\treturn unsafe.String(unsafe.SliceData(data), len(data)), nil //*(*string)(unsafe.Pointer(&data)), nil\r\n}\r\n\r\nfunc (r StaticReader) ReadRoot(withName bool) (typeId byte, name string, err error) {\r\n\ttypeId, err = r.readByte()\r\n\tif err != nil {\r\n\t\treturn typeId, \"\", err\r\n\t}\r\n\tif withName {\r\n\t\tname, err = r.readString()\r\n\t}\r\n\r\n\treturn\r\n}\r\n\r\nfunc (r StaticReader) Byte(dst *byte) (string, error) {\r\n\ttypeId, err := r.readByte()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\tif typeId != Byte {\r\n\t\treturn \"\", fmt.Errorf(\"tried reading TAG_Byte, got %d\", typeId)\r\n\t}\r\n\r\n\tname, err := r.readString()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\r\n\t*dst, err = r.readByte()\r\n\treturn name, err\r\n}\r\n\r\nfunc (r StaticReader) Short(dst *int16) (string, error) {\r\n\ttypeId, err := r.readByte()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\tif typeId != Short {\r\n\t\treturn \"\", fmt.Errorf(\"tried reading TAG_Short, got %d\", typeId)\r\n\t}\r\n\r\n\tname, err := r.readString()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\r\n\t*dst, err = r.readShort()\r\n\treturn name, err\r\n}\r\n\r\nfunc (r StaticReader) Int(dst *int32) (string, error) {\r\n\ttypeId, err := r.readByte()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\tif typeId != Int {\r\n\t\treturn \"\", fmt.Errorf(\"tried reading TAG_Int, got %d\", typeId)\r\n\t}\r\n\r\n\tname, err := r.readString()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\r\n\t*dst, err = r.readInt()\r\n\treturn name, err\r\n}\r\n\r\nfunc (r StaticReader) Long(dst *int64) (string, error) {\r\n\ttypeId, err := r.readByte()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\tif typeId != Long {\r\n\t\treturn \"\", fmt.Errorf(\"tried reading TAG_Long, got %d\", typeId)\r\n\t}\r\n\r\n\tname, err := r.readString()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\r\n\t*dst, err = r.readLong()\r\n\treturn name, err\r\n}\r\n\r\nfunc (r StaticReader) String(dst *string) (string, error) {\r\n\ttypeId, err := r.readByte()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\tif typeId != String {\r\n\t\treturn \"\", fmt.Errorf(\"tried reading TAG_String, got %d\", typeId)\r\n\t}\r\n\r\n\tname, err := r.readString()\r\n\tif err != nil {\r\n\t\treturn \"\", err\r\n\t}\r\n\r\n\t*dst, err = r.readString()\r\n\treturn name, err\r\n}\r\n\r\nfunc (r StaticReader) Compound(dst *CompoundReader) (string, error, bool) {\r\n\ttypeId, err := r.readByte()\r\n\tif err != nil {\r\n\t\treturn \"\", err, false\r\n\t}\r\n\tif typeId == End {\r\n\t\treturn \"\", nil, true\r\n\t}\r\n\tif typeId != Compound {\r\n\t\treturn \"\", fmt.Errorf(\"tried reading TAG_Compound, got %d\", typeId), false\r\n\t}\r\n\r\n\tname, err := r.readString()\r\n\tif err != nil {\r\n\t\treturn \"\", err, false\r\n\t}\r\n\r\n\t*dst = CompoundReader{r}\r\n\treturn name, err, false\r\n}\r\n\r\ntype CompoundReader struct {\r\n\tr StaticReader\r\n}\r\n\r\n// super convenient\r\nfunc (cr CompoundReader) ReadStringMap(tgt map[string]string) error {\r\n\tfor {\r\n\t\ttypeId, err := cr.r.readByte()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif typeId == End {\r\n\t\t\treturn nil\r\n\t\t}\r\n\t\tname, err := cr.r.readString()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tswitch typeId {\r\n\t\tcase String:\r\n\t\t\tstr, err := cr.r.readString()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\ttgt[name] = str\r\n\t\tdefault:\r\n\t\t\treturn fmt.Errorf(\"unsupported tag %d for string map\", typeId)\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunc (cr CompoundReader) ReadAll(targets ...any) error {\r\n\tfor i := 0; i < len(targets)+1; i++ { //+1 to read end\r\n\t\ttypeId, err := cr.r.readByte()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif typeId == End {\r\n\t\t\treturn nil\r\n\t\t}\r\n\t\t_, err = cr.r.readString()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tswitch typeId {\r\n\t\tcase Byte:\r\n\t\t\tdst, ok := targets[i].(*byte)\r\n\t\t\tif !ok {\r\n\t\t\t\treturn fmt.Errorf(\"mismatched type Byte and %T\", targets[i])\r\n\t\t\t}\r\n\t\t\t*dst, err = cr.r.readByte()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Short:\r\n\t\t\tdst, ok := targets[i].(*int16)\r\n\t\t\tif !ok {\r\n\t\t\t\treturn fmt.Errorf(\"mismatched type Short and %T\", targets[i])\r\n\t\t\t}\r\n\t\t\t*dst, err = cr.r.readShort()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Int:\r\n\t\t\tdst, ok := targets[i].(*int32)\r\n\t\t\tif !ok {\r\n\t\t\t\treturn fmt.Errorf(\"mismatched type Int and %T\", targets[i])\r\n\t\t\t}\r\n\t\t\t*dst, err = cr.r.readInt()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Long:\r\n\t\t\tdst, ok := targets[i].(*int64)\r\n\t\t\tif !ok {\r\n\t\t\t\treturn fmt.Errorf(\"mismatched type Long and %T\", targets[i])\r\n\t\t\t}\r\n\t\t\t*dst, err = cr.r.readLong()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase String:\r\n\t\t\tdst, ok := targets[i].(*string)\r\n\t\t\tif !ok {\r\n\t\t\t\treturn fmt.Errorf(\"mismatched type String and %T\", targets[i])\r\n\t\t\t}\r\n\t\t\t*dst, err = cr.r.readString()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase Compound:\r\n\t\t\tswitch dst := targets[i].(type) {\r\n\t\t\tcase []any:\r\n\t\t\t\tCompoundReader{r: cr.r}.ReadAll(dst)\r\n\t\t\tcase map[string]string:\r\n\t\t\t\tCompoundReader{r: cr.r}.ReadStringMap(dst)\r\n\t\t\tdefault:\r\n\t\t\t\treturn fmt.Errorf(\"mismatched type Compound and %T\", targets[i])\r\n\t\t\t}\r\n\t\tcase List:\r\n\t\t\tdst, ok := targets[i].(func(len int32, rd ListReader))\r\n\t\t\tif !ok {\r\n\t\t\t\treturn fmt.Errorf(\"mismatched type List and %T\", targets[i])\r\n\t\t\t}\r\n\t\t\ttypeId, err := cr.r.readByte()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tlen, err := cr.r.readInt()\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tdst(len, ListReader{typeId: typeId, r: cr.r})\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\ntype ListReader struct {\r\n\ttypeId byte\r\n\tr      StaticReader\r\n}\r\n\r\nfunc (lr ListReader) Read(tgt any) (err error) {\r\n\tswitch lr.typeId {\r\n\tcase Byte:\r\n\t\tdst, ok := tgt.(*byte)\r\n\t\tif !ok {\r\n\t\t\treturn fmt.Errorf(\"mismatched type Byte and %T\", tgt)\r\n\t\t}\r\n\t\t*dst, err = lr.r.readByte()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\tcase Short:\r\n\t\tdst, ok := tgt.(*int16)\r\n\t\tif !ok {\r\n\t\t\treturn fmt.Errorf(\"mismatched type Short and %T\", tgt)\r\n\t\t}\r\n\t\t*dst, err = lr.r.readShort()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\tcase Int:\r\n\t\tdst, ok := tgt.(*int32)\r\n\t\tif !ok {\r\n\t\t\treturn fmt.Errorf(\"mismatched type Int and %T\", tgt)\r\n\t\t}\r\n\t\t*dst, err = lr.r.readInt()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\tcase Long:\r\n\t\tdst, ok := tgt.(*int64)\r\n\t\tif !ok {\r\n\t\t\treturn fmt.Errorf(\"mismatched type Long and %T\", tgt)\r\n\t\t}\r\n\t\t*dst, err = lr.r.readLong()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\tcase String:\r\n\t\tdst, ok := tgt.(*string)\r\n\t\tif !ok {\r\n\t\t\treturn fmt.Errorf(\"mismatched type String and %T\", tgt)\r\n\t\t}\r\n\t\t*dst, err = lr.r.readString()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\tcase Compound:\r\n\t\tdst, ok := tgt.([]any)\r\n\t\tif !ok {\r\n\t\t\treturn fmt.Errorf(\"mismatched type Compound and %T\", lr)\r\n\t\t}\r\n\t\tCompoundReader{r: lr.r}.ReadAll(dst...)\r\n\tcase List:\r\n\t\tdst, ok := tgt.(func(ListReader))\r\n\t\tif !ok {\r\n\t\t\treturn fmt.Errorf(\"mismatched type List and %T\", tgt)\r\n\t\t}\r\n\t\ttypeId, err := lr.r.readByte()\r\n\t\tif err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tdst(ListReader{typeId: typeId, r: lr.r})\r\n\t}\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/authentication.go",
    "content": "package net\n\nimport (\n\t\"crypto/sha1\"\n\t\"crypto/x509\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/login\"\n)\n\nfunc authurl(u, h string) string {\n\treturn \"https://sessionserver.mojang.com/session/minecraft/hasJoined?username=\" + u + \"&serverId=\" + h\n}\n\nfunc (conn *Conn) authenticate() error {\n\tkey, err := x509.MarshalPKIXPublicKey(&conn.listener.privKey.PublicKey)\n\tif err != nil {\n\t\treturn err\n\t}\n\thash := conn.sessionHash(key)\n\tres, err := http.Get(authurl(conn.username, hash))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif res.StatusCode != http.StatusOK {\n\t\treturn fmt.Errorf(\"authenticated error: player not joined\")\n\t}\n\n\tvar response struct {\n\t\tID         string `json:\"id\"`\n\t\tName       string `json:\"name\"`\n\t\tProperties []struct {\n\t\t\tName      string `json:\"name\"`\n\t\t\tValue     string `json:\"value\"`\n\t\t\tSignature string `json:\"signature\"`\n\t\t} `json:\"properties\"`\n\t}\n\n\terr = json.NewDecoder(res.Body).Decode(&response)\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tconn.username = response.Name\n\tconn.uuid, err = uuid.Parse(response.ID)\n\tif err != nil {\n\t\treturn err\n\t}\n\tconn.properties = *(*[]login.Property)(unsafe.Pointer(&response.Properties))\n\n\treturn nil\n}\n\nfunc (conn *Conn) sessionHash(publicKey []byte) string {\n\thash := sha1.New()\n\thash.Write(conn.sharedSecret)\n\thash.Write(publicKey)\n\n\tsum := hash.Sum(nil)\n\n\tnegative := (sum[0] & 0x80) == 0x80\n\tif negative {\n\t\tsum = twosComplement(sum)\n\t}\n\n\t// Trim away zeroes\n\tres := strings.TrimLeft(hex.EncodeToString(sum), \"0\")\n\tif negative {\n\t\tres = \"-\" + res\n\t}\n\treturn res\n}\n\nfunc twosComplement(p []byte) []byte {\n\tcarry := true\n\tfor i := len(p) - 1; i >= 0; i-- {\n\t\tp[i] = byte(^p[i])\n\t\tif carry {\n\t\t\tcarry = p[i] == 0xff\n\t\t\tp[i]++\n\t\t}\n\t}\n\treturn p\n}\n"
  },
  {
    "path": "protocol/net/cfb8/cfb8.go",
    "content": "package cfb8\r\n\r\nimport \"crypto/cipher\"\r\n\r\n// CFB stream with 8 bit segment size\r\n// See http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf\r\ntype CFB8 struct {\r\n\t// the input block used to produce an output block\r\n\t//also the same as the iv, but overtime it's changed\r\n\tinput []byte\r\n\r\n\t//output used to decipher and cipher plaintext and cipher segments\r\n\toutput []byte\r\n\r\n\t//block is the forward crypto function\r\n\tblock cipher.Block\r\n\r\n\tdecrypt bool\r\n}\r\n\r\nfunc (x *CFB8) XORKeyStream(dst, src []byte) {\r\n\t//notes:\r\n\t//the plaintext and ciphertext segments consist of s bits(8 in this case)\r\n\r\n\tfor i, v := range src {\r\n\t\t//the forward crypto operation is applied to\r\n\t\t//the IV to produce the first output block\r\n\t\tx.block.Encrypt(x.output, x.input)\r\n\r\n\t\t//both the cipher plain text and segments are XOR with the msb s bits of the output block\r\n\t\tdst[i] = v ^ x.output[0]\r\n\r\n\t\t//makes room to concatenate s bits of cipher text segment for\r\n\t\t//encryption, and plaintext segment for decryption\r\n\t\tcopy(x.input, x.input[1:16])\r\n\t\tif x.decrypt {\r\n\t\t\tx.input[15] = v\r\n\t\t} else {\r\n\t\t\tx.input[15] = dst[i]\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunc NewCFB8(b cipher.Block, iv []byte, decrypt bool) *CFB8 {\r\n\tif b.BlockSize() != len(iv) {\r\n\t\tpanic(\"blockSize and IV must be the same length\")\r\n\t}\r\n\r\n\tcfb8 := &CFB8{\r\n\t\tblock:   b,\r\n\t\tinput:   make([]byte, len(iv)),\r\n\t\toutput:  make([]byte, len(iv)),\r\n\t\tdecrypt: decrypt,\r\n\t}\r\n\r\n\t//in CFB encryption, the first input block is the IV\r\n\tcopy(cfb8.input, iv)\r\n\treturn cfb8\r\n}\r\n"
  },
  {
    "path": "protocol/net/config.go",
    "content": "package net\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"net\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/status\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n)\n\ntype Config struct {\n\tStatus StatusProvider\n\n\tPacketWriteChanBuffer int\n\tIP                    net.IP\n\tPort                  int\n\tCompressionThreshold  int32\n\tEncrypt               bool\n\tAuthenticate          bool\n\tAcceptTransfers       bool\n}\n\ntype StatusProvider func(*Conn) status.StatusResponseData\n\nfunc (c Config) New() (*Listener, error) {\n\tl, err := net.ListenTCP(\"tcp\", &net.TCPAddr{\n\t\tIP: c.IP, Port: c.Port,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlis := &Listener{\n\t\tcfg:      c,\n\t\tListener: l,\n\n\t\tnewConns: make(chan *Conn),\n\t\terr:      make(chan error),\n\t\tApprovePlayer: func(c *Conn) (ok bool, disconnectionReason *text.TextComponent) {\n\t\t\treturn true, nil\n\t\t},\n\t}\n\tif c.Encrypt {\n\t\tlis.privKey, err = rsa.GenerateKey(rand.Reader, 1024)\n\t}\n\n\tgo lis.listen()\n\n\treturn lis, err\n}\n\nfunc Status(s status.StatusResponseData) StatusProvider {\n\treturn func(*Conn) status.StatusResponseData {\n\t\treturn s\n\t}\n}\n"
  },
  {
    "path": "protocol/net/conn.go",
    "content": "package net\n\nimport (\n\t\"bytes\"\n\t\"crypto/md5\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"unicode/utf16\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/cfb8\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/compress\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/handshake\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/login\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/status\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n\n\t\"github.com/google/uuid\"\n)\n\nvar PacketEncodeInterceptor func(c *Conn, pk packet.Encodeable) (stop bool)\nvar PacketDecodeInterceptor func(c *Conn, pk packet.Decodeable) (stop bool)\n\nvar PacketWriteInterceptor func(c *Conn, pk *bytes.Buffer, headerSize int32) (stop bool)\nvar PacketReadInterceptor func(c *Conn, pk *bytes.Reader, packetId int32) (stop bool)\n\nconst (\n\tclientVeryOldMsg = \"Your client is WAYYYYYY too old!!! this server supports MC 1.21\"\n\tclientTooOldMsg  = \"Your client is too old! this server supports MC 1.21\"\n\tclientTooNewMsg  = \"Your client is too new! this server supports MC 1.21\"\n)\n\ntype Conn struct {\n\tnet.Conn\n\n\tlistener *Listener\n\n\tusername   string\n\tuuid       uuid.UUID\n\tproperties []login.Property\n\n\tstate atomic.Int32\n\n\tencrypted                 bool\n\tsharedSecret, verifyToken []byte\n\n\tdecrypter, encrypter *cfb8.CFB8\n\tcompressionSet       bool\n\n\tusesForge bool\n\tread_mu   sync.Mutex\n\twrite_mu  sync.Mutex\n\n\tpacketWriteChan chan packet.Encodeable\n}\n\nfunc (conn *Conn) UsesForge() bool {\n\treturn conn.usesForge\n}\n\nfunc (conn *Conn) Username() string {\n\treturn conn.username\n}\n\nfunc (conn *Conn) UUID() uuid.UUID {\n\treturn conn.uuid\n}\n\nfunc (conn *Conn) Properties() []login.Property {\n\treturn conn.properties\n}\n\nfunc (conn *Conn) SetState(state int32) {\n\tconn.state.Store(state)\n}\nfunc (conn *Conn) State() int32 {\n\treturn conn.state.Load()\n}\n\nvar pkpool = sync.Pool{\n\tNew: func() any {\n\t\treturn bytes.NewBuffer(nil)\n\t},\n}\n\nvar pkcppool = sync.Pool{\n\tNew: func() any {\n\t\treturn bytes.NewBuffer(nil)\n\t},\n}\n\nfunc (conn *Conn) wpk(pk packet.Encodeable) error {\n\tif PacketEncodeInterceptor != nil {\n\t\tif PacketEncodeInterceptor(conn, pk) {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tvar packetBuf = pkpool.Get().(*bytes.Buffer)\n\tpacketBuf.Reset()\n\tdefer pkpool.Put(packetBuf)\n\n\tw := encoding.NewWriter(packetBuf)\n\t// write the header for the packet\n\n\tvar headerSize int32\n\tif conn.listener.cfg.CompressionThreshold < 0 || !conn.compressionSet {\n\t\tpacketBuf.Write([]byte{0x80, 0x80, 0})\n\t\theaderSize = 3\n\t} else if conn.compressionSet {\n\t\tpacketBuf.Write([]byte{0x80, 0x80, 0, 0x80, 0x80, 0})\n\t\theaderSize = 6\n\t}\n\n\tif err := w.VarInt(pk.ID()); err != nil {\n\t\treturn err\n\t}\n\tif err := pk.Encode(w); err != nil {\n\t\treturn err\n\t}\n\n\tif PacketWriteInterceptor != nil {\n\t\tif PacketWriteInterceptor(conn, packetBuf, headerSize) {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tif conn.listener.cfg.CompressionThreshold < 0 || !conn.compressionSet { // no compression\n\t\ti := encoding.PutVarInt(packetBuf.Bytes()[:3], int32(packetBuf.Len()-3))\n\t\tif i != 2 {\n\t\t\tpacketBuf.Bytes()[i] |= 0x80\n\t\t}\n\n\t\t_, err := conn.Write(packetBuf.Bytes())\n\t\treturn err\n\t} else { // yes compression\n\t\tif conn.listener.cfg.CompressionThreshold > int32(packetBuf.Len())-6 { // packet is too small to be compressed\n\t\t\ti := encoding.PutVarInt(packetBuf.Bytes()[:3], int32(packetBuf.Len()-3))\n\t\t\tif i != 2 {\n\t\t\t\tpacketBuf.Bytes()[i] |= 0x80\n\t\t\t}\n\n\t\t\t_, err := conn.Write(packetBuf.Bytes())\n\t\t\treturn err\n\t\t} else { // packet is compressed\n\t\t\tuncompressedLength := int32(packetBuf.Len() - 6)\n\t\t\tif i := encoding.PutVarInt(packetBuf.Bytes()[3:6], uncompressedLength); i != 2 {\n\t\t\t\tpacketBuf.Bytes()[i+3] |= 0x80\n\t\t\t}\n\n\t\t\tcompressedPacket, err := compress.CompressZlib(packetBuf.Bytes()[6:], &MaxCompressedPacketSize)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tpacketBuf.Truncate(6)\n\t\t\tpacketBuf.Write(compressedPacket)\n\n\t\t\tif i := encoding.PutVarInt(packetBuf.Bytes()[:3], int32(packetBuf.Len())-3); i != 2 {\n\t\t\t\tpacketBuf.Bytes()[i] |= 0x80\n\t\t\t}\n\n\t\t\tif _, err := conn.Write(packetBuf.Bytes()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn err\n\t\t}\n\t}\n}\n\nfunc (conn *Conn) WritePacket(pk packet.Encodeable) error {\n\tif conn.encrypted {\n\t\tconn.write_mu.Lock()\n\t\tdefer conn.write_mu.Unlock()\n\t} //no lock seems to work fine without encryption (?)\n\treturn conn.wpk(pk)\n}\n\n// 1MiB\nvar MaxCompressedPacketSize = 1024 * 1024\n\nfunc (conn *Conn) Read(dst []byte) (i int, err error) {\n\ti, err = conn.Conn.Read(dst)\n\tif err != nil {\n\t\treturn i, err\n\t}\n\tif conn.encrypted {\n\t\tconn.decryptd(dst, dst)\n\t}\n\n\treturn i, err\n}\n\nfunc (conn *Conn) Write(data []byte) (i int, err error) {\n\tif !conn.encrypted {\n\t\treturn conn.Conn.Write(data)\n\t}\n\tconn.encryptd(data, data)\n\n\treturn conn.Conn.Write(data)\n}\n\nfunc (conn *Conn) ReadPacket() (decoded packet.Decodeable, interceptionStopped bool, err error) {\n\tconn.read_mu.Lock()\n\tdefer conn.read_mu.Unlock()\n\n\tvar rd = encoding.NewReader(conn, 0)\n\tvar (\n\t\tlength, packetId int32\n\t)\n\tif conn.listener.cfg.CompressionThreshold < 0 || !conn.compressionSet { // no compression\n\t\tif _, err := rd.VarInt(&length); err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tif length <= 0 {\n\t\t\treturn nil, false, fmt.Errorf(\"malformed packet: empty\")\n\t\t}\n\t\tif length > 4096 {\n\t\t\treturn nil, false, fmt.Errorf(\"packet too big\")\n\t\t}\n\n\t\tvar packet = make([]byte, length)\n\t\tif _, err := conn.Read(packet); err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tid, data, err := encoding.VarInt(packet)\n\t\tif err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tpacketId = id\n\t\tpacket = data\n\t\tlength = int32(len(data))\n\t\tbr := bytes.NewReader(packet)\n\n\t\tif PacketReadInterceptor != nil {\n\t\t\tif PacketReadInterceptor(conn, br, packetId) {\n\t\t\t\treturn nil, true, nil\n\t\t\t}\n\t\t}\n\n\t\trd = encoding.NewReader(br, int(length))\n\t} else {\n\t\tvar packetLength int32\n\t\tif _, err := rd.VarInt(&packetLength); err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tif packetLength <= 0 {\n\t\t\treturn nil, false, fmt.Errorf(\"malformed packet: empty\")\n\t\t}\n\t\tvar dataLength int32\n\t\tdataLengthSize, err := rd.VarInt(&dataLength)\n\t\tif err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tif dataLength < 0 {\n\t\t\treturn nil, false, fmt.Errorf(\"malformed packet: negative length\")\n\t\t}\n\t\tif dataLength == 0 { //packet is uncompressed\n\t\t\tlength = packetLength - int32(dataLengthSize)\n\t\t\tif length < 0 {\n\t\t\t\treturn nil, false, fmt.Errorf(\"malformed packet: negative length\")\n\t\t\t}\n\t\t\tif length != 0 {\n\t\t\t\tvar packet = make([]byte, length)\n\t\t\t\tif _, err := conn.Read(packet); err != nil {\n\t\t\t\t\treturn nil, false, err\n\t\t\t\t}\n\n\t\t\t\tid, data, err := encoding.VarInt(packet)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, false, err\n\t\t\t\t}\n\t\t\t\tpacketId = id\n\t\t\t\tpacket = data\n\t\t\t\tlength = int32(len(data))\n\n\t\t\t\tr := bytes.NewReader(packet)\n\n\t\t\t\tif PacketReadInterceptor != nil {\n\t\t\t\t\tif PacketReadInterceptor(conn, r, packetId) {\n\t\t\t\t\t\treturn nil, true, nil\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trd = encoding.NewReader(r, int(length))\n\t\t\t}\n\t\t} else { //packet is compressed\n\t\t\tlength = dataLength\n\t\t\tcompressedLength := packetLength - int32(dataLengthSize)\n\n\t\t\tvar ilength = int(length)\n\n\t\t\tvar packetBuf = pkpool.Get().(*bytes.Buffer)\n\t\t\tpacketBuf.Reset()\n\t\t\tpacketBuf.ReadFrom(io.LimitReader(conn, int64(compressedLength)))\n\t\t\tdefer pkpool.Put(packetBuf)\n\n\t\t\tuncompressedPacket, err := compress.DecompressZlib(packetBuf.Bytes(), &ilength)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, false, err\n\t\t\t}\n\n\t\t\tid, data, err := encoding.VarInt(uncompressedPacket)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, false, err\n\t\t\t}\n\t\t\tpacketId = id\n\t\t\tuncompressedPacket = data\n\t\t\tlength = int32(len(data))\n\n\t\t\tr := bytes.NewReader(uncompressedPacket)\n\n\t\t\tif PacketReadInterceptor != nil {\n\t\t\t\tif PacketReadInterceptor(conn, r, packetId) {\n\t\t\t\t\treturn nil, true, nil\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trd = encoding.NewReader(r, int(length))\n\t\t}\n\t}\n\n\tvar pk packet.Decodeable\n\tpc, ok := ServerboundPool[conn.state.Load()][packetId]\n\n\tif !ok {\n\t\treturn packet.UnknownPacket{\n\t\t\tId:      packetId,\n\t\t\tLength:  length,\n\t\t\tPayload: rd,\n\t\t}, false, nil\n\t} else {\n\t\tpk = pc()\n\n\t\tif PacketDecodeInterceptor != nil {\n\t\t\tif PacketDecodeInterceptor(conn, pk) {\n\t\t\t\treturn nil, true, nil\n\t\t\t}\n\t\t}\n\n\t\terr := pk.Decode(rd)\n\t\treturn pk, false, err\n\t}\n}\n\n// PushPacket adds a packet to the queue without waiting for it to be sent\nfunc (conn *Conn) PushPacket(pk packet.Encodeable) {\n\tconn.packetWriteChan <- pk\n}\n\nfunc (conn *Conn) packetWriteChanListen() {\n\tgo func() {\n\t\tfor pk := range conn.packetWriteChan {\n\t\t\tif conn.encrypted {\n\t\t\t\tconn.write_mu.Lock()\n\t\t\t}\n\n\t\t\tconn.WritePacket(pk)\n\n\t\t\tif conn.encrypted {\n\t\t\t\tconn.write_mu.Unlock()\n\t\t\t}\n\t\t}\n\t}()\n}\n\nfunc (conn *Conn) writeLegacyStatus(status status.StatusResponseData) {\n\tprotocolString := fmt.Sprint(status.Version.Protocol)\n\tonlineString := fmt.Sprint(status.Players.Online)\n\tmaxString := fmt.Sprint(status.Players.Max)\n\n\tstringData := make([]rune, 3, 3+len(protocolString)+len(status.Version.Name)+len(status.Description.Text)+len(onlineString)+len(maxString))\n\tstringData[0], stringData[1] = '§', '1'\n\tstringData = append(append(stringData, []rune(protocolString)...), 0)\n\tstringData = append(append(stringData, []rune(status.Version.Name)...), 0)\n\tstringData = append(append(stringData, []rune(status.Description.Text)...), 0)\n\tstringData = append(append(stringData, []rune(onlineString)...), 0)\n\tstringData = append(stringData, []rune(maxString)...)\n\n\tutf16be := utf16.Encode([]rune(stringData))\n\n\tlength := uint16(len(utf16be))\n\tconn.Write([]byte{\n\t\t0xFF, byte(length >> 8), byte(length),\n\t})\n\n\tbinary.Write(conn, binary.BigEndian, utf16be)\n}\n\nfunc (conn *Conn) writeLegacyDisconnect(reason string) {\n\tvar data = []byte{0xFF}\n\n\tvar strdata = utf16.Encode([]rune(reason))\n\tvar strlen = int16(len(strdata))\n\n\tdata = append(data, byte(strlen>>8), byte(strlen))\n\tconn.Write(data)\n\tbinary.Write(conn, binary.BigEndian, strdata)\n}\n\nfunc (conn *Conn) writeClassicDisconnect(reason string) {\n\tvar data = []byte{0x0E}\n\tdata = append(data, reason...)\n\tfor len(data)-1 < 64 {\n\t\tdata = append(data, 0x20)\n\t}\n\n\tconn.Write(data)\n}\n\nvar fml2hs = [...]byte{0, 70, 79, 82, 71, 69}\n\n// Handles the handshake, and status/login state for the connection\n// Returns true if the client is logging in\nfunc (conn *Conn) handleHandshake() bool {\n\tpk, s, err := conn.ReadPacket()\n\tif err != nil {\n\t\tconn.writeClassicDisconnect(clientVeryOldMsg)\n\t\treturn false\n\t}\n\tif s {\n\t\treturn false\n\t}\n\thandshaking, ok := pk.(*handshake.Handshaking)\n\tif !ok {\n\t\tif pk.ID() == 122 {\n\t\t\tconn.writeLegacyStatus(conn.listener.cfg.Status(conn))\n\t\t}\n\t\tif pk.ID() == 78 {\n\t\t\tconn.writeLegacyDisconnect(clientTooOldMsg)\n\t\t}\n\t\treturn false\n\t}\n\tif addr := []byte(handshaking.ServerAddress); len(addr) > len(fml2hs) && [6]byte(addr[len(addr)-len(fml2hs):]) == fml2hs {\n\t\tconn.usesForge = true\n\t}\n\n\tswitch handshaking.NextState {\n\tcase handshake.Status:\n\t\tconn.state.Store(StatusState)\n\t\tpk, s, err := conn.ReadPacket()\n\t\tif err != nil || s {\n\t\t\treturn false\n\t\t}\n\t\tswitch pac := pk.(type) {\n\t\tcase *status.StatusRequest:\n\t\t\tif err := conn.WritePacket(&status.StatusResponse{Data: conn.listener.cfg.Status(conn)}); err != nil {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tpk, s, err = conn.ReadPacket()\n\t\t\tif err != nil || s {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tp, ok := pk.(*status.Ping)\n\t\t\tif !ok {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconn.WritePacket(p)\n\t\tcase *status.Ping:\n\t\t\tconn.WritePacket(pac)\n\t\t}\n\tcase handshake.Transfer:\n\t\tif !conn.listener.cfg.AcceptTransfers {\n\t\t\tconn.WritePacket(&login.Disconnect{Reason: text.Sprint(\"Transfers are not allowed.\")})\n\t\t\tconn.Close()\n\t\t\treturn false\n\t\t}\n\t\tfallthrough\n\tcase handshake.Login:\n\t\tconn.state.Store(LoginState)\n\t\tif handshaking.ProtocolVersion > ProtocolVersion {\n\t\t\tconn.WritePacket(&login.Disconnect{Reason: text.TextComponent{Text: clientTooNewMsg}})\n\t\t\treturn false\n\t\t}\n\t\tif handshaking.ProtocolVersion < ProtocolVersion {\n\t\t\tconn.WritePacket(&login.Disconnect{Reason: text.TextComponent{Text: clientTooOldMsg}})\n\t\t\treturn false\n\t\t}\n\t\tpk, s, err := conn.ReadPacket()\n\t\tif err != nil || s {\n\t\t\treturn false\n\t\t}\n\t\tloginStart, ok := pk.(*login.LoginStart)\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\t\tif ok, r := conn.listener.ApprovePlayer(conn); !ok {\n\t\t\tvar reason = text.Sprint(\"Disconnected\")\n\t\t\tif r != nil {\n\t\t\t\treason = *r\n\t\t\t}\n\t\t\tconn.WritePacket(&login.Disconnect{Reason: reason})\n\t\t\tconn.Close()\n\t\t\treturn false\n\t\t}\n\t\tconn.username = loginStart.Name\n\t\tconn.uuid = loginStart.PlayerUUID\n\n\t\tif conn.listener.cfg.Encrypt {\n\t\t\tif err := conn.encrypt(); err != nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif conn.listener.cfg.Authenticate {\n\t\t\t\tif err := conn.authenticate(); err != nil && conn.listener.cfg.Authenticate {\n\t\t\t\t\tconn.WritePacket(&login.Disconnect{Reason: text.TextComponent{Text: \"This server uses authenticated encryption mode, and you are using a cracked account.\"}})\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif !conn.listener.cfg.Authenticate {\n\t\t\tconn.uuid = username2v3(conn.username)\n\t\t}\n\n\t\tif err := conn.WritePacket(&login.SetCompression{Threshold: conn.listener.cfg.CompressionThreshold}); err != nil {\n\t\t\treturn false\n\t\t}\n\t\tconn.compressionSet = true\n\n\t\tsuc := &login.LoginSuccess{\n\t\t\tUUID:       conn.uuid,\n\t\t\tUsername:   conn.username,\n\t\t\tProperties: conn.properties,\n\t\t}\n\t\tif err := conn.WritePacket(suc); err != nil {\n\t\t\treturn false\n\t\t}\n\t\tpk, s, err = conn.ReadPacket()\n\t\tif err != nil || s {\n\t\t\treturn false\n\t\t}\n\t\t_, ok = pk.(*login.LoginAcknowledged)\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\t\tconn.state.Store(ConfigurationState)\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc username2v3(username string) uuid.UUID {\n\td := append([]byte(\"OfflinePlayer:\"), username...)\n\n\tsum := md5.Sum(d)\n\tsum[6] &= 0x0f /* clear version        */\n\tsum[6] |= 0x30 /* set to version 3     */\n\tsum[8] &= 0x3f /* clear variant        */\n\tsum[8] |= 0x80 /* set to IETF variant  */\n\n\treturn uuid.UUID(sum)\n}\n"
  },
  {
    "path": "protocol/net/encryption.go",
    "content": "package net\n\nimport (\n\t\"crypto/aes\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"fmt\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/cfb8\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/login\"\n)\n\nfunc (conn *Conn) encryptd(plaintext, dst []byte) {\n\tconn.encrypter.XORKeyStream(dst, plaintext)\n}\n\nfunc (conn *Conn) decryptd(ciphertext, dst []byte) {\n\tconn.decrypter.XORKeyStream(dst, ciphertext)\n}\n\nfunc (conn *Conn) encrypt() error {\n\tkey, err := x509.MarshalPKIXPublicKey(&conn.listener.privKey.PublicKey)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tverifyToken := make([]byte, 4)\n\trand.Read(verifyToken)\n\n\tconn.WritePacket(&login.EncryptionRequest{\n\t\tPublicKey:          key,\n\t\tVerifyToken:        verifyToken,\n\t\tShouldAuthenticate: conn.listener.cfg.Authenticate,\n\t})\n\tp, s, err := conn.ReadPacket()\n\tif err != nil || s {\n\t\treturn err\n\t}\n\tres, ok := p.(*login.EncryptionResponse)\n\tif !ok {\n\t\treturn fmt.Errorf(\"unsuccessful encryption\")\n\t}\n\tconn.encrypted = ok\n\n\tconn.sharedSecret, err = rsa.DecryptPKCS1v15(nil, conn.listener.privKey, res.SharedSecret)\n\tif err != nil {\n\t\treturn err\n\t}\n\tconn.verifyToken, err = rsa.DecryptPKCS1v15(nil, conn.listener.privKey, res.VerifyToken)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif [4]byte(conn.verifyToken) != [4]byte(verifyToken) {\n\t\treturn fmt.Errorf(\"unsuccessful encryption\")\n\t}\n\n\tblock, err := aes.NewCipher(conn.sharedSecret)\n\tif err != nil {\n\t\treturn err\n\t}\n\tconn.encrypter = cfb8.NewCFB8(block, conn.sharedSecret, false)\n\tconn.decrypter = cfb8.NewCFB8(block, conn.sharedSecret, true)\n\n\treturn nil\n}\n"
  },
  {
    "path": "protocol/net/io/buffers/buffers.go",
    "content": "package buffers\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"sync\"\r\n)\r\n\r\nvar Buffers = sync.Pool{\r\n\tNew: func() any {\r\n\t\treturn new(bytes.Buffer)\r\n\t},\r\n}\r\n\r\nfunc Size() int {\r\n\tbuf := Buffers.Get().(*bytes.Buffer)\r\n\tdefer Buffers.Put(buf)\r\n\r\n\treturn buf.Cap()\r\n}\r\n"
  },
  {
    "path": "protocol/net/io/compress/compress.go",
    "content": "package compress\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"compress/gzip\"\r\n\t\"sync\"\r\n\r\n\t\"github.com/4kills/go-libdeflate/v2\"\r\n\t\"github.com/4kills/go-zlib\"\r\n)\r\n\r\nvar decompressors = sync.Pool{\r\n\tNew: func() any {\r\n\t\tdc, _ := libdeflate.NewDecompressor()\r\n\t\treturn dc\r\n\t},\r\n}\r\n\r\nvar compressors = sync.Pool{\r\n\tNew: func() any {\r\n\t\tdc, _ := libdeflate.NewCompressor()\r\n\t\treturn dc\r\n\t},\r\n}\r\n\r\nvar bufs = sync.Pool{\r\n\tNew: func() any { return new(bytes.Buffer) },\r\n}\r\n\r\n// RZlib is a pool of zlib.Reader's that can be reused to avoid allocations\r\nvar RZlib = sync.Pool{\r\n\tNew: func() any { d, _ := zlib.NewReader(nil); return d },\r\n}\r\n\r\n// RGzip is a pool of gzip.Reader's that can be reused to avoid allocations\r\nvar RGzip = sync.Pool{\r\n\tNew: func() any { d, _ := gzip.NewReader(nil); return d },\r\n}\r\n\r\n// WZlib is a pool of zlib.Writer's that can be reused to avoid allocations\r\nvar WZlib = sync.Pool{\r\n\tNew: func() any { return zlib.NewWriter(nil) },\r\n}\r\n\r\n// WGzip is a pool of gzip.Writer's that can be reused to avoid allocations\r\nvar WGzip = sync.Pool{\r\n\tNew: func() any { return gzip.NewWriter(nil) },\r\n}\r\n"
  },
  {
    "path": "protocol/net/io/compress/lz4.go",
    "content": "package compress\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"encoding/binary\"\r\n\t\"fmt\"\r\n\r\n\t\"github.com/pierrec/lz4/v4\"\r\n)\r\n\r\n// Decompress a lz4-java data. The data returned is only safe to use until the next operation\r\nfunc DecompressLZ4(data []byte) ([]byte, error) {\r\n\tvar buf = bufs.Get().(*bytes.Buffer)\r\n\tdefer bufs.Put(buf)\r\n\r\n\tbuf.Reset()\r\n\r\n\tvar (\r\n\t\toffsetFile   int\r\n\t\toffsetBuffer int\r\n\t)\r\n\tfor {\r\n\t\tif offsetFile == len(data) {\r\n\t\t\treturn buf.Bytes()[:offsetBuffer], nil\r\n\t\t}\r\n\t\theader := data[offsetFile : offsetFile+21]\r\n\t\toffsetFile += 21\r\n\r\n\t\tif string(header[:8]) != magic {\r\n\t\t\treturn buf.Bytes()[:offsetBuffer], fmt.Errorf(\"invalid magic value\")\r\n\t\t}\r\n\r\n\t\ttoken := header[8]\r\n\t\tcompressedLength := int(binary.LittleEndian.Uint32(header[9:13]))\r\n\r\n\t\tcompressionMethod := token & 0xf0\r\n\r\n\t\tswitch compressionMethod {\r\n\t\tcase methodUncompressed:\r\n\t\t\tif buf.Cap()-offsetBuffer < compressedLength {\r\n\t\t\t\tbuf.Grow(offsetBuffer + compressedLength)\r\n\t\t\t}\r\n\r\n\t\t\tcopy(buf.Bytes()[offsetBuffer:offsetBuffer+compressedLength], data[offsetFile:offsetFile+compressedLength])\r\n\t\t\toffsetBuffer += compressedLength\r\n\t\tcase methodLZ4:\r\n\t\t\tdecompressedLength := int(binary.LittleEndian.Uint32(header[13:17]))\r\n\r\n\t\t\tif buf.Cap()-offsetBuffer < decompressedLength {\r\n\t\t\t\tbuf.Grow(offsetBuffer + decompressedLength)\r\n\t\t\t}\r\n\r\n\t\t\tif _, err := lz4.UncompressBlock(data[offsetFile:offsetFile+compressedLength], buf.Bytes()[offsetBuffer:offsetBuffer+decompressedLength]); err != nil {\r\n\t\t\t\treturn buf.Bytes()[:offsetBuffer], err\r\n\t\t\t}\r\n\t\t\toffsetBuffer += decompressedLength\r\n\t\t}\r\n\t\toffsetFile += compressedLength\r\n\t}\r\n}\r\n\r\nconst magic = \"LZ4Block\"\r\nconst (\r\n\tmethodUncompressed = 1 << (iota + 4)\r\n\tmethodLZ4\r\n)\r\n"
  },
  {
    "path": "protocol/net/io/compress/zlib.go",
    "content": "package compress\r\n\r\nimport (\r\n\t\"bytes\"\r\n\r\n\t\"github.com/4kills/go-libdeflate/v2\"\r\n)\r\n\r\n// Decompress zlib. If decompressedLength is provided, the data returned will only be safe to use until the next operation\r\n// It is recommmended to provide the decompressed length to avoid allocation. If you don't know it, provide a number likely bigger than the decompressed length.\r\nfunc DecompressZlib(compressed []byte, decompressedLength *int) ([]byte, error) {\r\n\tdc := decompressors.Get().(libdeflate.Decompressor)\r\n\tdefer decompressors.Put(dc)\r\n\r\n\tif decompressedLength != nil {\r\n\t\tdst := bufs.Get().(*bytes.Buffer)\r\n\t\tif dst.Len() < int(*decompressedLength) {\r\n\t\t\tdst.Grow(*decompressedLength)\r\n\t\t}\r\n\t\tdefer bufs.Put(dst)\r\n\r\n\t\tc := dst.Bytes()[:*decompressedLength]\r\n\r\n\t\t_, decompressedResult, err := dc.DecompressZlib(compressed, c)\r\n\r\n\t\treturn decompressedResult, err\r\n\t} else {\r\n\t\t_, decompressedResult, err := dc.DecompressZlib(compressed, nil)\r\n\t\treturn decompressedResult, err\r\n\t}\r\n}\r\n\r\n// Compresses zlib. If compressedLength is provided, data returned will only be safe to use until the next operation.\r\n// It is recommmended to provide the compressed length to avoid allocation. If you don't know it, provide a number likely bigger than the compressed length.\r\nfunc CompressZlib(decompressedData []byte, compressedLength *int) (compressed []byte, err error) {\r\n\tc := compressors.Get().(libdeflate.Compressor)\r\n\tdefer compressors.Put(c)\r\n\r\n\tif compressedLength != nil {\r\n\t\tdst := bufs.Get().(*bytes.Buffer)\r\n\t\tif dst.Len() < int(*compressedLength) {\r\n\t\t\tdst.Grow(*compressedLength)\r\n\t\t}\r\n\t\tdefer bufs.Put(dst)\r\n\r\n\t\tdc := dst.Bytes()[:*compressedLength]\r\n\r\n\t\t_, compressedResult, err := c.CompressZlib(decompressedData, dc)\r\n\r\n\t\treturn compressedResult, err\r\n\t} else {\r\n\t\t_, compressedResult, err := c.CompressZlib(decompressedData, nil)\r\n\r\n\t\treturn compressedResult, err\r\n\t}\r\n}\r\n"
  },
  {
    "path": "protocol/net/io/encoding/encoding.go",
    "content": "// Package encoding provides encoding and decoding of minecraft data types\npackage encoding\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"unsafe\"\n)\n\nfunc AppendByte(data []byte, b int8) []byte {\n\treturn append(data, byte(b))\n}\n\nfunc AppendUbyte(data []byte, b byte) []byte {\n\treturn append(data, b)\n}\n\nfunc AppendShort(data []byte, s int16) []byte {\n\treturn append(data, byte(s>>8), byte(s))\n}\n\nfunc AppendUshort(data []byte, s uint16) []byte {\n\treturn append(data, byte(s>>8), byte(s))\n}\n\nfunc AppendInt(data []byte, i int32) []byte {\n\treturn append(data, byte(i>>24), byte(i>>16), byte(i>>8), byte(i))\n}\n\nfunc AppendLong(data []byte, l int64) []byte {\n\treturn append(data, byte(l>>56), byte(l>>48), byte(l>>40), byte(l>>32), byte(l>>24), byte(l>>16), byte(l>>8), byte(l))\n}\n\nfunc AppendVarInt(data []byte, value int32) []byte {\n\tux := uint32(value)\n\tfor ux >= 0x80 {\n\t\tdata = append(data, byte(ux&0x7F)|0x80)\n\t\tux >>= 7\n\t}\n\treturn append(data, byte(ux))\n}\n\nfunc PutVarInt(data []byte, value int32) (n int) {\n\tux := uint32(value)\n\tvar i int\n\tfor ; ux >= 0x80; i++ {\n\t\tdata[i] = byte(ux&0x7F) | 0x80\n\t\tux >>= 7\n\t}\n\tdata[i] = byte(ux)\n\n\treturn i\n}\n\nfunc WriteVarInt(w io.Writer, value int32) error {\n\tux := uint32(value)\n\tfor ux >= 0x80 {\n\t\tif _, err := w.Write([]byte{byte(ux&0x7F) | 0x80}); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tux >>= 7\n\t}\n\n\t_, err := w.Write([]byte{byte(ux)})\n\treturn err\n}\n\nfunc VarInt(data []byte) (int32, []byte, error) {\n\tvar (\n\t\tposition    int\n\t\tcurrentByte byte\n\n\t\tvalue int32\n\t)\n\n\tfor {\n\t\tif len(data) == 0 {\n\t\t\treturn value, data, io.EOF\n\t\t}\n\t\tcurrentByte = data[0]\n\t\tdata = data[1:]\n\n\t\tvalue |= int32(currentByte&127) << position\n\n\t\tif (currentByte & 128) == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tposition += 7\n\n\t\tif position >= 32 {\n\t\t\treturn value, data, fmt.Errorf(\"VarInt is too big\")\n\t\t}\n\t}\n\n\treturn value, data, nil\n}\n\nfunc ReadVarInt(r io.Reader) (int32, error) {\n\tvar (\n\t\tposition    int32\n\t\tcurrentByte byte\n\t\tcontinueBit byte = 128\n\t\tsegmentBits byte = 127\n\n\t\tvalue int32\n\t)\n\n\tfor {\n\t\tif _, err := r.Read(unsafe.Slice(&currentByte, 1)); err != nil {\n\t\t\treturn value, err\n\t\t}\n\n\t\tvalue |= int32(currentByte&segmentBits) << position\n\n\t\tif (currentByte & continueBit) == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tposition += 7\n\n\t\tif position >= 32 {\n\t\t\treturn value, fmt.Errorf(\"VarInt is too big\")\n\t\t}\n\t}\n\n\treturn value, nil\n}\n\nfunc AppendVarLong(data []byte, value int64) []byte {\n\tvar (\n\t\tcontinueBit int64 = 128\n\t\tsegmentBits int64 = 127\n\t)\n\tfor {\n\t\tif (value & ^segmentBits) == 0 {\n\t\t\treturn append(data, byte(value))\n\t\t}\n\n\t\tdata = append(data, byte((value&segmentBits)|continueBit))\n\n\t\tvalue >>= 7\n\t}\n}\n\nfunc AppendString(data []byte, str string) []byte {\n\tdata = AppendVarInt(data, int32(len(str)))\n\n\treturn append(data, str...)\n}\n\nfunc String(data []byte) (string, error) {\n\tl, strd, err := VarInt(data)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn unsafe.String(unsafe.SliceData(strd), l), nil\n}\n\ntype BitSet []int64\n\nfunc (set BitSet) Get(i int) bool {\n\treturn (set[i/64] & (1 << (i % 64))) != 0\n}\n\nfunc (set BitSet) Set(i int) {\n\tset[i/64] |= 1 << (i % 64)\n}\n\nfunc (set BitSet) Unset(i int) {\n\tset[i/64] &= ^(1 << (i % 64))\n}\n\ntype FixedBitSet []byte\n\nfunc (set FixedBitSet) Get(i int) bool {\n\treturn (set[i/8] & (1 << (i % 8))) != 0\n}\n\nfunc (set FixedBitSet) Set(i int) {\n\tset[i/8] |= 1 << (i % 8)\n}\n\nfunc (set FixedBitSet) Unset(i int) {\n\tset[i/8] &= ^(1 << (i % 8))\n}\n"
  },
  {
    "path": "protocol/net/io/encoding/reader.go",
    "content": "package encoding\r\n\r\nimport (\r\n\t\"encoding/json\"\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"math\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/nbt\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n\r\n\t\"github.com/google/uuid\"\r\n)\r\n\r\ntype Reader struct {\r\n\tr      io.Reader\r\n\tlength int\r\n}\r\n\r\nfunc NewReader(r io.Reader, length int) Reader {\r\n\treturn Reader{r, length}\r\n}\r\n\r\nfunc (r *Reader) SetLength(length int) {\r\n\tr.length = length\r\n}\r\n\r\nfunc (r Reader) readBytes(l int) ([]byte, error) {\r\n\tif l < 0 {\r\n\t\treturn nil, fmt.Errorf(\"negative length for make (read bytes)\")\r\n\t}\r\n\tarr := make([]byte, l)\r\n\t_, err := r.r.Read(arr)\r\n\treturn arr, err\r\n}\r\n\r\nfunc (r Reader) Read(dst []byte) (i int, err error) {\r\n\treturn r.r.Read(dst)\r\n}\r\n\r\nfunc (r Reader) Bool(b *bool) error {\r\n\tvar byt byte\r\n\terr := r.Ubyte(&byt)\r\n\t*b = byt != 0\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) ReadAll(data *[]byte) (err error) {\r\n\t*data, err = r.readBytes(r.length)\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) Byte(i *int8) error {\r\n\td, err := r.readBytes(1)\r\n\t*i = int8(d[0])\r\n\treturn err\r\n}\r\nfunc (r Reader) Ubyte(i *byte) error {\r\n\td, err := r.readBytes(1)\r\n\t*i = d[0]\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) Short(i *int16) error {\r\n\td, err := r.readBytes(2)\r\n\t*i = int16(d[0])<<8 | int16(d[1])\r\n\treturn err\r\n}\r\nfunc (r Reader) Ushort(i *uint16) error {\r\n\td, err := r.readBytes(2)\r\n\t*i = uint16(d[0])<<8 | uint16(d[1])\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) Int(i *int32) error {\r\n\td, err := r.readBytes(4)\r\n\t*i = int32(d[0])<<24 | int32(d[1])<<16 | int32(d[2])<<8 | int32(d[3])\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) Long(i *int64) error {\r\n\td, err := r.readBytes(8)\r\n\t*i = int64(d[0])<<56 | int64(d[1])<<48 | int64(d[2])<<40 | int64(d[3])<<32 | int64(d[4])<<24 | int64(d[5])<<16 | int64(d[6])<<8 | int64(d[7])\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) Float(f *float32) error {\r\n\treturn r.Int((*int32)(unsafe.Pointer(f)))\r\n}\r\nfunc (r Reader) Double(f *float64) error {\r\n\treturn r.Long((*int64)(unsafe.Pointer(f)))\r\n}\r\n\r\nfunc (r Reader) String(s *string) error {\r\n\tvar l int32\r\n\tif _, err := r.VarInt(&l); err != nil {\r\n\t\treturn err\r\n\t}\r\n\td, err := r.readBytes(int(l))\r\n\t*s = unsafe.String(unsafe.SliceData(d), len(d))\r\n\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) Identifier(s *string) error {\r\n\treturn r.String(s)\r\n}\r\n\r\nfunc (r Reader) VarInt(value *int32) (i int, err error) {\r\n\tvar (\r\n\t\tposition     int32\r\n\t\tcurrentByte  byte\r\n\t\tCONTINUE_BIT byte = 128\r\n\t\tSEGMENT_BITS byte = 127\r\n\r\n\t\tsize int\r\n\t)\r\n\r\n\tfor {\r\n\t\tif err := r.Ubyte(&currentByte); err != nil {\r\n\t\t\treturn size, err\r\n\t\t}\r\n\r\n\t\t*value |= int32((currentByte & SEGMENT_BITS)) << position\r\n\t\tsize++\r\n\r\n\t\tif (currentByte & CONTINUE_BIT) == 0 {\r\n\t\t\tbreak\r\n\t\t}\r\n\r\n\t\tposition += 7\r\n\r\n\t\tif position >= 32 {\r\n\t\t\treturn size, fmt.Errorf(\"VarInt is too big\")\r\n\t\t}\r\n\t}\r\n\r\n\treturn size, nil\r\n}\r\n\r\nfunc (r Reader) VarLong(value *int64) error {\r\n\tvar (\r\n\t\tposition     int64\r\n\t\tcurrentByte  byte\r\n\t\tCONTINUE_BIT byte = 128\r\n\t\tSEGMENT_BITS byte = 127\r\n\t)\r\n\r\n\tfor {\r\n\t\tif err := r.Ubyte(&currentByte); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\t*value |= int64((currentByte & SEGMENT_BITS)) << position\r\n\r\n\t\tif (currentByte & CONTINUE_BIT) == 0 {\r\n\t\t\tbreak\r\n\t\t}\r\n\r\n\t\tposition += 7\r\n\r\n\t\tif position >= 32 {\r\n\t\t\treturn fmt.Errorf(\"VarInt is too big\")\r\n\t\t}\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (r Reader) Position(x, y, z *int32) error {\r\n\tvar l int64\r\n\terr := r.Long(&l)\r\n\r\n\t*x = int32(l >> 38)\r\n\t*y = int32(l << 52 >> 52)\r\n\t*z = int32(l << 26 >> 38)\r\n\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) UUID(u *uuid.UUID) error {\r\n\td, err := r.readBytes(16)\r\n\r\n\t*u = uuid.UUID(d)\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) BitSet(data *BitSet) error {\r\n\tvar l int32\r\n\tif _, err := r.VarInt(&l); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif l < 0 {\r\n\t\treturn fmt.Errorf(\"negative length for make (bitset)\")\r\n\t}\r\n\t*data = make([]int64, l)\r\n\r\n\tfor _, l := range *data {\r\n\t\tif err := r.Long(&l); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (r Reader) FixedBitSet(data *FixedBitSet, bits int32) error {\r\n\t*data = make(FixedBitSet, int(math.Ceil(float64(bits)/8)))\r\n\tfor _, l := range *data {\r\n\t\tif err := r.Ubyte(&l); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\n// Length prefixed byte array\r\nfunc (r Reader) ByteArray(s *[]byte) error {\r\n\tvar l int32\r\n\tif _, err := r.VarInt(&l); err != nil {\r\n\t\treturn err\r\n\t}\r\n\td, err := r.readBytes(int(l))\r\n\t*s = d\r\n\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) FixedByteArray(s []byte) error {\r\n\t_, err := r.r.Read(s)\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) NBT(v any) error {\r\n\tdec := nbt.NewDecoder(r.r)\r\n\tdec.ReadRootName(false)\r\n\r\n\t_, err := dec.Decode(v)\r\n\r\n\treturn err\r\n}\r\n\r\nfunc (r Reader) JSONTextComponent(comp *text.TextComponent) error {\r\n\tvar d []byte\r\n\tif err := r.ByteArray(&d); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn json.Unmarshal(d, comp)\r\n}\r\n\r\nfunc (r Reader) TextComponent(comp *text.TextComponent) error {\r\n\tvar tag int8\r\n\tif err := r.Byte(&tag); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tswitch tag {\r\n\tcase nbt.String:\r\n\t\treturn r.nbtString(&comp.Text)\r\n\tcase nbt.Compound:\r\n\t\treturn r.NBT(comp)\r\n\tdefault:\r\n\t\treturn fmt.Errorf(\"invalid text component root compound\")\r\n\t}\r\n}\r\n\r\nfunc (r Reader) nbtString(v *string) error {\r\n\tvar stringlen int16\r\n\tif err := r.Short(&stringlen); err != nil {\r\n\t\treturn err\r\n\t}\r\n\td, err := r.readBytes(int(stringlen))\r\n\t*v = unsafe.String(unsafe.SliceData(d), len(d))\r\n\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/io/encoding/writer.go",
    "content": "package encoding\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"encoding/json\"\r\n\t\"fmt\"\r\n\t\"math\"\r\n\t\"unsafe\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/nbt\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n\r\n\t\"github.com/google/uuid\"\r\n)\r\n\r\ntype Writer struct {\r\n\tw *bytes.Buffer\r\n}\r\n\r\nfunc NewWriter(w *bytes.Buffer) Writer {\r\n\treturn Writer{w}\r\n}\r\n\r\nfunc (w Writer) Write(data []byte) (i int, err error) {\r\n\treturn w.w.Write(data)\r\n}\r\n\r\nfunc (w Writer) Bool(b bool) error {\r\n\treturn w.Ubyte(*(*byte)(unsafe.Pointer(&b)))\r\n}\r\n\r\nfunc (w Writer) Byte(i int8) error {\r\n\treturn w.Ubyte(uint8(i))\r\n}\r\nfunc (w Writer) Ubyte(i uint8) error {\r\n\t_, err := w.Write([]byte{i})\r\n\r\n\treturn err\r\n}\r\n\r\nfunc (w Writer) Short(i int16) error {\r\n\treturn w.Ushort(uint16(i))\r\n}\r\nfunc (w Writer) Ushort(i uint16) error {\r\n\t_, err := w.Write(\r\n\t\t[]byte{\r\n\t\t\tbyte(i >> 8),\r\n\t\t\tbyte(i),\r\n\t\t},\r\n\t)\r\n\treturn err\r\n}\r\n\r\nfunc (w Writer) Int(i int32) error {\r\n\t_, err := w.Write(\r\n\t\t[]byte{\r\n\t\t\tbyte(i >> 24),\r\n\t\t\tbyte(i >> 16),\r\n\t\t\tbyte(i >> 8),\r\n\t\t\tbyte(i),\r\n\t\t},\r\n\t)\r\n\treturn err\r\n}\r\n\r\nfunc (w Writer) Long(i int64) error {\r\n\t_, err := w.Write(\r\n\t\t[]byte{\r\n\t\t\tbyte(i >> 56),\r\n\t\t\tbyte(i >> 48),\r\n\t\t\tbyte(i >> 40),\r\n\t\t\tbyte(i >> 32),\r\n\t\t\tbyte(i >> 24),\r\n\t\t\tbyte(i >> 16),\r\n\t\t\tbyte(i >> 8),\r\n\t\t\tbyte(i),\r\n\t\t},\r\n\t)\r\n\treturn err\r\n}\r\n\r\nfunc (w Writer) Float(f float32) error {\r\n\treturn w.Int(int32(math.Float32bits(f)))\r\n}\r\nfunc (w Writer) Double(f float64) error {\r\n\treturn w.Long(int64(math.Float64bits(f)))\r\n}\r\n\r\nfunc (w Writer) String(s string) error {\r\n\tif err := w.VarInt(int32(len(s))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\t_, err := w.Write(unsafe.Slice(unsafe.StringData(s), len(s))) //(*(*[]byte)(unsafe.Pointer(&s)))\r\n\treturn err\r\n}\r\n\r\nfunc (w Writer) Identifier(s string) error {\r\n\tif len(s) > 32767 {\r\n\t\treturn fmt.Errorf(\"expected identifier len to be smaller than 32767, got %d\", len(s))\r\n\t}\r\n\tif err := w.VarInt(int32(len(s))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\t_, err := w.Write(unsafe.Slice(unsafe.StringData(s), len(s))) //(*(*[]byte)(unsafe.Pointer(&s)))\r\n\treturn err\r\n}\r\n\r\nfunc (w Writer) VarInt(value int32) error {\r\n\tux := uint32(value)\r\n\tfor ux >= 0x80 {\r\n\t\tif err := w.Ubyte(byte(ux&0x7F) | 0x80); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tux >>= 7\r\n\t}\r\n\r\n\treturn w.Ubyte(byte(ux))\r\n}\r\n\r\nfunc (w Writer) VarLong(value int64) error {\r\n\tvar (\r\n\t\tCONTINUE_BIT int64 = 128\r\n\t\tSEGMENT_BITS int64 = 127\r\n\t)\r\n\tfor {\r\n\t\tif (value & ^SEGMENT_BITS) == 0 {\r\n\t\t\treturn w.Ubyte(byte(value))\r\n\t\t}\r\n\r\n\t\tif err := w.Ubyte(byte((value & SEGMENT_BITS) | CONTINUE_BIT)); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tvalue >>= 7\r\n\t}\r\n}\r\n\r\nfunc (w Writer) Position(x, y, z int32) error {\r\n\treturn w.Long(((int64(x) & 0x3FFFFFF) << 38) | ((int64(z) & 0x3FFFFFF) << 12) | (int64(y) & 0xFFF))\r\n}\r\n\r\nfunc (w Writer) UUID(u uuid.UUID) error {\r\n\td := [16]byte(u)\r\n\t_, err := w.Write(d[:])\r\n\treturn err\r\n}\r\n\r\nfunc (w Writer) BitSet(data BitSet) error {\r\n\tif err := w.VarInt(int32(len(data))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor _, l := range data {\r\n\t\tif err := w.Long(l); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (w Writer) FixedBitSet(data FixedBitSet) error {\r\n\tfor _, l := range data {\r\n\t\tif err := w.Ubyte(l); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\n// Length prefixed byte array\r\nfunc (w Writer) ByteArray(s []byte) error {\r\n\tif err := w.VarInt(int32(len(s))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\t_, err := w.w.Write(s)\r\n\r\n\treturn err\r\n}\r\n\r\nfunc (w Writer) FixedByteArray(s []byte) error {\r\n\t_, err := w.w.Write(s)\r\n\r\n\treturn err\r\n}\r\n\r\nfunc (w Writer) JSONTextComponent(comp text.TextComponent) error {\r\n\td, _ := json.Marshal(comp)\r\n\r\n\treturn w.ByteArray(d)\r\n}\r\n\r\nfunc (w Writer) TextComponent(comp text.TextComponent) error {\r\n\treturn w.NBT(comp)\r\n}\r\n\r\nfunc (w Writer) StringTextComponent(text string) error {\r\n\tif err := w.Byte(8); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(int16(len(text))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\treturn w.String(text)\r\n}\r\n\r\nfunc (w Writer) NBT(data any) error {\r\n\tenc := nbt.NewEncoder(w.w)\r\n\tenc.WriteRootName(false)\r\n\r\n\treturn enc.Encode(\"\", data)\r\n}\r\n"
  },
  {
    "path": "protocol/net/listener.go",
    "content": "// Package net provides tools for creating minecraft servers, such as packet sending, registry data, encryption, authentication, compression and more\npackage net\n\nimport (\n\t\"crypto/rsa\"\n\t\"fmt\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\n\t\"net\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n)\n\nconst (\n\tProtocolVersion = 767\n)\n\nconst (\n\tHandshakingState = iota\n\tStatusState\n\tLoginState\n\tConfigurationState\n\tPlayState\n)\n\ntype Listener struct {\n\tnet.Listener\n\tcfg Config\n\n\tApprovePlayer func(*Conn) (ok bool, disconnectionReason *text.TextComponent)\n\n\tnewConns chan *Conn\n\terr      chan error\n\n\tprivKey *rsa.PrivateKey\n}\n\nfunc (l *Listener) SetStatusProvider(p StatusProvider) {\n\tl.cfg.Status = p\n}\n\nfunc (l *Listener) StatusProvider() StatusProvider {\n\treturn l.cfg.Status\n}\n\nfunc (l *Listener) listen() {\n\tfor {\n\t\tc, err := l.Listener.Accept()\n\t\tif err != nil {\n\t\t\tl.err <- err\n\t\t\tclose(l.newConns)\n\t\t\treturn\n\t\t}\n\t\tconn := l.newConn(c)\n\n\t\tgo func() {\n\t\t\tif conn.handleHandshake() {\n\t\t\t\tl.newConns <- conn\n\t\t\t}\n\t\t}()\n\t}\n}\n\nfunc (l *Listener) newConn(c net.Conn) *Conn {\n\tconn := &Conn{\n\t\tConn:     c,\n\t\tlistener: l,\n\n\t\tpacketWriteChan: make(chan packet.Encodeable, l.cfg.PacketWriteChanBuffer),\n\t}\n\n\treturn conn\n}\n\nfunc (l *Listener) Close() error {\n\tclose(l.newConns)\n\tl.err <- fmt.Errorf(\"listener closed\")\n\n\treturn nil\n}\n\nfunc (l *Listener) Accept() (*Conn, error) {\n\tconn, ok := <-l.newConns\n\tif !ok {\n\t\treturn nil, <-l.err\n\t}\n\n\treturn conn, nil\n}\n"
  },
  {
    "path": "protocol/net/metadata/metadata.go",
    "content": "package metadata\n\nimport (\n\t\"github.com/google/uuid\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/slot\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n)\n\n/*\n\t[index] -> value\n\nvalue must be one of the types below\n\nlearn more about metadata at https://wiki.vg/Entity_metadata\n*/\ntype Metadata map[byte]any\n\ntype (\n\tByte    int8    //0\n\tVarInt  int32   //1\n\tVarLong int64   //2\n\tFloat   float32 //3\n\tString  string  //4\n\n\tTextComponent         text.TextComponent  //5\n\tOptionalTextComponent *text.TextComponent //6\n\tSlot                  = slot.Slot         //7\n\tBoolean               bool                //8\n\tRotations             [3]Float            //9\n\tPosition              [3]int32            //10\n\tOptionalPosition      *[3]int32           //11\n\tDirection             VarInt              //12\n\tOptionalUUID          *uuid.UUID          //13\n\tBlockState            VarInt              //14\n\tOptionalBlockState    VarInt              //15\n\tNBT                   any                 //16\n\t// Particle //17\n\tVillagerData   [3]Float //18 | [type, profession, level]\n\tOptionalVarInt VarInt   //19\n\tPose           VarInt   //20\n\tCatVariant     VarInt   //21\n\tFrogVariant    VarInt   //22\n\n\tGlobalPosition struct {\n\t\tDimensionIdentifier String\n\t\tPosition            Position\n\t}\n\tOptionalGlobalPosition *GlobalPosition //23\n\n\tPaintingVariant VarInt   //24\n\tSnifferState    VarInt   //25\n\tVector3         [3]Float //26\n\tQuatermion      [4]Float //27\n)\n\nconst (\n\tStanding Pose = iota\n\tFallFlying\n\tSleeping\n\tSwimming\n\tSpinAttack\n\tSneaking\n\tLongJumping\n\tDying\n\tCroaking\n\tUsingTongue\n\tSitting\n\tRoaring\n\tSniffing\n\tEmerging\n\tDigging\n)\n\nconst (\n\tSnifferIdling SnifferState = iota\n\tSnifferFeelingHappy\n\tSnifferScenting\n\tSnifferSniffing\n\tSnifferSearching\n\tSnifferDigging\n\tSnifferRising\n)\n\nconst (\n\tVillagerTypeDesert = iota\n\tVillagerTypeJungle\n\tVillagerTypePlains\n\tVillagerTypeSavanna\n\tVillagerTypeSnow\n\tVillagerTypeSwamp\n\tVillagerTypeTaiga\n)\n\nconst (\n\tVillagerProfessionNone = iota\n\tVillagerProfessionArmorer\n\tVillagerProfessionButcher\n\tVillagerProfessionCartographer\n\tVillagerProfessionCleric\n\tVillagerProfessionFarmer\n\tVillagerProfessionFisherman\n\tVillagerProfessionFletcher\n\tVillagerProfessionLeatherworker\n\tVillagerProfessionLibrarian\n\tVillagerProfessionMason // hi mason\n\tVillagerProfessionNitwit\n\tVillagerProfessionShepherd\n\tVillagerProfessionToolsmith\n\tVillagerProfessionWeaponsmith\n)\n\nconst (\n\tIsOnFire = 1 << iota\n\tIsCrouching\n\tIsRiding_unused\n\tIsSprinting\n\tIsSwimming\n\tIsInvisible\n\tHasGlowingEffect\n\tIsFlyingWithElytra\n)\n\nconst (\n\tIsHandActive = 1 << iota\n\tIsOffhandActive\n\tIsInRiptideSpinAttack\n)\n\n// base state\nconst (\n\t// Byte (0)\n\tBaseIndex = iota\n\t// VarInt (1)\n\tAirTicksIndex\n\t// OptionalTextComponent (6)\n\tCustomNameIndex\n\t// Boolean (8)\n\tIsCustomNameVisibleIndex\n\t// Boolean (8)\n\tIsSilentIndex\n\t// Boolean (8)\n\tHasNoGravityIndex\n\t// Pose (21)\n\tPoseIndex\n\t// VarInt (1)\n\tTicksFrozenInPowderedSnowIndex\n)\n\n// living state extends state\nconst (\n\t// Byte (0)\n\tLivingEntityHandstatesIndex = iota + 8\n\t// Float (3)\n\tLivingEntityHealthIndex\n\t// VarInt (1)\n\tLivingEntityPotionEffectColorIndex\n\t// Boolean (8)\n\tLivingEntityPotionEffectAmbientIndex\n\t// VarInt (1)\n\tLivingEntityArrowCountIndex\n\t// VarInt (1)\n\tLivingEntityBeeStingersCountIndex\n\t// Optional Position (11)\n\tLivingEntitySleepingBedPositionIndex\n)\n\n// player extends living state\nconst (\n\t// Float (3)\n\tPlayerAdditionalHeartsIndex = iota + 15\n\t// VarInt (1)\n\tPlayerScoreIndex\n\t// Byte (0)\n\tPlayerDisplayedSkinPartsIndex\n\t// Byte (0)\n\tPlayerMainHandIndex\n\t// NBT (16)\n\tLeftShoulderEntityData\n\t// NBT (16)\n\tRightShoulderEntityData\n)\n"
  },
  {
    "path": "protocol/net/metadata/new.go",
    "content": "package metadata\n\n// Player returns the default player metadata object\nfunc Player(health float32) Metadata {\n\treturn Metadata{\n\t\t// Entity\n\t\tBaseIndex:                      Byte(0),\n\t\tAirTicksIndex:                  VarInt(300),\n\t\tCustomNameIndex:                OptionalTextComponent(nil),\n\t\tIsCustomNameVisibleIndex:       Boolean(false),\n\t\tIsSilentIndex:                  Boolean(false),\n\t\tHasNoGravityIndex:              Boolean(false),\n\t\tPoseIndex:                      Standing,\n\t\tTicksFrozenInPowderedSnowIndex: VarInt(0),\n\t\t// Living Entity extends Entity\n\t\tLivingEntityHandstatesIndex: Byte(0),\n\t\tLivingEntityHealthIndex:     Float(health), // this one is actually stored in data (others are too but arent used yet)\n\t\t//LivingEntityPotionEffectColorIndex:   VarInt(0),\n\t\tLivingEntityPotionEffectAmbientIndex: Boolean(false),\n\t\tLivingEntityArrowCountIndex:          VarInt(0),\n\t\tLivingEntityBeeStingersCountIndex:    VarInt(0),\n\t\tLivingEntitySleepingBedPositionIndex: OptionalPosition(nil),\n\t\t// Player extends Living Entity\n\t\tPlayerAdditionalHeartsIndex:   Float(0),\n\t\tPlayerScoreIndex:              VarInt(0),\n\t\tPlayerDisplayedSkinPartsIndex: Byte(0),\n\t\tPlayerMainHandIndex:           Byte(1),\n\t}\n}\n"
  },
  {
    "path": "protocol/net/packet/configuration/clientInfo.go",
    "content": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nconst (\r\n\tChatModeEnabled = iota\r\n\tChatModeCommandsOnly\r\n\tChatModeHidden\r\n)\r\n\r\nconst (\r\n\tCapeEnabled = 1 << iota\r\n\tJacketEnabled\r\n\tLeftSleeveEnabled\r\n\tRightSleeveEnabled\r\n\tLeftPantsLegEnabled\r\n\tRightPantsLegEnabled\r\n\tHatEnabled\r\n)\r\n\r\nconst (\r\n\tMainHandLeft = iota\r\n\tMainHandRight\r\n)\r\n\r\n// serverbound\r\nconst PacketIdClientInformation = 0x00\r\n\r\ntype ClientInformation struct {\r\n\tLocale              string\r\n\tViewDistance        int8\r\n\tChatMode            int32\r\n\tChatColors          bool\r\n\tDisplayedSkinParts  byte\r\n\tMainHand            int32\r\n\tEnableTextFiltering bool\r\n\tAllowServerListing  bool\r\n}\r\n\r\nfunc (ClientInformation) ID() int32 {\r\n\treturn 0x00\r\n}\r\n\r\nfunc (c *ClientInformation) Encode(w encoding.Writer) error {\r\n\tif err := w.String(c.Locale); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Byte(c.ViewDistance); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(c.ChatMode); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(c.ChatColors); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ubyte(c.DisplayedSkinParts); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(c.MainHand); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(c.EnableTextFiltering); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(c.AllowServerListing)\r\n}\r\n\r\nfunc (c *ClientInformation) Decode(r encoding.Reader) error {\r\n\tif err := r.String(&c.Locale); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Byte(&c.ViewDistance); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif _, err := r.VarInt(&c.ChatMode); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Bool(&c.ChatColors); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ubyte(&c.DisplayedSkinParts); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif _, err := r.VarInt(&c.MainHand); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Bool(&c.EnableTextFiltering); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Bool(&c.AllowServerListing)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/configuration/cookie.go",
    "content": "package configuration\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet/login\"\r\n\r\n//clientbound\r\nconst PacketIdCookieRequest = 0x00\r\n\r\ntype CookieRequest struct{ login.CookieRequest }\r\n\r\nfunc (CookieRequest) ID() int32 {\r\n\treturn 0x00\r\n}\r\n\r\n//serverbound\r\nconst PacketIdCookieResponse = 0x01\r\n\r\ntype CookieResponse struct{ login.CookieResponse }\r\n\r\nfunc (CookieResponse) ID() int32 {\r\n\treturn 0x01\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/configuration/disconnect.go",
    "content": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdDisconnect = 0x02\r\n\r\ntype Disconnect struct {\r\n\tReason text.TextComponent\r\n}\r\n\r\nfunc (Disconnect) ID() int32 {\r\n\treturn 0x02\r\n}\r\n\r\nfunc (d *Disconnect) Encode(w encoding.Writer) error {\r\n\treturn w.TextComponent(d.Reason)\r\n}\r\n\r\nfunc (d *Disconnect) Decode(r encoding.Reader) error {\r\n\treturn r.TextComponent(&d.Reason)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/configuration/finish.go",
    "content": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\r\n)\r\n\r\nconst (\r\n\t//clientbound\r\n\tPacketIdFinishConfiguration = 0x03\r\n\t//serverbound\r\n\tPacketIdAcknowledgeFinishConfiguration\r\n)\r\n\r\ntype FinishConfiguration struct {\r\n\tpacket.EmptyPacket\r\n}\r\n\r\nfunc (FinishConfiguration) ID() int32 {\r\n\treturn 0x03\r\n}\r\n\r\ntype AcknowledgeFinishConfiguration = FinishConfiguration\r\n"
  },
  {
    "path": "protocol/net/packet/configuration/keepAlive.go",
    "content": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// two-sided\r\nconst PacketIdKeepAlive = 0x04\r\n\r\ntype KeepAlive struct {\r\n\tKeepAliveID int64\r\n}\r\n\r\nfunc (KeepAlive) ID() int32 {\r\n\treturn 0x04\r\n}\r\n\r\nfunc (k *KeepAlive) Encode(w encoding.Writer) error {\r\n\treturn w.Long(k.KeepAliveID)\r\n}\r\n\r\nfunc (k *KeepAlive) Decode(r encoding.Reader) error {\r\n\treturn r.Long(&k.KeepAliveID)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/configuration/ping.go",
    "content": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// two-sided\r\nconst PacketIdPing = 0x05\r\n\r\ntype Ping struct {\r\n\tID_ int32\r\n}\r\n\r\nfunc (Ping) ID() int32 {\r\n\treturn 0x05\r\n}\r\n\r\nfunc (p *Ping) Encode(w encoding.Writer) error {\r\n\treturn w.Int(p.ID_)\r\n}\r\n\r\nfunc (p *Ping) Decode(r encoding.Reader) error {\r\n\treturn r.Int(&p.ID_)\r\n}\r\n\r\ntype Pong = Ping\r\n"
  },
  {
    "path": "protocol/net/packet/configuration/plugin.go",
    "content": "package configuration\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// two-sided\r\nconst PacketIdPluginMessage = 0x01\r\n\r\ntype ClientboundPluginMessage struct {\r\n\tChannel string\r\n\tData    []byte\r\n}\r\n\r\nfunc (ClientboundPluginMessage) ID() int32 {\r\n\treturn 0x01\r\n}\r\n\r\nfunc (c *ClientboundPluginMessage) Encode(w encoding.Writer) error {\r\n\tif err := w.Identifier(c.Channel); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.FixedByteArray(c.Data)\r\n}\r\n\r\nfunc (c *ClientboundPluginMessage) Decode(r encoding.Reader) error {\r\n\tif err := r.Identifier(&c.Channel); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.ReadAll(&c.Data)\r\n}\r\n\r\ntype ServerboundPluginMessage struct {\r\n\tClientboundPluginMessage\r\n}\r\n\r\nfunc (ServerboundPluginMessage) ID() int32 {\r\n\treturn 0x02\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/configuration/registryData.go",
    "content": "package configuration\r\n\r\nimport (\r\n\t\"reflect\"\r\n\t\"sync\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/registry\"\r\n)\r\n\r\nvar RegistryPackets = make([]*RegistryData, 0, len(registry.Registries))\r\n\r\nfunc init() {\r\n\tfor key, registry := range registry.Registries {\r\n\t\tRegistryPackets = append(RegistryPackets, &RegistryData{\r\n\t\t\tRegistryId: key,\r\n\t\t\tRegistry:   registry,\r\n\t\t})\r\n\t}\r\n}\r\n\r\nvar RegistryPacketsMutex sync.Mutex\r\n\r\n// clientbound\r\nconst PacketIdRegistryData = 0x07\r\n\r\ntype RegistryData struct {\r\n\tRegistryId string\r\n\tRegistry   any\r\n\r\n\tIndexes []string\r\n}\r\n\r\nfunc (RegistryData) ID() int32 {\r\n\treturn 0x07\r\n}\r\n\r\nfunc (r *RegistryData) Encode(w encoding.Writer) error {\r\n\tif err := w.Identifier(r.RegistryId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\treg := reflect.ValueOf(r.Registry)\r\n\r\n\tswitch reg.Kind() {\r\n\tcase reflect.Map:\r\n\t\tr.Indexes = make([]string, 0, reg.Len())\r\n\t\tif err := w.VarInt(int32(reg.Len())); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tfor _, key := range reg.MapKeys() {\r\n\t\t\tv := reg.MapIndex(key).Interface()\r\n\r\n\t\t\tif err := w.Identifier(key.String()); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Bool(true); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif err := w.NBT(v); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tr.Indexes = append(r.Indexes, key.String())\r\n\t\t}\r\n\tcase reflect.Struct:\r\n\t\tr.Indexes = make([]string, 0, reg.NumField())\r\n\r\n\t\tif err := w.VarInt(int32(reg.NumField())); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tfor i := 0; i < reg.NumField(); i++ {\r\n\t\t\ttf := reg.Type().Field(i)\r\n\t\t\tv := reg.Field(i).Interface()\r\n\t\t\tnbtname := tf.Tag.Get(\"nbt\")\r\n\r\n\t\t\tif err := w.Identifier(nbtname); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Bool(true); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\r\n\t\t\tif err := w.NBT(v); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tr.Indexes = append(r.Indexes, nbtname)\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (d *RegistryData) Decode(r encoding.Reader) error {\r\n\treturn nil\r\n\t//TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/configuration/resetChat.go",
    "content": "package configuration\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\r\n\r\n//clientbound\r\nconst PacketIdResetChat = 0x06\r\n\r\ntype ResetChat struct{ packet.EmptyPacket }\r\n\r\nfunc (ResetChat) ID() int32 {\r\n\treturn 0x06\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/handshake/handshake.go",
    "content": "package handshake\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nconst (\r\n\tStatus = iota + 1\r\n\tLogin\r\n\tTransfer\r\n)\r\n\r\n// serverbound\r\nconst PacketIdHandshaking = 0x00\r\n\r\ntype Handshaking struct {\r\n\tProtocolVersion int32\r\n\tServerAddress   string\r\n\tServerPort      uint16\r\n\tNextState       int32\r\n}\r\n\r\nfunc (Handshaking) ID() int32 {\r\n\treturn 0x00\r\n}\r\n\r\nfunc (h *Handshaking) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&h.ProtocolVersion); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.String(&h.ServerAddress); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ushort(&h.ServerPort); err != nil {\r\n\t\treturn err\r\n\t}\r\n\t_, err := r.VarInt(&h.NextState)\r\n\treturn err\r\n}\r\n\r\nfunc (h Handshaking) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(h.ProtocolVersion); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.String(h.ServerAddress); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ushort(h.ServerPort); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.VarInt(h.NextState)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/login/cookie.go",
    "content": "package login\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdCookieRequest = 0x05\r\n\r\ntype CookieRequest struct {\r\n\tKey string\r\n}\r\n\r\nfunc (CookieRequest) ID() int32 {\r\n\treturn 0x05\r\n}\r\n\r\nfunc (s *CookieRequest) Encode(w encoding.Writer) error {\r\n\treturn w.String(s.Key)\r\n}\r\n\r\nfunc (s *CookieRequest) Decode(r encoding.Reader) error {\r\n\treturn r.String(&s.Key)\r\n}\r\n\r\ntype CookieResponse struct {\r\n\tKey     string\r\n\tFound   bool\r\n\tPayload []byte\r\n}\r\n\r\nfunc (CookieResponse) ID() int32 {\r\n\treturn 0x04\r\n}\r\n\r\nfunc (s *CookieResponse) Encode(w encoding.Writer) error {\r\n\tif err := w.String(s.Key); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(s.Found); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif s.Found {\r\n\t\treturn w.ByteArray(s.Payload)\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (s *CookieResponse) Decode(r encoding.Reader) error {\r\n\tif err := r.String(&s.Key); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Bool(&s.Found); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif s.Found {\r\n\t\treturn r.ByteArray(&s.Payload)\r\n\t}\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/login/disconnect.go",
    "content": "package login\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdDisconnect = 0x00\r\n\r\ntype Disconnect struct {\r\n\tReason text.TextComponent\r\n}\r\n\r\nfunc (Disconnect) ID() int32 {\r\n\treturn 0x00\r\n}\r\n\r\nfunc (d *Disconnect) Encode(w encoding.Writer) error {\r\n\treturn w.JSONTextComponent(d.Reason)\r\n}\r\n\r\nfunc (d *Disconnect) Decode(r encoding.Reader) error {\r\n\treturn r.JSONTextComponent(&d.Reason)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/login/encryption.go",
    "content": "package login\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// two-sided\r\nconst PacketIdEncryption = 0x01\r\n\r\ntype EncryptionRequest struct {\r\n\tPublicKey          []byte\r\n\tVerifyToken        []byte\r\n\tShouldAuthenticate bool\r\n}\r\n\r\nfunc (EncryptionRequest) ID() int32 {\r\n\treturn 0x01\r\n}\r\n\r\nfunc (e *EncryptionRequest) Encode(w encoding.Writer) error {\r\n\tif err := w.String(\"\"); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.ByteArray(e.PublicKey); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.ByteArray(e.VerifyToken); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(e.ShouldAuthenticate)\r\n}\r\n\r\nfunc (e *EncryptionRequest) Decode(r encoding.Reader) error {\r\n\tvar s string\r\n\tif err := r.String(&s); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.ByteArray(&e.PublicKey); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.ByteArray(&e.VerifyToken); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Bool(&e.ShouldAuthenticate)\r\n}\r\n\r\ntype EncryptionResponse struct {\r\n\tSharedSecret []byte\r\n\tVerifyToken  []byte\r\n}\r\n\r\nfunc (EncryptionResponse) ID() int32 {\r\n\treturn 0x01\r\n}\r\n\r\nfunc (e *EncryptionResponse) Encode(w encoding.Writer) error {\r\n\tif err := w.ByteArray(e.SharedSecret); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.ByteArray(e.VerifyToken)\r\n}\r\n\r\nfunc (e *EncryptionResponse) Decode(r encoding.Reader) error {\r\n\tif err := r.ByteArray(&e.SharedSecret); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.ByteArray(&e.VerifyToken)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/login/loginStart.go",
    "content": "package login\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdLoginStart = 0x00\r\n\r\ntype LoginStart struct {\r\n\tName       string\r\n\tPlayerUUID uuid.UUID\r\n}\r\n\r\nfunc (LoginStart) ID() int32 {\r\n\treturn 0x00\r\n}\r\n\r\nfunc (l *LoginStart) Encode(w encoding.Writer) error {\r\n\tif err := w.String(l.Name); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.UUID(l.PlayerUUID)\r\n}\r\n\r\nfunc (l *LoginStart) Decode(r encoding.Reader) error {\r\n\tif err := r.String(&l.Name); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.UUID(&l.PlayerUUID)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/login/loginSuccess.go",
    "content": "package login\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\ntype Textures struct {\r\n\tTimestamp         int64  `json:\"timestamp\"`\r\n\tProfileId         string `json:\"profileId\"`\r\n\tProfileName       string `json:\"profileName\"`\r\n\tSignatureRequired bool   `json:\"signatureRequired\"`\r\n\tTextures          struct {\r\n\t\tSkin struct {\r\n\t\t\tURL      string `json:\"url\"`\r\n\t\t\tMetadata struct {\r\n\t\t\t\tModel string `json:\"model\"`\r\n\t\t\t} `json:\"metadata\"`\r\n\t\t} `json:\"SKIN\"`\r\n\t\tCape struct {\r\n\t\t\tURL string `json:\"url\"`\r\n\t\t} `json:\"CAPE\"`\r\n\t} `json:\"textures\"`\r\n}\r\n\r\ntype Property struct {\r\n\tName      string\r\n\tValue     string\r\n\tSignature string\r\n}\r\n\r\n// clientbound\r\nconst PacketIdLoginSuccess = 0x02\r\n\r\ntype LoginSuccess struct {\r\n\tUUID       uuid.UUID\r\n\tUsername   string\r\n\tProperties []Property\r\n}\r\n\r\nfunc (LoginSuccess) ID() int32 {\r\n\treturn PacketIdLoginSuccess\r\n}\r\n\r\nfunc (l *LoginSuccess) Encode(w encoding.Writer) error {\r\n\tif err := w.UUID(l.UUID); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.String(l.Username); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(int32(len(l.Properties))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor _, property := range l.Properties {\r\n\t\tif err := w.String(property.Name); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.String(property.Value); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.Bool(property.Signature != \"\"); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif property.Signature != \"\" {\r\n\t\t\tif err := w.String(property.Signature); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tw.Bool(true) //TODO:remove for 1.21.3\r\n\r\n\treturn nil\r\n}\r\n\r\nconst PacketIdLoginAcknowledged = 0x03\r\n\r\ntype LoginAcknowledged struct{}\r\n\r\nfunc (LoginAcknowledged) ID() int32 {\r\n\treturn PacketIdLoginAcknowledged\r\n}\r\n\r\nfunc (*LoginAcknowledged) Decode(encoding.Reader) error {\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/login/plugin.go",
    "content": "package login\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdLoginPluginRequest = 0x04\r\n\r\ntype LoginPluginRequest struct {\r\n\tMessageID int32\r\n\tChannel   string\r\n\tData      []byte\r\n}\r\n\r\nfunc (LoginPluginRequest) ID() int32 {\r\n\treturn 0x04\r\n}\r\n\r\nfunc (l *LoginPluginRequest) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(l.MessageID); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Identifier(l.Channel); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.FixedByteArray(l.Data)\r\n}\r\n\r\nfunc (l *LoginPluginRequest) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&l.MessageID); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Identifier(&l.Channel); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.ReadAll(&l.Data)\r\n}\r\n\r\n// serverbound\r\nconst PacketIdLoginPluginResponse = 0x02\r\n\r\ntype LoginPluginResponse struct {\r\n\tMessageID int32\r\n\tSucessful bool\r\n\tData      []byte\r\n}\r\n\r\nfunc (LoginPluginResponse) ID() int32 {\r\n\treturn 0x02\r\n}\r\n\r\nfunc (l *LoginPluginResponse) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(l.MessageID); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(l.Sucessful); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif l.Sucessful {\r\n\t\tif err := w.FixedByteArray(l.Data); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (l *LoginPluginResponse) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&l.MessageID); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Bool(&l.Sucessful); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif l.Sucessful {\r\n\t\tif err := r.ReadAll(&l.Data); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/login/setCompression.go",
    "content": "package login\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSetCompression = 0x03\r\n\r\ntype SetCompression struct {\r\n\tThreshold int32\r\n}\r\n\r\nfunc (SetCompression) ID() int32 {\r\n\treturn 0x03\r\n}\r\n\r\nfunc (s *SetCompression) Encode(w encoding.Writer) error {\r\n\treturn w.VarInt(s.Threshold)\r\n}\r\n\r\nfunc (s *SetCompression) Decode(r encoding.Reader) error {\r\n\t_, err := r.VarInt(&s.Threshold)\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/packet.go",
    "content": "package packet\n\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\n\n// Encodeable is a clientbound packet\ntype Encodeable interface {\n\tID() int32\n\tEncode(encoding.Writer) error\n}\n\n// Decodeable is a serverbound packet\ntype Decodeable interface {\n\tID() int32\n\tDecode(encoding.Reader) error\n}\n\n// Error is a dummy decodeable packet that is simply an error\ntype Error struct {\n\tError error\n}\n\nfunc (Error) ID() int32                    { return -1 }\nfunc (Error) Decode(encoding.Reader) error { return nil }\n\nvar _ Decodeable = (*Error)(nil)\n\ntype UnknownPacket struct {\n\tId      int32\n\tLength  int32\n\tPayload encoding.Reader\n}\n\nfunc (u UnknownPacket) ID() int32 {\n\treturn u.Id\n}\n\nfunc (u UnknownPacket) Decode(encoding.Reader) error {\n\treturn nil\n}\n\nfunc (u UnknownPacket) Encode(encoding.Writer) error {\n\treturn nil\n}\n\ntype EmptyPacket struct {\n}\n\nfunc (pk EmptyPacket) Encode(encoding.Writer) error {\n\treturn nil\n}\n\nfunc (pk EmptyPacket) Decode(encoding.Reader) error {\n\treturn nil\n}\n"
  },
  {
    "path": "protocol/net/packet/play/acknowledgeBlockChange.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdAcknowledgeBlockChange = 0x05\r\n\r\ntype AcknowledgeBlockChange struct {\r\n\tSequenceId int32\r\n}\r\n\r\nfunc (AcknowledgeBlockChange) ID() int32 {\r\n\treturn PacketIdAcknowledgeBlockChange\r\n}\r\n\r\nfunc (b *AcknowledgeBlockChange) Encode(w encoding.Writer) error {\r\n\treturn w.VarInt(b.SequenceId)\r\n}\r\n\r\nfunc (b *AcknowledgeBlockChange) Decode(r encoding.Reader) error {\r\n\t_, err := r.VarInt(&b.SequenceId)\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/blockAction.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdBlockAction = 0x08\r\n\r\ntype BlockAction struct {\r\n\tX, Y, Z                   int32\r\n\tActionId, ActionParameter byte\r\n\tBlockType                 int32\r\n}\r\n\r\nfunc (BlockAction) ID() int32 {\r\n\treturn PacketIdBlockAction\r\n}\r\n\r\nfunc (b *BlockAction) Encode(w encoding.Writer) error {\r\n\tif err := w.Position(b.X, b.Y, b.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ubyte(b.ActionId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ubyte(b.ActionParameter); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.VarInt(b.BlockType)\r\n}\r\n\r\nfunc (b *BlockAction) Decode(r encoding.Reader) error {\r\n\tif err := r.Position(&b.X, &b.Y, &b.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ubyte(&b.ActionId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ubyte(&b.ActionParameter); err != nil {\r\n\t\treturn err\r\n\t}\r\n\t_, err := r.VarInt(&b.BlockType)\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/blockEntityData.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/nbt\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdBlockEntityData = 0x07\r\n\r\ntype BlockEntityData struct {\r\n\tX, Y, Z int32\r\n\tType    int32\r\n\tData    any\r\n}\r\n\r\nfunc (BlockEntityData) ID() int32 {\r\n\treturn PacketIdBlockEntityData\r\n}\r\n\r\nfunc (b *BlockEntityData) Encode(w encoding.Writer) error {\r\n\tif err := w.Position(b.X, b.Y, b.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(b.Type); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif b.Data == nil {\r\n\t\treturn w.Byte(nbt.End)\r\n\t}\r\n\treturn w.NBT(b.Data)\r\n}\r\n\r\nfunc (b *BlockEntityData) Decode(r encoding.Reader) error {\r\n\treturn nil //TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/blockUpdate.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdBlockUpdate = 0x09\r\n\r\ntype BlockUpdate struct {\r\n\tX, Y, Z int32\r\n\tBlockId int32\r\n}\r\n\r\nfunc (BlockUpdate) ID() int32 {\r\n\treturn PacketIdBlockUpdate\r\n}\r\n\r\nfunc (b *BlockUpdate) Encode(w encoding.Writer) error {\r\n\tif err := w.Position(b.X, b.Y, b.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.VarInt(b.BlockId)\r\n}\r\n\r\nfunc (b *BlockUpdate) Decode(r encoding.Reader) error {\r\n\tif err := r.Position(&b.X, &b.Y, &b.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\t_, err := r.VarInt(&b.BlockId)\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/bundleDelimiter.go",
    "content": "package play\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\r\n\r\n// clientbound\r\nconst PacketIdBundleDelimiter = 0x00\r\n\r\ntype BundleDelimiter struct{ packet.EmptyPacket }\r\n\r\nfunc (BundleDelimiter) ID() int32 {\r\n\treturn PacketIdBundleDelimiter\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/changeDifficulty.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdChangeDifficulty = 0x0B\r\n\r\ntype ChangeDifficulty struct {\r\n\tDifficulty byte\r\n\tLocked     bool\r\n}\r\n\r\nfunc (ChangeDifficulty) ID() int32 {\r\n\treturn PacketIdChangeDifficulty\r\n}\r\n\r\nfunc (c *ChangeDifficulty) Encode(w encoding.Writer) error {\r\n\tif err := w.Ubyte(c.Difficulty); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(c.Locked)\r\n}\r\n\r\nfunc (c *ChangeDifficulty) Decode(r encoding.Reader) error {\r\n\tif err := r.Ubyte(&c.Difficulty); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Bool(&c.Locked)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/chatCommand.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdChatCommand = 0x04\r\n\r\ntype ChatCommand struct {\r\n\tCommand string\r\n}\r\n\r\nfunc (ChatCommand) ID() int32 {\r\n\treturn PacketIdChatCommand\r\n}\r\n\r\nfunc (c *ChatCommand) Encode(w encoding.Writer) error {\r\n\treturn w.String(c.Command)\r\n}\r\n\r\nfunc (c *ChatCommand) Decode(r encoding.Reader) error {\r\n\treturn r.String(&c.Command)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/chatMessage.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdChatMessage = 0x06\r\n\r\ntype ChatMessage struct {\r\n\tMessage         string\r\n\tTimestamp, Salt int64\r\n\r\n\tHasSignature bool\r\n\tSignature    [256]byte\r\n\r\n\tMessageCount int32\r\n\tAcknowledged encoding.FixedBitSet\r\n}\r\n\r\nfunc (ChatMessage) ID() int32 {\r\n\treturn 0x06\r\n}\r\n\r\nfunc (c *ChatMessage) Encode(w encoding.Writer) error {\r\n\tif err := w.String(c.Message); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Long(c.Timestamp); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Long(c.Salt); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(c.HasSignature); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif c.HasSignature {\r\n\t\tif err := w.FixedByteArray(c.Signature[:]); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif err := w.VarInt(c.MessageCount); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.FixedBitSet(c.Acknowledged)\r\n}\r\n\r\nfunc (c *ChatMessage) Decode(r encoding.Reader) error {\r\n\tif err := r.String(&c.Message); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Long(&c.Timestamp); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Long(&c.Salt); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Bool(&c.HasSignature); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif c.HasSignature {\r\n\t\tif err := r.FixedByteArray(c.Signature[:]); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif _, err := r.VarInt(&c.MessageCount); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.FixedBitSet(&c.Acknowledged, 20)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/chunkBatch.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdChunkBatchFinished = 0x0C\r\n\r\ntype ChunkBatchFinished struct {\r\n\tBatchSize int32\r\n}\r\n\r\nfunc (ChunkBatchFinished) ID() int32 {\r\n\treturn PacketIdChunkBatchFinished\r\n}\r\n\r\nfunc (c *ChunkBatchFinished) Encode(w encoding.Writer) error {\r\n\treturn w.VarInt(c.BatchSize)\r\n}\r\n\r\nfunc (c *ChunkBatchFinished) Decode(r encoding.Reader) error {\r\n\t_, err := r.VarInt(&c.BatchSize)\r\n\treturn err\r\n}\r\n\r\n// clientbound\r\nconst PacketIdChunkBatchStart = 0x0D\r\n\r\ntype ChunkBatchStart struct{ packet.EmptyPacket }\r\n\r\nfunc (ChunkBatchStart) ID() int32 {\r\n\treturn PacketIdChunkBatchStart\r\n}\r\n\r\n// serverbound\r\nconst PacketIdChunkBatchReceived = 0x08\r\n\r\ntype ChunkBatchReceived struct {\r\n\tChunksPerTick float32\r\n}\r\n\r\nfunc (ChunkBatchReceived) ID() int32 {\r\n\treturn PacketIdChunkBatchReceived\r\n}\r\n\r\nfunc (c *ChunkBatchReceived) Encode(w encoding.Writer) error {\r\n\treturn w.Float(c.ChunksPerTick)\r\n}\r\n\r\nfunc (c *ChunkBatchReceived) Decode(r encoding.Reader) error {\r\n\treturn r.Float(&c.ChunksPerTick)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/chunkData.go",
    "content": "package play\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\n)\n\ntype BlockEntity struct {\n\tX, Y, Z int32\n\tType    int32\n\tData    any\n}\n\n// clientbound\nconst PacketIdChunkDataUpdateLight = 0x27\n\ntype Heightmaps struct {\n\tMOTION_BLOCKING, WORLD_SURFACE []int64\n}\n\ntype ChunkDataUpdateLight struct {\n\tCX, CZ                                                               int32\n\tHeightmaps                                                           Heightmaps\n\tData                                                                 *bytes.Buffer //[]byte\n\tBlockEntities                                                        []BlockEntity\n\tSkyLightMask, BlockLightMask, EmptySkyLightMask, EmptyBlockLightMask encoding.BitSet\n\tSkyLightArrays                                                       [][]byte\n\tBlockLightArrays                                                     [][]byte\n}\n\nfunc (ChunkDataUpdateLight) ID() int32 {\n\treturn 0x27\n}\n\nfunc (c *ChunkDataUpdateLight) Encode(w encoding.Writer) error {\n\tif err := w.Int(c.CX); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Int(c.CZ); err != nil {\n\t\treturn err\n\t}\n\tif err := w.NBT(c.Heightmaps); err != nil {\n\t\treturn err\n\t}\n\tif err := w.VarInt(int32(c.Data.Len())); err != nil {\n\t\treturn err\n\t}\n\tif _, err := c.Data.WriteTo(w); err != nil {\n\t\treturn err\n\t}\n\tif err := w.VarInt(int32(len(c.BlockEntities))); err != nil {\n\t\treturn err\n\t}\n\tfor _, blockEntity := range c.BlockEntities {\n\t\tif err := w.Ubyte(((byte(blockEntity.X) & 0x0f) << 4) | (byte(blockEntity.Z) & 0x0f)); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := w.Short(int16(blockEntity.Y)); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := w.VarInt(blockEntity.Type); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := w.NBT(blockEntity.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := w.BitSet(c.SkyLightMask); err != nil {\n\t\treturn err\n\t}\n\tif err := w.BitSet(c.BlockLightMask); err != nil {\n\t\treturn err\n\t}\n\tif err := w.BitSet(c.EmptySkyLightMask); err != nil {\n\t\treturn err\n\t}\n\tif err := w.BitSet(c.EmptyBlockLightMask); err != nil {\n\t\treturn err\n\t}\n\n\tif err := w.VarInt(int32(len(c.SkyLightArrays))); err != nil {\n\t\treturn err\n\t}\n\tfor _, array := range c.SkyLightArrays {\n\t\tif err := w.ByteArray(array); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := w.VarInt(int32(len(c.BlockLightArrays))); err != nil {\n\t\treturn err\n\t}\n\tfor _, array := range c.BlockLightArrays {\n\t\tif err := w.ByteArray(array); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (c *ChunkDataUpdateLight) Decode(encoding.Reader) error {\n\treturn nil\n}\n"
  },
  {
    "path": "protocol/net/packet/play/clickContainer.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/slot\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdClickContainer = 0x0E\r\n\r\ntype ClickContainer struct {\r\n\tWindowId     byte\r\n\tState        int32\r\n\tSlot         int16\r\n\tButton       int8\r\n\tMode         int32\r\n\tChangedSlots []ChangedSlot\r\n\tCarriedItem  slot.Slot\r\n}\r\n\r\ntype ChangedSlot struct {\r\n\tslot.Slot\r\n\tNum int16\r\n}\r\n\r\nfunc (ClickContainer) ID() int32 {\r\n\treturn PacketIdClickContainer\r\n}\r\n\r\nfunc (c *ClickContainer) Decode(r encoding.Reader) error {\r\n\tif err := r.Ubyte(&c.WindowId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif _, err := r.VarInt(&c.State); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&c.Slot); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Byte(&c.Button); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif _, err := r.VarInt(&c.Mode); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tvar len int32\r\n\tif _, err := r.VarInt(&len); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tc.ChangedSlots = make([]ChangedSlot, len)\r\n\r\n\tfor i := int32(0); i < len; i++ {\r\n\t\tif err := r.Short(&c.ChangedSlots[i].Num); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := c.ChangedSlots[i].Decode(r); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\treturn c.CarriedItem.Decode(r)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/clientInfo.go",
    "content": "package play\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet/configuration\"\r\n\r\n//serverbound\r\nconst PacketIdClientInformation = 0x0A\r\n\r\ntype ClientInformation struct {\r\n\tconfiguration.ClientInformation\r\n}\r\n\r\nfunc (ClientInformation) ID() int32 {\r\n\treturn 0x0A\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/closeContainer.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdCloseContainer = 0x0F\r\n\r\ntype CloseContainer struct {\r\n\tWindowId byte\r\n}\r\n\r\nfunc (CloseContainer) ID() int32 {\r\n\treturn PacketIdCloseContainer\r\n}\r\n\r\nfunc (c *CloseContainer) Encode(w encoding.Writer) error {\r\n\treturn w.Ubyte(c.WindowId)\r\n}\r\n\r\nfunc (c *CloseContainer) Decode(r encoding.Reader) error {\r\n\treturn r.Ubyte(&c.WindowId)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/commands.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"fmt\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\ntype Node struct {\r\n\tFlags        int8\r\n\tChildren     []int32\r\n\tRedirectNode int32\r\n\tName         string\r\n\tParserId     int32\r\n\r\n\t/*\r\n\t\tfloat64 = Double\r\n\t\tfloat32 = Float\r\n\t\tint8 = Byte\r\n\t\tint32 = Int\r\n\t\tint64 = Long\r\n\t\tstring = Identifier\r\n\t\tint = VarInt\r\n\t*/\r\n\tProperties      []any\r\n\tSuggestionsType string\r\n}\r\n\r\nconst NodeRoot = iota\r\n\r\nconst (\r\n\tNodeLiteral = 1 << iota\r\n\tNodeArgument\r\n\r\n\tNodeExecutable\r\n\tNodeRedirect\r\n\tNodeHasSuggestionsType\r\n)\r\n\r\nconst NodeType = 0x03\r\n\r\n// clientbound\r\nconst PacketIdCommands = 0x11\r\n\r\ntype Commands struct {\r\n\tNodes     []Node\r\n\tRootIndex int32\r\n}\r\n\r\nfunc (Commands) ID() int32 {\r\n\treturn PacketIdCommands\r\n}\r\n\r\nfunc (c *Commands) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(int32(len(c.Nodes))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor _, node := range c.Nodes {\r\n\t\tif err := c.encodeNode(w, node); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn w.VarInt(c.RootIndex)\r\n}\r\n\r\nfunc (c *Commands) encodeNode(w encoding.Writer, node Node) error {\r\n\tif err := w.Byte(node.Flags); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(int32(len(node.Children))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor _, child := range node.Children {\r\n\t\tif err := w.VarInt(child); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif node.Flags&NodeRedirect != 0 {\r\n\t\tif err := w.VarInt(node.RedirectNode); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif node.Flags&NodeType > 0 {\r\n\t\tif err := w.String(node.Name); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif node.Flags&NodeArgument != 0 {\r\n\t\tif err := w.VarInt(node.ParserId); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif node.Flags&NodeArgument != 0 {\r\n\t\tfor _, p := range node.Properties {\r\n\t\t\tswitch prop := p.(type) {\r\n\t\t\tcase float64:\r\n\t\t\t\tif err := w.Double(prop); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase float32:\r\n\t\t\t\tif err := w.Float(prop); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase int8:\r\n\t\t\t\tif err := w.Byte(prop); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase int32:\r\n\t\t\t\tif err := w.Int(prop); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase int64:\r\n\t\t\t\tif err := w.Long(prop); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase string:\r\n\t\t\t\tif err := w.Identifier(prop); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tcase int:\r\n\t\t\t\tif err := w.VarInt(int32(prop)); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\tdefault:\r\n\t\t\t\treturn fmt.Errorf(\"unrecognized node property type %T\", p)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif node.Flags&NodeHasSuggestionsType != 0 {\r\n\t\tif err := w.Identifier(node.SuggestionsType); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/confirmTeleport.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdConfirmTeleportation = 0x00\r\n\r\ntype ConfirmTeleportation struct {\r\n\tTeleportId int32\r\n}\r\n\r\nfunc (ConfirmTeleportation) ID() int32 {\r\n\treturn PacketIdConfirmTeleportation\r\n}\r\n\r\nfunc (c *ConfirmTeleportation) Encode(w encoding.Writer) error {\r\n\treturn w.VarInt(c.TeleportId)\r\n}\r\n\r\nfunc (c *ConfirmTeleportation) Decode(r encoding.Reader) error {\r\n\t_, err := r.VarInt(&c.TeleportId)\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/damageEvent.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdDamageEvent = 0x1A\r\n\r\ntype DamageEvent struct {\r\n\tEntityId       int32\r\n\tSourceTypeId   int32\r\n\tSourceCauseId  int32 //-1 for none\r\n\tSourceDirectId int32 //-1 for none\r\n\r\n\tHasSourcePosition         bool\r\n\tSourceX, SourceY, SourceZ float64\r\n}\r\n\r\nfunc (DamageEvent) ID() int32 {\r\n\treturn PacketIdDamageEvent\r\n}\r\n\r\nfunc (d *DamageEvent) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(d.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(d.SourceTypeId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(d.SourceDirectId + 1); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(d.SourceCauseId + 1); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(d.HasSourcePosition); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif d.HasSourcePosition {\r\n\t\tif err := w.Double(d.SourceX); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.Double(d.SourceY); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.Double(d.SourceZ); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (d *DamageEvent) Decode(r encoding.Reader) error {\r\n\treturn nil //TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/deleteMessage.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdDeleteMessage = 0x1C\r\n\r\ntype DeleteMessage struct {\r\n\tMessageId int32\r\n\tSignature [256]byte\r\n}\r\n\r\nfunc (DeleteMessage) ID() int32 {\r\n\treturn PacketIdDeleteMessage\r\n}\r\n\r\nfunc (b *DeleteMessage) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(b.MessageId + 1); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif b.MessageId == -1 {\r\n\t\treturn w.FixedByteArray(b.Signature[:])\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (b *DeleteMessage) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&b.MessageId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif b.MessageId == -1 {\r\n\t\treturn r.FixedByteArray(b.Signature[:])\r\n\t}\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/disconnect.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdDisconnect = 0x1D\r\n\r\ntype Disconnect struct {\r\n\tReason text.TextComponent\r\n}\r\n\r\nfunc (Disconnect) ID() int32 {\r\n\treturn 0x1D\r\n}\r\n\r\nfunc (d *Disconnect) Encode(w encoding.Writer) error {\r\n\treturn w.TextComponent(d.Reason)\r\n}\r\n\r\nfunc (d *Disconnect) Decode(r encoding.Reader) error {\r\n\treturn r.TextComponent(&d.Reason)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/disguisedChatMessage.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdDisguisedChatMessage = 0x1E\r\n\r\ntype DisguisedChatMessage struct {\r\n\tMessage text.TextComponent\r\n\r\n\tChatType   int32\r\n\tSenderName text.TextComponent\r\n\r\n\tTargetName *text.TextComponent\r\n}\r\n\r\nfunc (DisguisedChatMessage) ID() int32 {\r\n\treturn PacketIdDisguisedChatMessage\r\n}\r\n\r\nfunc (p *DisguisedChatMessage) Encode(w encoding.Writer) error {\r\n\tif err := w.TextComponent(p.Message); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := w.VarInt(p.ChatType); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.TextComponent(p.SenderName); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := w.Bool(p.TargetName != nil); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif p.TargetName != nil {\r\n\t\tif err := w.TextComponent(*p.TargetName); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (p *DisguisedChatMessage) Decode(r encoding.Reader) error {\r\n\tif err := r.TextComponent(&p.Message); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif _, err := r.VarInt(&p.ChatType); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.TextComponent(&p.SenderName); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tvar hasTgt bool\r\n\tif err := r.Bool(&hasTgt); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif hasTgt {\r\n\t\tif err := r.TextComponent(p.TargetName); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/entityAnimation.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdEntityAnimation = 0x03\r\n\r\nconst (\r\n\tAnimationSwingMainArm = iota\r\n\t_\r\n\tAnimationLeaveBed\r\n\tAnimationSwingOffhand\r\n\tAnimationCriticalEffect\r\n\tAnimationMagicCriticalEffect\r\n)\r\n\r\ntype EntityAnimation struct {\r\n\tEntityId  int32\r\n\tAnimation byte\r\n}\r\n\r\nfunc (EntityAnimation) ID() int32 {\r\n\treturn PacketIdEntityAnimation\r\n}\r\n\r\nfunc (e *EntityAnimation) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(e.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Ubyte(e.Animation)\r\n}\r\n\r\nfunc (e *EntityAnimation) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&e.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Ubyte(&e.Animation)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/entityEvent.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdEntityEvent = 0x1F\r\n\r\ntype EntityEvent struct {\r\n\tEntityId     int32\r\n\tEntityStatus int8\r\n}\r\n\r\nfunc (EntityEvent) ID() int32 {\r\n\treturn PacketIdEntityEvent\r\n}\r\n\r\nfunc (e *EntityEvent) Encode(w encoding.Writer) error {\r\n\tif err := w.Int(e.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Byte(e.EntityStatus)\r\n}\r\n\r\nfunc (e *EntityEvent) Decode(r encoding.Reader) error {\r\n\tif err := r.Int(&e.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Byte(&e.EntityStatus)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/entitySoundEffect.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdEntitySoundEffect = 0x67\r\n\r\ntype EntitySoundEffect struct {\r\n\tSoundId       int32   // -1 for custom\r\n\tSoundName     string  // only if sound id -1\r\n\tFixedRange    bool    // only if sound id -1\r\n\tRange         float32 // only if fixed range\r\n\tSoundCategory int32   // one of the above constants\r\n\tEntityId      int32\r\n\tVolume        float32\r\n\tPitch         float32\r\n\tSeed          int64\r\n}\r\n\r\nfunc (EntitySoundEffect) ID() int32 {\r\n\treturn PacketIdEntitySoundEffect\r\n}\r\n\r\nfunc (s *EntitySoundEffect) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(s.SoundId + 1); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif s.SoundId == -1 {\r\n\t\tif err := w.Identifier(s.SoundName); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.Bool(s.FixedRange); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif s.FixedRange {\r\n\t\t\tif err := w.Float(s.Range); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif err := w.VarInt(s.SoundCategory); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(s.Volume); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Long(s.Seed)\r\n}\r\n\r\nfunc (s *EntitySoundEffect) Decode(r encoding.Reader) error {\r\n\treturn nil //TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/gameEvent.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nconst (\r\n\tGameEventNoRespawnBlockAvailable = iota\r\n\tGameEventBeginRaining\r\n\tGameEventEndRaining\r\n\tGameEventChangeGamemode\r\n\tGameEventWinGame\r\n\tGameEventDemoEvent\r\n\tGameEventArrowHitPlayer\r\n\tGameEventRainLevelChange\r\n\tGameEventThunderLevelChange\r\n\tGameEventPlayPufferfishStingSound\r\n\tGameEventPlayElderGuardianMobAppearance\r\n\tGameEventEnableRespawnScreen\r\n\tGameEventLimitedCrafting\r\n\tGameEventStartWaitingChunks\r\n)\r\n\r\n// clientbound\r\nconst PacketIdGameEvent = 0x22\r\n\r\ntype GameEvent struct {\r\n\tEvent byte\r\n\tValue float32\r\n}\r\n\r\nfunc (GameEvent) ID() int32 {\r\n\treturn 0x22\r\n}\r\n\r\nfunc (g *GameEvent) Encode(w encoding.Writer) error {\r\n\tif err := w.Ubyte(g.Event); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Float(g.Value)\r\n}\r\n\r\nfunc (g *GameEvent) Decode(r encoding.Reader) error {\r\n\tif err := r.Ubyte(&g.Event); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Float(&g.Value)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/hurtAnimation.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdHurtAnimation = 0x24\r\n\r\ntype HurtAnimation struct {\r\n\tEntityId int32\r\n\tYaw      float32\r\n}\r\n\r\nfunc (HurtAnimation) ID() int32 {\r\n\treturn PacketIdHurtAnimation\r\n}\r\n\r\nfunc (d *HurtAnimation) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(d.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Float(d.Yaw)\r\n}\r\n\r\nfunc (d *HurtAnimation) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&d.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Float(&d.Yaw)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/interact.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdInteract = 0x16\r\n\r\nconst (\r\n\tInteractTypeInteract = iota\r\n\tInteractTypeAttack\r\n\tInteractTypeInteractAt\r\n)\r\n\r\ntype Interact struct {\r\n\tEntityId                  int32\r\n\tType                      int32\r\n\tTargetX, TargetY, TargetZ float32\r\n\tHand                      int32\r\n\tSneaking                  bool\r\n}\r\n\r\nfunc (Interact) ID() int32 {\r\n\treturn PacketIdInteract\r\n}\r\n\r\nfunc (i *Interact) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(i.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(i.Type); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif i.Type == InteractTypeInteractAt {\r\n\t\tif err := w.Float(i.TargetX); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.Float(i.TargetY); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.Float(i.TargetZ); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif i.Type == InteractTypeInteractAt || i.Type == InteractTypeInteract {\r\n\t\tif err := w.VarInt(i.Hand); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\treturn w.Bool(i.Sneaking)\r\n}\r\n\r\nfunc (i *Interact) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&i.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif _, err := r.VarInt(&i.Type); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif i.Type == InteractTypeInteractAt {\r\n\t\tif err := r.Float(&i.TargetX); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := r.Float(&i.TargetY); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := r.Float(&i.TargetZ); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif i.Type == InteractTypeInteractAt || i.Type == InteractTypeInteract {\r\n\t\tif _, err := r.VarInt(&i.Hand); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\treturn r.Bool(&i.Sneaking)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/keepAlive.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdServerboundKeepAlive = 0x18\r\n\r\ntype ServerboundKeepAlive struct {\r\n\tKeepAliveID int64\r\n}\r\n\r\nfunc (ServerboundKeepAlive) ID() int32 {\r\n\treturn 0x18\r\n}\r\n\r\nfunc (k *ServerboundKeepAlive) Encode(w encoding.Writer) error {\r\n\treturn w.Long(k.KeepAliveID)\r\n}\r\n\r\nfunc (k *ServerboundKeepAlive) Decode(r encoding.Reader) error {\r\n\treturn r.Long(&k.KeepAliveID)\r\n}\r\n\r\n// clientbound\r\nconst PacketIdClientboundKeepAlive = 0x26\r\n\r\ntype ClientboundKeepAlive struct {\r\n\tKeepAliveID int64\r\n}\r\n\r\nfunc (ClientboundKeepAlive) ID() int32 {\r\n\treturn 0x26\r\n}\r\n\r\nfunc (k *ClientboundKeepAlive) Encode(w encoding.Writer) error {\r\n\treturn w.Long(k.KeepAliveID)\r\n}\r\n\r\nfunc (k *ClientboundKeepAlive) Decode(r encoding.Reader) error {\r\n\treturn r.Long(&k.KeepAliveID)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/login.go",
    "content": "package play\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\n)\n\n// clientbound\nconst PacketIdLogin = 0x2B\n\ntype Login struct {\n\tEntityID int32\n\n\tHardcore bool\n\n\tMaxPlayers int32\n\n\tViewDistance, SimulationDistance int32\n\n\tReducedDebugInfo,\n\tEnableRespawnScreen,\n\tDoLimitedCrafting bool\n\n\tDimensions    []string\n\tDimensionType int32\n\tDimensionName string\n\n\tHashedSeed int64\n\n\tGameMode         byte\n\tPreviousGameMode int8\n\n\tIsDebug, IsFlat bool\n\n\tDeathDimensionName                             string\n\tDeathLocationX, DeathLocationY, DeathLocationZ int32\n\n\tPortalCooldown     int32\n\tEnforcesSecureChat bool\n}\n\nfunc (Login) ID() int32 {\n\treturn PacketIdLogin\n}\n\nfunc (l *Login) Encode(w encoding.Writer) error {\n\tif err := w.Int(l.EntityID); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Bool(l.Hardcore); err != nil {\n\t\treturn err\n\t}\n\tif err := w.VarInt(int32(len(l.Dimensions))); err != nil {\n\t\treturn err\n\t}\n\tfor _, dim := range l.Dimensions {\n\t\tif err := w.Identifier(dim); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := w.VarInt(l.MaxPlayers); err != nil {\n\t\treturn err\n\t}\n\tif err := w.VarInt(l.ViewDistance); err != nil {\n\t\treturn err\n\t}\n\tif err := w.VarInt(l.SimulationDistance); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Bool(l.ReducedDebugInfo); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Bool(l.EnableRespawnScreen); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Bool(l.DoLimitedCrafting); err != nil {\n\t\treturn err\n\t}\n\tif err := w.VarInt(l.DimensionType); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Identifier(l.DimensionName); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Long(l.HashedSeed); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Ubyte(l.GameMode); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Byte(l.PreviousGameMode); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Bool(l.IsDebug); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Bool(l.IsFlat); err != nil {\n\t\treturn err\n\t}\n\tif err := w.Bool(l.DeathDimensionName != \"\"); err != nil {\n\t\treturn err\n\t}\n\tif l.DeathDimensionName != \"\" {\n\t\tif err := w.Identifier(l.DeathDimensionName); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := w.Position(l.DeathLocationX, l.DeathLocationY, l.DeathLocationZ); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err := w.VarInt(l.PortalCooldown); err != nil {\n\t\treturn err\n\t}\n\treturn w.Bool(l.EnforcesSecureChat)\n}\n\nfunc (l *Login) Decode(r encoding.Reader) error {\n\tif err := r.Int(&l.EntityID); err != nil {\n\t\treturn err\n\t}\n\tif err := r.Bool(&l.Hardcore); err != nil {\n\t\treturn err\n\t}\n\tvar dimlen int32\n\tif _, err := r.VarInt(&dimlen); err != nil {\n\t\treturn err\n\t}\n\tif dimlen < 0 {\n\t\treturn fmt.Errorf(\"negative length for make (login decode)\")\n\t}\n\tl.Dimensions = make([]string, dimlen)\n\tfor _, dim := range l.Dimensions {\n\t\tif err := r.Identifier(&dim); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif _, err := r.VarInt(&l.MaxPlayers); err != nil {\n\t\treturn err\n\t}\n\tif _, err := r.VarInt(&l.ViewDistance); err != nil {\n\t\treturn err\n\t}\n\tif _, err := r.VarInt(&l.SimulationDistance); err != nil {\n\t\treturn err\n\t}\n\tif err := r.Bool(&l.ReducedDebugInfo); err != nil {\n\t\treturn err\n\t}\n\tif err := r.Bool(&l.EnableRespawnScreen); err != nil {\n\t\treturn err\n\t}\n\tif err := r.Bool(&l.DoLimitedCrafting); err != nil {\n\t\treturn err\n\t}\n\tif _, err := r.VarInt(&l.DimensionType); err != nil {\n\t\treturn err\n\t}\n\tif err := r.Identifier(&l.DimensionName); err != nil {\n\t\treturn err\n\t}\n\tif err := r.Long(&l.HashedSeed); err != nil {\n\t\treturn err\n\t}\n\tif err := r.Ubyte(&l.GameMode); err != nil {\n\t\treturn err\n\t}\n\tif err := r.Byte(&l.PreviousGameMode); err != nil {\n\t\treturn err\n\t}\n\tif err := r.Bool(&l.IsDebug); err != nil {\n\t\treturn err\n\t}\n\tif err := r.Bool(&l.IsFlat); err != nil {\n\t\treturn err\n\t}\n\tvar hasDeathDim bool\n\tif err := r.Bool(&hasDeathDim); err != nil {\n\t\treturn err\n\t}\n\tif hasDeathDim {\n\t\tif err := r.Identifier(&l.DeathDimensionName); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := r.Position(&l.DeathLocationX, &l.DeathLocationY, &l.DeathLocationZ); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif _, err := r.VarInt(&l.PortalCooldown); err != nil {\n\t\treturn err\n\t}\n\treturn r.Bool(&l.EnforcesSecureChat)\n}\n"
  },
  {
    "path": "protocol/net/packet/play/openScreen.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdOpenScreen = 0x33\r\n\r\ntype OpenScreen struct {\r\n\tWindowId    int32\r\n\tWindowType  int32\r\n\tWindowTitle text.TextComponent\r\n}\r\n\r\nfunc (OpenScreen) ID() int32 {\r\n\treturn PacketIdOpenScreen\r\n}\r\n\r\nfunc (o *OpenScreen) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(o.WindowId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(o.WindowType); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.TextComponent(o.WindowTitle)\r\n}\r\n\r\nfunc (o *OpenScreen) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&o.WindowId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif _, err := r.VarInt(&o.WindowType); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.TextComponent(&o.WindowTitle)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/playerAbilitiesCB.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdPlayerAbilitiesClientbound = 0x38\r\n\r\nconst (\r\n\tPlayerAbsInvulenrable = 1 << iota\r\n\tPlayerAbsFlying\r\n\tPlayerAbsCreativeMode\r\n)\r\n\r\ntype PlayerAbilitiesClientbound struct {\r\n\tFlags       int8\r\n\tFlyingSpeed float32\r\n\tFOVModifier float32\r\n}\r\n\r\nfunc (PlayerAbilitiesClientbound) ID() int32 {\r\n\treturn PacketIdPlayerAbilitiesClientbound\r\n}\r\n\r\nfunc (a *PlayerAbilitiesClientbound) Encode(w encoding.Writer) error {\r\n\tif err := w.Byte(a.Flags); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(a.FlyingSpeed); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Float(a.FOVModifier)\r\n}\r\n\r\nfunc (a *PlayerAbilitiesClientbound) Decode(r encoding.Reader) error {\r\n\tif err := r.Byte(&a.Flags); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Float(&a.FlyingSpeed); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Float(&a.FOVModifier)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/playerAbilitiesSB.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdPlayerAbilitiesServerbound = 0x23\r\n\r\ntype PlayerAbilitiesServerbound struct {\r\n\tFlags int8\r\n}\r\n\r\nfunc (PlayerAbilitiesServerbound) ID() int32 {\r\n\treturn PacketIdPlayerAbilitiesServerbound\r\n}\r\n\r\nfunc (a *PlayerAbilitiesServerbound) Encode(w encoding.Writer) error {\r\n\treturn w.Byte(a.Flags)\r\n}\r\n\r\nfunc (a *PlayerAbilitiesServerbound) Decode(r encoding.Reader) error {\r\n\treturn r.Byte(&a.Flags)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/playerChatMessage.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\nconst (\r\n\tFilterTypePassThrough = iota\r\n\tFilterTypeFullyFiltered\r\n\tFilterTypePartiallyFiltered\r\n)\r\n\r\ntype PreviousMessage struct {\r\n\tMessageID int32\r\n\tSignature *[256]byte\r\n}\r\n\r\n// clientbound\r\nconst PacketIdPlayerChatMessage = 0x39\r\n\r\ntype PlayerChatMessage struct {\r\n\tSender              uuid.UUID\r\n\tIndex               int32\r\n\tHasMessageSignature bool\r\n\tMessageSignature    [256]byte\r\n\r\n\tMessage         string\r\n\tTimestamp, Salt int64\r\n\r\n\tPreviousMessages []PreviousMessage\r\n\r\n\tUnsignedContent *text.TextComponent\r\n\tFilterType      int32\r\n\tFilterBits      encoding.BitSet\r\n\r\n\tChatType   int32\r\n\tSenderName text.TextComponent\r\n\r\n\tTargetName *text.TextComponent\r\n}\r\n\r\nfunc (PlayerChatMessage) ID() int32 {\r\n\treturn PacketIdPlayerChatMessage\r\n}\r\n\r\nfunc (p *PlayerChatMessage) Encode(w encoding.Writer) error {\r\n\tif err := w.UUID(p.Sender); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(p.Index); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(p.HasMessageSignature); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif p.HasMessageSignature {\r\n\t\tif err := w.FixedByteArray(p.MessageSignature[:]); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\tif err := w.String(p.Message); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Long(p.Timestamp); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Long(p.Salt); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := w.VarInt(int32(len(p.PreviousMessages))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor _, sig := range p.PreviousMessages {\r\n\t\tif err := w.VarInt(sig.MessageID + 1); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif sig.MessageID+1 == 0 {\r\n\t\t\tif err := w.FixedByteArray(sig.Signature[:]); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif err := w.Bool(p.UnsignedContent != nil); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif p.UnsignedContent != nil {\r\n\t\tif err := w.TextComponent(*p.UnsignedContent); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif err := w.VarInt(p.FilterType); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif p.FilterType == FilterTypePartiallyFiltered {\r\n\t\tif err := w.BitSet(p.FilterBits); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\tif err := w.VarInt(p.ChatType); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.TextComponent(p.SenderName); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := w.Bool(p.TargetName != nil); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif p.TargetName != nil {\r\n\t\tif err := w.TextComponent(*p.TargetName); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (p *PlayerChatMessage) Decode(r encoding.Reader) error {\r\n\treturn nil //TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/playerCommand.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdPlayerCommand = 0x25\r\n\r\nconst (\r\n\tActionIdStartSneaking = iota\r\n\tActionIdStopSneaking\r\n\tActionIdLeaveBed\r\n\tActionIdStartSprinting\r\n\tActionIdStopSprinting\r\n\tActionIdStartJumpWithHorse\r\n\tActionIdStopJumpWithHorse\r\n\tActionIdOpenVehicleInventory\r\n\tActionIdStartFlyingWithElytra\r\n)\r\n\r\ntype PlayerCommand struct {\r\n\tEntityId  int32\r\n\tActionId  int32\r\n\tJumpBoost int32\r\n}\r\n\r\nfunc (PlayerCommand) ID() int32 {\r\n\treturn PacketIdPlayerCommand\r\n}\r\n\r\nfunc (p *PlayerCommand) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(p.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(p.ActionId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.VarInt(p.JumpBoost)\r\n}\r\n\r\nfunc (p *PlayerCommand) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&p.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif _, err := r.VarInt(&p.ActionId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\t_, err := r.VarInt(&p.JumpBoost)\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/playerInfoRemove.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"fmt\"\r\n\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nconst PacketIdPlayerInfoRemove = 0x3D\r\n\r\ntype PlayerInfoRemove struct {\r\n\tUUIDs []uuid.UUID\r\n}\r\n\r\nfunc (PlayerInfoRemove) ID() int32 {\r\n\treturn 0x3D\r\n}\r\n\r\nfunc (p *PlayerInfoRemove) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(int32(len(p.UUIDs))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor _, uuid := range p.UUIDs {\r\n\t\tif err := w.UUID(uuid); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (p *PlayerInfoRemove) Decode(r encoding.Reader) error {\r\n\tvar length int32\r\n\tif _, err := r.VarInt(&length); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif length < 0 {\r\n\t\treturn fmt.Errorf(\"negative length for make (player info remove decode)\")\r\n\t}\r\n\tp.UUIDs = make([]uuid.UUID, length)\r\n\tfor _, uuid := range p.UUIDs {\r\n\t\tif err := r.UUID(&uuid); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/playerInfoUpdate.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/login\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\nconst (\r\n\tActionAddPlayer = 1 << iota\r\n\tActionInitializeChat\r\n\tActionUpdateGameMode\r\n\tActionUpdateListed\r\n\tActionUpdateLatency\r\n\tActionUpdateDisplayName\r\n)\r\n\r\ntype PlayerAction struct {\r\n\t// Add Player\r\n\tName       string\r\n\tProperties []login.Property\r\n\t// Initialize Chat\r\n\tHasSignatureData bool\r\n\tSession          PlayerSession\r\n\t// Update Game Mode\r\n\tGameMode int32\r\n\t// Update Listed\r\n\tListed bool\r\n\t// Update Latency\r\n\tPing int32\r\n\t// Update Display Name\r\n\tHasDisplayName bool\r\n\tDisplayName    text.TextComponent\r\n}\r\n\r\n// clientbound\r\nconst PacketIdPlayerInfoUpdate = 0x3E\r\n\r\ntype PlayerInfoUpdate struct {\r\n\tActions int8\r\n\tPlayers map[uuid.UUID]PlayerAction\r\n}\r\n\r\nfunc (PlayerInfoUpdate) ID() int32 {\r\n\treturn 0x3E\r\n}\r\n\r\nfunc (p *PlayerInfoUpdate) Encode(w encoding.Writer) error {\r\n\tif err := w.Byte(p.Actions); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(int32(len(p.Players))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor uuid, player := range p.Players {\r\n\t\tif err := w.UUID(uuid); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif p.Actions&ActionAddPlayer != 0 {\r\n\t\t\tif err := w.String(player.Name); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(len(player.Properties))); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tfor _, property := range player.Properties {\r\n\t\t\t\tif err := w.String(property.Name); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := w.String(property.Value); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := w.Bool(property.Signature != \"\"); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif property.Signature != \"\" {\r\n\t\t\t\t\tif err := w.String(property.Signature); err != nil {\r\n\t\t\t\t\t\treturn err\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif p.Actions&ActionInitializeChat != 0 {\r\n\t\t\tif err := w.Bool(player.HasSignatureData); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif player.HasSignatureData {\r\n\t\t\t\tif err := w.UUID(player.Session.SessionID); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := w.Long(player.Session.ExpiresAt); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := w.ByteArray(player.Session.PublicKey); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := w.ByteArray(player.Session.KeySignature); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif p.Actions&ActionUpdateGameMode != 0 {\r\n\t\t\tif err := w.VarInt(player.GameMode); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t\tif p.Actions&ActionUpdateListed != 0 {\r\n\t\t\tif err := w.Bool(player.Listed); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t\tif p.Actions&ActionUpdateLatency != 0 {\r\n\t\t\tif err := w.VarInt(player.Ping); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t\tif p.Actions&ActionUpdateDisplayName != 0 {\r\n\t\t\tif err := w.Bool(player.HasDisplayName); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\treturn w.TextComponent(player.DisplayName)\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (p *PlayerInfoUpdate) Decode(r encoding.Reader) error {\r\n\treturn nil //TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/playerSession.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdPlayerSession = 0x07\r\n\r\ntype PlayerSession struct {\r\n\tSessionID    uuid.UUID\r\n\tExpiresAt    int64\r\n\tPublicKey    []byte\r\n\tKeySignature []byte\r\n}\r\n\r\nfunc (PlayerSession) ID() int32 {\r\n\treturn 0x07\r\n}\r\n\r\nfunc (p *PlayerSession) Encode(w encoding.Writer) error {\r\n\tif err := w.UUID(p.SessionID); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Long(p.ExpiresAt); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.ByteArray(p.PublicKey); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.ByteArray(p.KeySignature)\r\n}\r\n\r\nfunc (p *PlayerSession) Decode(r encoding.Reader) error {\r\n\tif err := r.UUID(&p.SessionID); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Long(&p.ExpiresAt); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.ByteArray(&p.PublicKey); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.ByteArray(&p.KeySignature)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/plugin.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/configuration\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdClientboundPluginMessage = 0x19\r\n\r\ntype ClientboundPluginMessage configuration.ClientboundPluginMessage\r\n\r\nfunc (ClientboundPluginMessage) ID() int32 {\r\n\treturn 0x19\r\n}\r\n\r\nfunc (c *ClientboundPluginMessage) Encode(w encoding.Writer) error {\r\n\tif err := w.Identifier(c.Channel); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.FixedByteArray(c.Data)\r\n}\r\n\r\nfunc (c *ClientboundPluginMessage) Decode(r encoding.Reader) error {\r\n\tif err := r.Identifier(&c.Channel); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.ReadAll(&c.Data)\r\n}\r\n\r\n// serverbound\r\nconst PacketIdServerboundPluginMessage = 0x12\r\n\r\ntype ServerboundPluginMessage struct {\r\n\tconfiguration.ServerboundPluginMessage\r\n}\r\n\r\nfunc (ServerboundPluginMessage) ID() int32 {\r\n\treturn 0x12\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/removeEntities.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdRemoveEntities = 0x42\r\n\r\ntype RemoveEntities struct {\r\n\tEntityIDs []int32\r\n}\r\n\r\nfunc (RemoveEntities) ID() int32 {\r\n\treturn PacketIdRemoveEntities\r\n}\r\n\r\nfunc (r *RemoveEntities) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(int32(len(r.EntityIDs))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tfor _, entityId := range r.EntityIDs {\r\n\t\tif err := w.VarInt(entityId); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (e *RemoveEntities) Decode(r encoding.Reader) error {\r\n\tvar length int32\r\n\tif _, err := r.VarInt(&length); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\te.EntityIDs = make([]int32, length)\r\n\r\n\tfor _, entityId := range e.EntityIDs {\r\n\t\tif _, err := r.VarInt(&entityId); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/serverData.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdServerData = 0x4B\r\n\r\ntype ServerData struct {\r\n\tMOTD text.TextComponent\r\n\tIcon []byte\r\n}\r\n\r\nfunc (ServerData) ID() int32 {\r\n\treturn PacketIdServerData\r\n}\r\n\r\nfunc (d *ServerData) Encode(w encoding.Writer) error {\r\n\tif err := w.TextComponent(d.MOTD); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(d.Icon != nil); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif d.Icon != nil {\r\n\t\treturn w.ByteArray(d.Icon)\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (d *ServerData) Decode(r encoding.Reader) error {\r\n\tif err := r.TextComponent(&d.MOTD); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tvar hasIcon bool\r\n\tif err := r.Bool(&hasIcon); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif hasIcon {\r\n\t\treturn r.ByteArray(&d.Icon)\r\n\t}\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/serverLinks.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdServerLinks = 0x7B\r\n\r\nconst (\r\n\tLabelBugRepot = iota\r\n\tLabelCommunityGuidelines\r\n\tLabelSupport\r\n\tLabelStatus\r\n\tLabelFeedback\r\n\tLabelCommunity\r\n\tLabelWebsite\r\n\tLabelForums\r\n\tLabelNews\r\n\tLabelAnnouncements\r\n)\r\n\r\ntype Link struct {\r\n\tBuiltIn bool\r\n\r\n\tBuiltInLabel int32              // used if built in is true\r\n\tLabel        text.TextComponent // used if built in is false\r\n\r\n\tURL string\r\n}\r\n\r\ntype ServerLinks struct {\r\n\tLinks []Link\r\n}\r\n\r\nfunc (ServerLinks) ID() int32 {\r\n\treturn PacketIdServerLinks\r\n}\r\n\r\nfunc (s *ServerLinks) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(int32(len(s.Links))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor _, link := range s.Links {\r\n\t\tif err := w.Bool(link.BuiltIn); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif link.BuiltIn {\r\n\t\t\tif err := w.VarInt(link.BuiltInLabel); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif err := w.TextComponent(link.Label); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t\tif err := w.String(link.URL); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (s *ServerLinks) Decode(r encoding.Reader) error {\r\n\treturn nil //TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setCenterChunk.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSetCenterChunk = 0x54\r\n\r\ntype SetCenterChunk struct {\r\n\tChunkX, ChunkZ int32\r\n}\r\n\r\nfunc (SetCenterChunk) ID() int32 {\r\n\treturn 0x54\r\n}\r\n\r\nfunc (s *SetCenterChunk) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(s.ChunkX); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.VarInt(s.ChunkZ)\r\n}\r\n\r\nfunc (s *SetCenterChunk) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&s.ChunkX); err != nil {\r\n\t\treturn err\r\n\t}\r\n\t_, err := r.VarInt(&s.ChunkZ)\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setContainerContent.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/slot\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSetContainerContent = 0x13\r\n\r\ntype SetContainerContent struct {\r\n\tWindowID    byte\r\n\tStateId     int32\r\n\tSlots       []slot.Slot\r\n\tCarriedItem slot.Slot\r\n}\r\n\r\nfunc (SetContainerContent) ID() int32 {\r\n\treturn PacketIdSetContainerContent\r\n}\r\n\r\nfunc (s *SetContainerContent) Encode(w encoding.Writer) error {\r\n\tif err := w.Ubyte(s.WindowID); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(s.StateId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(int32(len(s.Slots))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor _, slot := range s.Slots {\r\n\t\tif err := slot.Encode(w); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\r\n\treturn s.CarriedItem.Encode(w)\r\n}\r\n\r\nfunc (s *SetContainerContent) Decode(r encoding.Reader) error {\r\n\treturn nil //TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setCreativeModeSlot.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/slot\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSetCreativeModeSlot = 0x32\r\n\r\ntype SetCreativeModeSlot struct {\r\n\tSlot        int16\r\n\tClickedItem slot.Slot\r\n}\r\n\r\nfunc (SetCreativeModeSlot) ID() int32 {\r\n\treturn PacketIdSetCreativeModeSlot\r\n}\r\n\r\nfunc (s *SetCreativeModeSlot) Encode(w encoding.Writer) error {\r\n\tif err := w.Short(s.Slot); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn s.ClickedItem.Encode(w)\r\n}\r\n\r\nfunc (s *SetCreativeModeSlot) Decode(r encoding.Reader) error {\r\n\tif err := r.Short(&s.Slot); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn s.ClickedItem.Decode(r)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setDefaultSpawnPosition.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSetDefaultSpawnPosition = 0x56\r\n\r\ntype SetDefaultSpawnPosition struct {\r\n\tX, Y, Z int32\r\n\tAngle   float32\r\n}\r\n\r\nfunc (SetDefaultSpawnPosition) ID() int32 {\r\n\treturn PacketIdSetDefaultSpawnPosition\r\n}\r\n\r\nfunc (s *SetDefaultSpawnPosition) Encode(w encoding.Writer) error {\r\n\tif err := w.Position(s.X, s.Y, s.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Float(s.Angle)\r\n}\r\n\r\nfunc (s *SetDefaultSpawnPosition) Decode(r encoding.Reader) error {\r\n\tif err := r.Position(&s.X, &s.Y, &s.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Float(&s.Angle)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setEntityMetadata.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/metadata\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSetEntityMetadata = 0x58\r\n\r\ntype SetEntityMetadata struct {\r\n\tEntityId int32\r\n\tMetadata metadata.Metadata\r\n}\r\n\r\nfunc (SetEntityMetadata) ID() int32 {\r\n\treturn PacketIdSetEntityMetadata\r\n}\r\n\r\nfunc (s *SetEntityMetadata) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor index, value := range s.Metadata {\r\n\t\tif err := w.Ubyte(index); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tswitch val := value.(type) {\r\n\t\tcase metadata.Byte:\r\n\t\t\tif err := w.VarInt(0); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Byte(int8(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.VarInt:\r\n\t\t\tif err := w.VarInt(1); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.VarLong:\r\n\t\t\tif err := w.VarInt(2); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarLong(int64(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.Float:\r\n\t\t\tif err := w.VarInt(3); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.String:\r\n\t\t\tif err := w.VarInt(4); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.String(string(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.TextComponent:\r\n\t\t\tif err := w.VarInt(5); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.TextComponent(text.TextComponent(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.OptionalTextComponent:\r\n\t\t\tif err := w.VarInt(6); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Bool(val != nil); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif val != nil {\r\n\t\t\t\tif err := w.TextComponent(text.TextComponent(*val)); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase metadata.Slot:\r\n\t\t\tif err := w.VarInt(7); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := val.Encode(w); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.Boolean:\r\n\t\t\tif err := w.VarInt(8); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Bool(bool(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.Rotations:\r\n\t\t\tif err := w.VarInt(9); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[0])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[1])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[2])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.Position:\r\n\t\t\tif err := w.VarInt(10); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Position(val[0], val[1], val[2]); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.OptionalPosition:\r\n\t\t\tif err := w.VarInt(11); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Bool(val != nil); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif val != nil {\r\n\t\t\t\tif err := w.Position(val[0], val[1], val[2]); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase metadata.Direction:\r\n\t\t\tif err := w.VarInt(12); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.OptionalUUID:\r\n\t\t\tif err := w.VarInt(13); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Bool(val != nil); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif val != nil {\r\n\t\t\t\tif err := w.UUID(*val); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase metadata.BlockState:\r\n\t\t\tif err := w.VarInt(14); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.OptionalBlockState:\r\n\t\t\tif err := w.VarInt(15); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.VillagerData:\r\n\t\t\tif err := w.VarInt(18); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[0])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[1])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[2])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.OptionalVarInt:\r\n\t\t\tif err := w.VarInt(19); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.Pose:\r\n\t\t\tif err := w.VarInt(21); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.CatVariant:\r\n\t\t\tif err := w.VarInt(21); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.FrogVariant:\r\n\t\t\tif err := w.VarInt(22); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.OptionalGlobalPosition:\r\n\t\t\tif err := w.VarInt(23); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Bool(val != nil); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif val != nil {\r\n\t\t\t\tif err := w.Identifier(string(val.DimensionIdentifier)); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t\tif err := w.Position(val.Position[0], val.Position[1], val.Position[2]); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\tcase metadata.PaintingVariant:\r\n\t\t\tif err := w.VarInt(24); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.SnifferState:\r\n\t\t\tif err := w.VarInt(25); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(val)); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.Vector3:\r\n\t\t\tif err := w.VarInt(26); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[0])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[1])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[2])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.Quatermion:\r\n\t\t\tif err := w.VarInt(27); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[0])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[1])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[2])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.Float(float32(val[3])); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tcase metadata.NBT:\r\n\t\t\tif err := w.VarInt(16); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.NBT(val); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\tdefault:\r\n\t\t\tcontinue\r\n\t\t}\r\n\t}\r\n\treturn w.Ubyte(0xFF)\r\n}\r\n\r\nfunc (*SetEntityMetadata) Decode(r encoding.Reader) error {\r\n\treturn nil //TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setEntityVelocity.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSetEntityVelocity = 0x5A\r\n\r\ntype SetEntityVelocity struct {\r\n\tEntityId int32\r\n\tX, Y, Z  int16\r\n}\r\n\r\nfunc (SetEntityVelocity) ID() int32 {\r\n\treturn PacketIdSetEntityVelocity\r\n}\r\n\r\nfunc (d *SetEntityVelocity) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(d.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(d.X); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(d.Y); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Short(d.Z)\r\n}\r\n\r\nfunc (d *SetEntityVelocity) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&d.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&d.X); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&d.Y); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Short(&d.Z)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setHeadRotation.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSetHeadRotation = 0x48\r\n\r\ntype SetHeadRotation struct {\r\n\tEntityId int32\r\n\tHeadYaw  byte\r\n}\r\n\r\nfunc (SetHeadRotation) ID() int32 {\r\n\treturn PacketIdSetHeadRotation\r\n}\r\n\r\nfunc (s *SetHeadRotation) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Ubyte(s.HeadYaw)\r\n}\r\n\r\nfunc (s *SetHeadRotation) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Ubyte(&s.HeadYaw)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setHeldItemCB.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSetHeldItemClientbound = 0x53\r\n\r\ntype SetHeldItemClientbound struct {\r\n\tSlot int8\r\n}\r\n\r\nfunc (SetHeldItemClientbound) ID() int32 {\r\n\treturn PacketIdSetHeldItemClientbound\r\n}\r\n\r\nfunc (s *SetHeldItemClientbound) Encode(w encoding.Writer) error {\r\n\treturn w.Byte(s.Slot)\r\n}\r\n\r\nfunc (s *SetHeldItemClientbound) Decode(r encoding.Reader) error {\r\n\treturn r.Byte(&s.Slot)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setHeldItemSB.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdSetHeldItemServerbound = 0x2F\r\n\r\ntype SetHeldItemServerbound struct {\r\n\tSlot int16\r\n}\r\n\r\nfunc (SetHeldItemServerbound) ID() int32 {\r\n\treturn PacketIdSetHeldItemServerbound\r\n}\r\n\r\nfunc (s *SetHeldItemServerbound) Encode(w encoding.Writer) error {\r\n\treturn w.Short(s.Slot)\r\n}\r\n\r\nfunc (s *SetHeldItemServerbound) Decode(r encoding.Reader) error {\r\n\treturn r.Short(&s.Slot)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setPlayerOnGround.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdSetPlayerOnGround = 0x1D\r\n\r\ntype SetPlayerOnGround struct {\r\n\tOnGround bool\r\n}\r\n\r\nfunc (SetPlayerOnGround) ID() int32 {\r\n\treturn PacketIdSetPlayerOnGround\r\n}\r\n\r\nfunc (s *SetPlayerOnGround) Encode(w encoding.Writer) error {\r\n\treturn w.Bool(s.OnGround)\r\n}\r\n\r\nfunc (s *SetPlayerOnGround) Decode(r encoding.Reader) error {\r\n\treturn r.Bool(&s.OnGround)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setPlayerPosition.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdSetPlayerPosition = 0x1A\r\n\r\ntype SetPlayerPosition struct {\r\n\tX, Y, Z  float64\r\n\tOnGround bool\r\n}\r\n\r\nfunc (SetPlayerPosition) ID() int32 {\r\n\treturn 0x1A\r\n}\r\n\r\nfunc (s *SetPlayerPosition) Encode(w encoding.Writer) error {\r\n\tif err := w.Double(s.X); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Double(s.Y); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Double(s.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(s.OnGround)\r\n}\r\n\r\nfunc (s *SetPlayerPosition) Decode(r encoding.Reader) error {\r\n\tif err := r.Double(&s.X); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Double(&s.Y); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Double(&s.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Bool(&s.OnGround)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setPlayerPositionAndRotation.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdSetPlayerPositionAndRotation = 0x1B\r\n\r\ntype SetPlayerPositionAndRotation struct {\r\n\tX, Y, Z    float64\r\n\tYaw, Pitch float32\r\n\tOnGround   bool\r\n}\r\n\r\nfunc (SetPlayerPositionAndRotation) ID() int32 {\r\n\treturn 0x1B\r\n}\r\n\r\nfunc (s *SetPlayerPositionAndRotation) Encode(w encoding.Writer) error {\r\n\tif err := w.Double(s.X); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Double(s.Y); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Double(s.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(s.OnGround)\r\n}\r\n\r\nfunc (s *SetPlayerPositionAndRotation) Decode(r encoding.Reader) error {\r\n\tif err := r.Double(&s.X); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Double(&s.Y); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Double(&s.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Float(&s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Float(&s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Bool(&s.OnGround)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setPlayerRotation.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdSetPlayerRotation = 0x1C\r\n\r\ntype SetPlayerRotation struct {\r\n\tYaw, Pitch float32\r\n\tOnGround   bool\r\n}\r\n\r\nfunc (SetPlayerRotation) ID() int32 {\r\n\treturn 0x1C\r\n}\r\n\r\nfunc (s *SetPlayerRotation) Encode(w encoding.Writer) error {\r\n\tif err := w.Float(s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(s.OnGround)\r\n}\r\n\r\nfunc (s *SetPlayerRotation) Decode(r encoding.Reader) error {\r\n\tif err := r.Float(&s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Float(&s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Bool(&s.OnGround)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/setTickingState.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSetTickingState = 0x71\r\n\r\ntype SetTickingState struct {\r\n\tTickRate float32\r\n\tIsFrozen bool\r\n}\r\n\r\nfunc (SetTickingState) ID() int32 {\r\n\treturn PacketIdSetTickingState\r\n}\r\n\r\nfunc (s *SetTickingState) Encode(w encoding.Writer) error {\r\n\tif err := w.Float(s.TickRate); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(s.IsFrozen)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/signedChatCommand.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSignedChatCommand = 0x05\r\n\r\ntype SignedChatCommand struct {\r\n\tCommand         string\r\n\tTimestamp, Salt int64\r\n\tArguments       []SignedArgument\r\n\tMessageCount    int32\r\n\tAcknowledged    encoding.FixedBitSet\r\n}\r\n\r\ntype SignedArgument struct {\r\n\tName      string\r\n\tSignature [256]byte\r\n}\r\n\r\nfunc (SignedChatCommand) ID() int32 {\r\n\treturn PacketIdChatCommand\r\n}\r\n\r\nfunc (c *SignedChatCommand) Encode(w encoding.Writer) error {\r\n\tif err := w.String(c.Command); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Long(c.Timestamp); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Long(c.Salt); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(int32(len(c.Arguments))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor _, arg := range c.Arguments {\r\n\t\tif err := w.String(arg.Name); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.FixedByteArray(arg.Signature[:]); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif err := w.VarInt(c.MessageCount); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.FixedBitSet(c.Acknowledged)\r\n}\r\n\r\nfunc (c *SignedChatCommand) Decode(r encoding.Reader) error {\r\n\tif err := r.String(&c.Command); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Long(&c.Timestamp); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Long(&c.Salt); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tvar length int32\r\n\tif _, err := r.VarInt(&length); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tc.Arguments = make([]SignedArgument, length)\r\n\r\n\tfor _, arg := range c.Arguments {\r\n\t\tif err := r.String(&arg.Name); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := r.FixedByteArray(arg.Signature[:]); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif _, err := r.VarInt(&c.MessageCount); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.FixedBitSet(&c.Acknowledged, 20)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/soundEffect.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSoundEffect = 0x68\r\n\r\nconst (\r\n\tSoundCategoryMaster = iota\r\n\tSoundCategoryMusic\r\n\tSoundCategoryRecord\r\n\tSoundCategoryWeather\r\n\tSoundCategoryBlock\r\n\tSoundCategoryHostile\r\n\tSoundCategoryNeutral\r\n\tSoundCategoryPlayer\r\n\tSoundCategoryAmbient\r\n\tSoundCategoryVoice\r\n)\r\n\r\ntype SoundEffect struct {\r\n\tSoundId       int32   // -1 for custom\r\n\tSoundName     string  // only if sound id -1\r\n\tFixedRange    bool    // only if sound id -1\r\n\tRange         float32 // only if fixed range\r\n\tSoundCategory int32   // one of the above constants\r\n\tX, Y, Z       int32   // the original position of this sound. Calculations are done on encoding\r\n\tVolume        float32\r\n\tPitch         float32\r\n\tSeed          int64\r\n}\r\n\r\nfunc (SoundEffect) ID() int32 {\r\n\treturn PacketIdSoundEffect\r\n}\r\n\r\nfunc (s *SoundEffect) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(s.SoundId + 1); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif s.SoundId == -1 {\r\n\t\tif err := w.Identifier(s.SoundName); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.Bool(s.FixedRange); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif s.FixedRange {\r\n\t\t\tif err := w.Float(s.Range); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif err := w.VarInt(s.SoundCategory); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Int(s.X * 8); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Int(s.Y * 8); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Int(s.Z * 8); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(s.Volume); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Long(s.Seed)\r\n}\r\n\r\nfunc (s *SoundEffect) Decode(r encoding.Reader) error {\r\n\treturn nil //TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/spawnEntity.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nconst (\r\n\tObjectDataItemFrameDown = iota\r\n\tObjectDataItemFrameUp\r\n\tObjectDataNorth\r\n\tObjectDataSouth\r\n\tObjectDataWest\r\n\tObjectDataEast\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSpawnEntity = 0x01\r\n\r\ntype SpawnEntity struct {\r\n\tEntityId            int32\r\n\tEntityUUID          uuid.UUID\r\n\tType                int32\r\n\tX, Y, Z             float64\r\n\tPitch, Yaw, HeadYaw byte\r\n\tData                int32\r\n\tVelX, VelY, VelZ    int16\r\n}\r\n\r\nfunc (SpawnEntity) ID() int32 {\r\n\treturn 0x01\r\n}\r\n\r\nfunc (s *SpawnEntity) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.UUID(s.EntityUUID); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(s.Type); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Double(s.X); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Double(s.Y); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Double(s.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ubyte(s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ubyte(s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ubyte(s.HeadYaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(s.Data); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(s.VelX); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(s.VelY); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Short(s.VelZ)\r\n}\r\n\r\nfunc (s *SpawnEntity) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.UUID(&s.EntityUUID); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif _, err := r.VarInt(&s.Type); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Double(&s.X); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Double(&s.Y); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Double(&s.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ubyte(&s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ubyte(&s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ubyte(&s.HeadYaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif _, err := r.VarInt(&s.Data); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&s.VelX); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&s.VelY); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Short(&s.VelZ)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/stepTick.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdStepTick = 0x72\r\n\r\ntype StepTick struct {\r\n\tTickSteps int32\r\n}\r\n\r\nfunc (StepTick) ID() int32 {\r\n\treturn PacketIdStepTick\r\n}\r\n\r\nfunc (s *StepTick) Encode(w encoding.Writer) error {\r\n\treturn w.VarInt(s.TickSteps)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/swingArm.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdSwingArm = 0x36\r\n\r\nconst (\r\n\tMainHand = iota\r\n\tOffhand\r\n)\r\n\r\ntype SwingArm struct {\r\n\tHand int32\r\n}\r\n\r\nfunc (SwingArm) ID() int32 {\r\n\treturn PacketIdSwingArm\r\n}\r\n\r\nfunc (e *SwingArm) Encode(w encoding.Writer) error {\r\n\treturn w.VarInt(e.Hand)\r\n}\r\n\r\nfunc (e *SwingArm) Decode(r encoding.Reader) error {\r\n\t_, err := r.VarInt(&e.Hand)\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/synchronizePlayerPosition.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdSynchronizePlayerPosition = 0x40\r\n\r\nconst (\r\n\tSyncPosRelX = 1 << iota\r\n\tSyncPosRelY\r\n\tSyncPosRelZ\r\n\tSyncPosRelPitch\r\n\tSyncPosRelYaw\r\n)\r\n\r\ntype SynchronizePlayerPosition struct {\r\n\tX, Y, Z    float64\r\n\tYaw, Pitch float32\r\n\tFlags      int8\r\n\tTeleportID int32\r\n}\r\n\r\nfunc (SynchronizePlayerPosition) ID() int32 {\r\n\treturn PacketIdSynchronizePlayerPosition\r\n}\r\n\r\nfunc (s *SynchronizePlayerPosition) Encode(w encoding.Writer) error {\r\n\tif err := w.Double(s.X); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Double(s.Y); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Double(s.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Byte(s.Flags); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.VarInt(s.TeleportID)\r\n}\r\n\r\nfunc (s *SynchronizePlayerPosition) Decode(r encoding.Reader) error {\r\n\tif err := r.Double(&s.X); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Double(&s.Y); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Double(&s.Z); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Float(&s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Float(&s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Byte(&s.Flags); err != nil {\r\n\t\treturn err\r\n\t}\r\n\t_, err := r.VarInt(&s.TeleportID)\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/systemChatMessage.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdSystemChatMessage = 0x6C\r\n\r\ntype SystemChatMessage struct {\r\n\tContent text.TextComponent\r\n\tOverlay bool\r\n}\r\n\r\nfunc (SystemChatMessage) ID() int32 {\r\n\treturn PacketIdSystemChatMessage\r\n}\r\n\r\nfunc (s *SystemChatMessage) Encode(w encoding.Writer) error {\r\n\tif err := w.TextComponent(s.Content); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(s.Overlay)\r\n}\r\n\r\nfunc (s *SystemChatMessage) Decode(r encoding.Reader) error {\r\n\tif err := r.TextComponent(&s.Content); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Bool(&s.Overlay)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/updateEntityPosition.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdUpdateEntityPosition = 0x2E\r\n\r\ntype UpdateEntityPosition struct {\r\n\tEntityId               int32\r\n\tDeltaX, DeltaY, DeltaZ int16\r\n\tOnGround               bool\r\n}\r\n\r\nfunc (UpdateEntityPosition) ID() int32 {\r\n\treturn PacketIdUpdateEntityPosition\r\n}\r\n\r\nfunc (s *UpdateEntityPosition) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(s.DeltaX); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(s.DeltaY); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(s.DeltaZ); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(s.OnGround)\r\n}\r\n\r\nfunc (s *UpdateEntityPosition) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&s.DeltaX); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&s.DeltaY); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&s.DeltaZ); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Bool(&s.OnGround)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/updateEntityPositionAndRotation.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdUpdateEntityPositionAndRotation = 0x2F\r\n\r\ntype UpdateEntityPositionAndRotation struct {\r\n\tEntityId               int32\r\n\tDeltaX, DeltaY, DeltaZ int16\r\n\tYaw, Pitch             byte\r\n\tOnGround               bool\r\n}\r\n\r\nfunc (UpdateEntityPositionAndRotation) ID() int32 {\r\n\treturn PacketIdUpdateEntityPositionAndRotation\r\n}\r\n\r\nfunc (s *UpdateEntityPositionAndRotation) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(s.DeltaX); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(s.DeltaY); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Short(s.DeltaZ); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ubyte(s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ubyte(s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(s.OnGround)\r\n}\r\n\r\nfunc (s *UpdateEntityPositionAndRotation) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&s.DeltaX); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&s.DeltaY); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Short(&s.DeltaZ); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ubyte(&s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ubyte(&s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Bool(&s.OnGround)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/updateEntityRotation.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdUpdateEntityRotation = 0x30\r\n\r\ntype UpdateEntityRotation struct {\r\n\tEntityId   int32\r\n\tYaw, Pitch byte\r\n\tOnGround   bool\r\n}\r\n\r\nfunc (UpdateEntityRotation) ID() int32 {\r\n\treturn PacketIdUpdateEntityRotation\r\n}\r\n\r\nfunc (s *UpdateEntityRotation) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ubyte(s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Ubyte(s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Bool(s.OnGround)\r\n}\r\n\r\nfunc (s *UpdateEntityRotation) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&s.EntityId); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ubyte(&s.Yaw); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Ubyte(&s.Pitch); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Bool(&s.OnGround)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/updateRecipeBook.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\nconst (\r\n\tUpdateRecipeBookActionInit = iota\r\n\tUpdateRecipeBookActionAdd\r\n\tUpdateRecipeBookActionRemove\r\n)\r\n\r\n// clientbound\r\nconst PacketIdUpdateRecipeBook = 0x41\r\n\r\ntype UpdateRecipeBook struct {\r\n\tAction int32\r\n\r\n\tCraftingRecipeBookOpen         bool\r\n\tCraftingRecipeBookFilterActive bool\r\n\r\n\tSmeltingRecipeBookOpen         bool\r\n\tSmeltingRecipeBookFilterActive bool\r\n\r\n\tBlastFurnaceRecipeBookOpen         bool\r\n\tBlastFurnaceRecipeBookFilterActive bool\r\n\r\n\tSmokerRecipeBookOpen         bool\r\n\tSmokerRecipeBookFilterActive bool\r\n\r\n\tArray1 []string //init: to be displayed, add/rem: recipes\r\n\tArray2 []string //init: recipes, add/rem: unused\r\n}\r\n\r\nfunc (UpdateRecipeBook) ID() int32 {\r\n\treturn PacketIdUpdateRecipeBook\r\n}\r\n\r\nfunc (u *UpdateRecipeBook) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(u.Action); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(u.CraftingRecipeBookOpen); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(u.CraftingRecipeBookFilterActive); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := w.Bool(u.SmeltingRecipeBookOpen); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(u.SmeltingRecipeBookFilterActive); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := w.Bool(u.BlastFurnaceRecipeBookOpen); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(u.BlastFurnaceRecipeBookFilterActive); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := w.Bool(u.SmokerRecipeBookOpen); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(u.SmokerRecipeBookFilterActive); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := w.VarInt(int32(len(u.Array1))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor _, str := range u.Array1 {\r\n\t\tif err := w.Identifier(str); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\tif u.Action == UpdateRecipeBookActionInit {\r\n\t\tif err := w.VarInt(int32(len(u.Array2))); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tfor _, str := range u.Array2 {\r\n\t\t\tif err := w.Identifier(str); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (*UpdateRecipeBook) Decode(encoding.Reader) error {\r\n\treturn nil //TODO\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/updateSectionBlocks.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdUpdateSectionBlocks = 0x49\r\n\r\ntype UpdateSectionBlocks struct {\r\n\tChunkX, ChunkY, ChunkZ int32\r\n\r\n\t// [x, y, z] -> state id\r\n\tBlocks map[[3]int32]int32\r\n}\r\n\r\nfunc (UpdateSectionBlocks) ID() int32 {\r\n\treturn PacketIdUpdateSectionBlocks\r\n}\r\n\r\nfunc (b *UpdateSectionBlocks) Encode(w encoding.Writer) error {\r\n\tif err := w.Long(((int64(b.ChunkX) & 0x3FFFFF) << 42) | (int64(b.ChunkY) & 0xFFFFF) | ((int64(b.ChunkZ) & 0x3FFFFF) << 20)); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(int32(len(b.Blocks))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor pos, state := range b.Blocks {\r\n\t\tblockLocalX, blockLocalY, blockLocalZ := int64(pos[0]), int64(pos[1]), int64(pos[2])\r\n\t\tif err := w.VarLong(int64(state)<<12 | (blockLocalX<<8 | blockLocalZ<<4 | blockLocalY)); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (b *UpdateSectionBlocks) Decode(r encoding.Reader) error {\r\n\tvar sectionPos int64\r\n\tif err := r.Long(&sectionPos); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tb.ChunkX = int32(sectionPos >> 42)\r\n\tb.ChunkY = int32(sectionPos << 44 >> 44)\r\n\tb.ChunkZ = int32(sectionPos << 22 >> 42)\r\n\r\n\tvar blocksLen int32\r\n\tif _, err := r.VarInt(&blocksLen); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tb.Blocks = make(map[[3]int32]int32, blocksLen)\r\n\r\n\tfor i := 0; i < int(blocksLen); i++ {\r\n\t\tvar blockId int64\r\n\t\tif err := r.Long(&blockId); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tvar pos = [3]int32{\r\n\t\t\tint32((blockId >> 8) & 0xF),\r\n\t\t\tint32(blockId & 0xF),\r\n\t\t\tint32((blockId >> 4) & 0xF),\r\n\t\t}\r\n\r\n\t\tb.Blocks[pos] = int32(blockId >> 12)\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/updateTags.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdUpdateTags = 0x78\r\n\r\ntype UpdateTags struct {\r\n\tTags map[string]map[string][]int32\r\n}\r\n\r\nfunc (UpdateTags) ID() int32 {\r\n\treturn PacketIdUpdateTags\r\n}\r\n\r\nfunc (u *UpdateTags) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(int32(len(u.Tags))); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tfor reg, tag := range u.Tags {\r\n\t\tif err := w.Identifier(reg); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.VarInt(int32(len(tag))); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tfor id, tag := range tag {\r\n\t\t\tif err := w.Identifier(id); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tif err := w.VarInt(int32(len(tag))); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tfor _, entry := range tag {\r\n\t\t\t\tif err := w.VarInt(entry); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n\r\nfunc (u *UpdateTags) Decode(r encoding.Reader) error {\r\n\tvar length int32\r\n\tif _, err := r.VarInt(&length); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tu.Tags = make(map[string]map[string][]int32, length)\r\n\r\n\tfor i := int32(0); i < length; i++ {\r\n\t\tvar registry string\r\n\t\tif err := r.String(&registry); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tvar length int32\r\n\t\tif _, err := r.VarInt(&length); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\r\n\t\tu.Tags[registry] = make(map[string][]int32, length)\r\n\t\tfor i := int32(0); i < length; i++ {\r\n\t\t\tvar tagName string\r\n\t\t\tif err := r.String(&tagName); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tvar count int32\r\n\t\t\tif _, err := r.VarInt(&count); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t\tu.Tags[registry][tagName] = make([]int32, count)\r\n\t\t\tfor i := int32(0); i < count; i++ {\r\n\t\t\t\tif _, err := r.VarInt(&u.Tags[registry][tagName][i]); err != nil {\r\n\t\t\t\t\treturn err\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/updateTime.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// clientbound\r\nconst PacketIdUpdateTime = 0x64\r\n\r\ntype UpdateTime struct {\r\n\tWorldAge  int64\r\n\tTimeOfDay int64\r\n}\r\n\r\nfunc (UpdateTime) ID() int32 {\r\n\treturn PacketIdUpdateTime\r\n}\r\n\r\nfunc (u *UpdateTime) Encode(w encoding.Writer) error {\r\n\tif err := w.Long(u.WorldAge); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.Long(u.TimeOfDay)\r\n}\r\n\r\nfunc (u *UpdateTime) Decode(r encoding.Reader) error {\r\n\tif err := r.Long(&u.WorldAge); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn r.Long(&u.TimeOfDay)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/play/useItemOn.go",
    "content": "package play\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\n// serverbound\r\nconst PacketIdUseItemOn = 0x38\r\n\r\ntype UseItemOn struct {\r\n\tHand                               int32\r\n\tBlockX, BlockY, BlockZ             int32\r\n\tFace                               int32\r\n\tCursorPosX, CursorPosY, CursorPosZ float32\r\n\tInsideBlock                        bool\r\n\tSequence                           int32\r\n}\r\n\r\nconst (\r\n\tFaceBottom = iota\r\n\tFaceTop\r\n\tFaceNorth\r\n\tFaceSouth\r\n\tFaceWest\r\n\tFaceEast\r\n)\r\n\r\nfunc (UseItemOn) ID() int32 {\r\n\treturn PacketIdUseItemOn\r\n}\r\n\r\nfunc (u *UseItemOn) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(u.Hand); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Position(u.BlockX, u.BlockY, u.BlockZ); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.VarInt(u.Face); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(u.CursorPosX); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(u.CursorPosY); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Float(u.CursorPosZ); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := w.Bool(u.InsideBlock); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.VarInt(u.Sequence)\r\n}\r\n\r\nfunc (u *UseItemOn) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&u.Hand); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Position(&u.BlockX, &u.BlockY, &u.BlockZ); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif _, err := r.VarInt(&u.Face); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Float(&u.CursorPosX); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Float(&u.CursorPosY); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Float(&u.CursorPosZ); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif err := r.Bool(&u.InsideBlock); err != nil {\r\n\t\treturn err\r\n\t}\r\n\t_, err := r.VarInt(&u.Sequence)\r\n\treturn err\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/status/ping.go",
    "content": "package status\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\ntype Ping struct {\r\n\tPayload int64\r\n}\r\n\r\nfunc (Ping) ID() int32 {\r\n\treturn 0x01\r\n}\r\n\r\nfunc (p Ping) Encode(w encoding.Writer) error {\r\n\treturn w.Long(p.Payload)\r\n}\r\n\r\nfunc (p *Ping) Decode(r encoding.Reader) error {\r\n\treturn r.Long(&p.Payload)\r\n}\r\n"
  },
  {
    "path": "protocol/net/packet/status/status.go",
    "content": "package status\r\n\r\nimport (\r\n\t\"encoding/base64\"\r\n\t\"encoding/json\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\ntype StatusVersion struct {\r\n\tName     string `json:\"name\"`\r\n\tProtocol int    `json:\"protocol\"`\r\n}\r\ntype StatusSample struct {\r\n\tName string `json:\"name\"`\r\n\tID   string `json:\"id\"`\r\n}\r\ntype StatusPlayers struct {\r\n\tMax    int            `json:\"max\"`\r\n\tOnline int            `json:\"online\"`\r\n\tSample []StatusSample `json:\"sample,omitempty\"`\r\n}\r\n\r\ntype Favicon []byte\r\n\r\nfunc (f Favicon) MarshalJSON() ([]byte, error) {\r\n\tif len(f) == 0 {\r\n\t\treturn []byte{'\"', '\"'}, nil\r\n\t}\r\n\tdata := make([]byte, len(dimgpnb64txt)+base64.StdEncoding.EncodedLen(len(f))+1)\r\n\tcopy(data, []byte(dimgpnb64txt))\r\n\tbase64.StdEncoding.Encode(data[len(dimgpnb64txt):], f)\r\n\tdata[len(data)-1] = '\"'\r\n\r\n\treturn data, nil\r\n}\r\n\r\nconst dimgpnb64txt = `\"data:image/png;base64,`\r\n\r\ntype StatusResponseData struct {\r\n\tVersion            StatusVersion      `json:\"version\"`\r\n\tPlayers            StatusPlayers      `json:\"players\"`\r\n\tDescription        text.TextComponent `json:\"description\"`\r\n\tFavicon            Favicon            `json:\"favicon,omitempty\"`\r\n\tEnforcesSecureChat bool               `json:\"enforcesSecureChat\"`\r\n}\r\n\r\ntype StatusResponse struct {\r\n\tData StatusResponseData\r\n}\r\n\r\nfunc (StatusResponse) ID() int32 {\r\n\treturn 0x00\r\n}\r\n\r\nfunc (s StatusResponse) Encode(w encoding.Writer) error {\r\n\tdata, err := json.Marshal(s.Data)\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn w.ByteArray(data)\r\n}\r\n\r\nfunc (s *StatusResponse) Decode(r encoding.Reader) error {\r\n\tvar data []byte\r\n\tif err := r.ByteArray(&data); err != nil {\r\n\t\treturn err\r\n\t}\r\n\treturn json.Unmarshal(data, &s.Data)\r\n}\r\n\r\ntype StatusRequest struct {\r\n}\r\n\r\nfunc (StatusRequest) ID() int32 {\r\n\treturn 0x00\r\n}\r\n\r\nfunc (StatusRequest) Encode(encoding.Writer) error {\r\n\treturn nil\r\n}\r\n\r\nfunc (StatusRequest) Decode(r encoding.Reader) error {\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/pool.go",
    "content": "package net\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/configuration\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/handshake\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/login\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/status\"\r\n)\r\n\r\nvar ServerboundPool = map[int32]map[int32]func() packet.Decodeable{\r\n\tHandshakingState: {\r\n\t\t0x00: func() packet.Decodeable { return &handshake.Handshaking{} },\r\n\t},\r\n\tStatusState: {\r\n\t\t0x00: func() packet.Decodeable { return &status.StatusRequest{} },\r\n\t\t0x01: func() packet.Decodeable { return &status.Ping{} },\r\n\t},\r\n\tLoginState: {\r\n\t\t0x00: func() packet.Decodeable { return &login.LoginStart{} },\r\n\t\t0x02: func() packet.Decodeable { return &login.LoginPluginResponse{} },\r\n\t\t0x01: func() packet.Decodeable { return &login.EncryptionResponse{} },\r\n\t\t0x03: func() packet.Decodeable { return &login.LoginAcknowledged{} },\r\n\t\t0x04: func() packet.Decodeable { return &login.CookieResponse{} },\r\n\t},\r\n\tConfigurationState: {\r\n\t\t0x00: func() packet.Decodeable { return &configuration.ClientInformation{} },\r\n\t\t0x01: func() packet.Decodeable { return &configuration.CookieResponse{} },\r\n\t\t0x02: func() packet.Decodeable { return &configuration.ServerboundPluginMessage{} },\r\n\t\t0x03: func() packet.Decodeable { return &configuration.AcknowledgeFinishConfiguration{} },\r\n\t\t0x04: func() packet.Decodeable { return &configuration.KeepAlive{} },\r\n\t\t0x05: func() packet.Decodeable { return &configuration.Pong{} },\r\n\t},\r\n\tPlayState: {\r\n\t\t0x00: func() packet.Decodeable { return &play.ConfirmTeleportation{} },\r\n\t\t0x04: func() packet.Decodeable { return &play.ChatCommand{} },\r\n\t\t0x05: func() packet.Decodeable { return &play.SignedChatCommand{} },\r\n\t\t0x06: func() packet.Decodeable { return &play.ChatMessage{} },\r\n\t\t0x08: func() packet.Decodeable { return &play.ChunkBatchReceived{} },\r\n\t\t0x07: func() packet.Decodeable { return &play.PlayerSession{} },\r\n\t\t0x0A: func() packet.Decodeable { return &play.ClientInformation{} },\r\n\t\t0x0E: func() packet.Decodeable { return &play.ClickContainer{} },\r\n\t\t0x0F: func() packet.Decodeable { return &play.CloseContainer{} },\r\n\t\t0x12: func() packet.Decodeable { return &play.ServerboundPluginMessage{} },\r\n\t\t0x16: func() packet.Decodeable { return &play.Interact{} },\r\n\t\t0x18: func() packet.Decodeable { return &play.ServerboundKeepAlive{} },\r\n\t\t0x1A: func() packet.Decodeable { return &play.SetPlayerPosition{} },\r\n\t\t0x1B: func() packet.Decodeable { return &play.SetPlayerPositionAndRotation{} },\r\n\t\t0x1C: func() packet.Decodeable { return &play.SetPlayerRotation{} },\r\n\t\t0x1D: func() packet.Decodeable { return &play.SetPlayerOnGround{} },\r\n\t\t0x23: func() packet.Decodeable { return &play.PlayerAbilitiesServerbound{} },\r\n\t\t0x25: func() packet.Decodeable { return &play.PlayerCommand{} },\r\n\t\t0x2F: func() packet.Decodeable { return &play.SetHeldItemServerbound{} },\r\n\t\t0x32: func() packet.Decodeable { return &play.SetCreativeModeSlot{} },\r\n\t\t0x36: func() packet.Decodeable { return &play.SwingArm{} },\r\n\t\t0x38: func() packet.Decodeable { return &play.UseItemOn{} },\r\n\t},\r\n}\r\n"
  },
  {
    "path": "protocol/net/registry/embed.go",
    "content": "package registry\n\nvar Registries = map[string]interface{}{\"minecraft:banner_pattern\": map[string]struct {\n\tAssetId        string \"nbt:\\\"asset_id\\\"\"\n\tTranslationKey string \"nbt:\\\"translation_key\\\"\"\n}{\"minecraft:base\": {AssetId: \"minecraft:base\", TranslationKey: \"block.minecraft.banner.base\"}, \"minecraft:border\": {AssetId: \"minecraft:border\", TranslationKey: \"block.minecraft.banner.border\"}, \"minecraft:bricks\": {AssetId: \"minecraft:bricks\", TranslationKey: \"block.minecraft.banner.bricks\"}, \"minecraft:circle\": {AssetId: \"minecraft:circle\", TranslationKey: \"block.minecraft.banner.circle\"}, \"minecraft:creeper\": {AssetId: \"minecraft:creeper\", TranslationKey: \"block.minecraft.banner.creeper\"}, \"minecraft:cross\": {AssetId: \"minecraft:cross\", TranslationKey: \"block.minecraft.banner.cross\"}, \"minecraft:curly_border\": {AssetId: \"minecraft:curly_border\", TranslationKey: \"block.minecraft.banner.curly_border\"}, \"minecraft:diagonal_left\": {AssetId: \"minecraft:diagonal_left\", TranslationKey: \"block.minecraft.banner.diagonal_left\"}, \"minecraft:diagonal_right\": {AssetId: \"minecraft:diagonal_right\", TranslationKey: \"block.minecraft.banner.diagonal_right\"}, \"minecraft:diagonal_up_left\": {AssetId: \"minecraft:diagonal_up_left\", TranslationKey: \"block.minecraft.banner.diagonal_up_left\"}, \"minecraft:diagonal_up_right\": {AssetId: \"minecraft:diagonal_up_right\", TranslationKey: \"block.minecraft.banner.diagonal_up_right\"}, \"minecraft:flow\": {AssetId: \"minecraft:flow\", TranslationKey: \"block.minecraft.banner.flow\"}, \"minecraft:flower\": {AssetId: \"minecraft:flower\", TranslationKey: \"block.minecraft.banner.flower\"}, \"minecraft:globe\": {AssetId: \"minecraft:globe\", TranslationKey: \"block.minecraft.banner.globe\"}, \"minecraft:gradient\": {AssetId: \"minecraft:gradient\", TranslationKey: \"block.minecraft.banner.gradient\"}, \"minecraft:gradient_up\": {AssetId: \"minecraft:gradient_up\", TranslationKey: \"block.minecraft.banner.gradient_up\"}, \"minecraft:guster\": {AssetId: \"minecraft:guster\", TranslationKey: \"block.minecraft.banner.guster\"}, \"minecraft:half_horizontal\": {AssetId: \"minecraft:half_horizontal\", TranslationKey: \"block.minecraft.banner.half_horizontal\"}, \"minecraft:half_horizontal_bottom\": {AssetId: \"minecraft:half_horizontal_bottom\", TranslationKey: \"block.minecraft.banner.half_horizontal_bottom\"}, \"minecraft:half_vertical\": {AssetId: \"minecraft:half_vertical\", TranslationKey: \"block.minecraft.banner.half_vertical\"}, \"minecraft:half_vertical_right\": {AssetId: \"minecraft:half_vertical_right\", TranslationKey: \"block.minecraft.banner.half_vertical_right\"}, \"minecraft:mojang\": {AssetId: \"minecraft:mojang\", TranslationKey: \"block.minecraft.banner.mojang\"}, \"minecraft:piglin\": {AssetId: \"minecraft:piglin\", TranslationKey: \"block.minecraft.banner.piglin\"}, \"minecraft:rhombus\": {AssetId: \"minecraft:rhombus\", TranslationKey: \"block.minecraft.banner.rhombus\"}, \"minecraft:skull\": {AssetId: \"minecraft:skull\", TranslationKey: \"block.minecraft.banner.skull\"}, \"minecraft:small_stripes\": {AssetId: \"minecraft:small_stripes\", TranslationKey: \"block.minecraft.banner.small_stripes\"}, \"minecraft:square_bottom_left\": {AssetId: \"minecraft:square_bottom_left\", TranslationKey: \"block.minecraft.banner.square_bottom_left\"}, \"minecraft:square_bottom_right\": {AssetId: \"minecraft:square_bottom_right\", TranslationKey: \"block.minecraft.banner.square_bottom_right\"}, \"minecraft:square_top_left\": {AssetId: \"minecraft:square_top_left\", TranslationKey: \"block.minecraft.banner.square_top_left\"}, \"minecraft:square_top_right\": {AssetId: \"minecraft:square_top_right\", TranslationKey: \"block.minecraft.banner.square_top_right\"}, \"minecraft:straight_cross\": {AssetId: \"minecraft:straight_cross\", TranslationKey: \"block.minecraft.banner.straight_cross\"}, \"minecraft:stripe_bottom\": {AssetId: \"minecraft:stripe_bottom\", TranslationKey: \"block.minecraft.banner.stripe_bottom\"}, \"minecraft:stripe_center\": {AssetId: \"minecraft:stripe_center\", TranslationKey: \"block.minecraft.banner.stripe_center\"}, \"minecraft:stripe_downleft\": {AssetId: \"minecraft:stripe_downleft\", TranslationKey: \"block.minecraft.banner.stripe_downleft\"}, \"minecraft:stripe_downright\": {AssetId: \"minecraft:stripe_downright\", TranslationKey: \"block.minecraft.banner.stripe_downright\"}, \"minecraft:stripe_left\": {AssetId: \"minecraft:stripe_left\", TranslationKey: \"block.minecraft.banner.stripe_left\"}, \"minecraft:stripe_middle\": {AssetId: \"minecraft:stripe_middle\", TranslationKey: \"block.minecraft.banner.stripe_middle\"}, \"minecraft:stripe_right\": {AssetId: \"minecraft:stripe_right\", TranslationKey: \"block.minecraft.banner.stripe_right\"}, \"minecraft:stripe_top\": {AssetId: \"minecraft:stripe_top\", TranslationKey: \"block.minecraft.banner.stripe_top\"}, \"minecraft:triangle_bottom\": {AssetId: \"minecraft:triangle_bottom\", TranslationKey: \"block.minecraft.banner.triangle_bottom\"}, \"minecraft:triangle_top\": {AssetId: \"minecraft:triangle_top\", TranslationKey: \"block.minecraft.banner.triangle_top\"}, \"minecraft:triangles_bottom\": {AssetId: \"minecraft:triangles_bottom\", TranslationKey: \"block.minecraft.banner.triangles_bottom\"}, \"minecraft:triangles_top\": {AssetId: \"minecraft:triangles_top\", TranslationKey: \"block.minecraft.banner.triangles_top\"}}, \"minecraft:chat_type\": map[string]ChatType{\"minecraft:chat\": {Chat: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n\tStyle          struct {\n\t\tColor  string \"nbt:\\\"color\\\"\"\n\t\tItalic bool   \"nbt:\\\"italic\\\"\"\n\t} \"nbt:\\\"style,omitempty\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"chat.type.text\", Style: struct {\n\tColor  string \"nbt:\\\"color\\\"\"\n\tItalic bool   \"nbt:\\\"italic\\\"\"\n}{Color: \"\", Italic: false}}, Narration: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"chat.type.text.narrate\"}}, \"minecraft:emote_command\": {Chat: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n\tStyle          struct {\n\t\tColor  string \"nbt:\\\"color\\\"\"\n\t\tItalic bool   \"nbt:\\\"italic\\\"\"\n\t} \"nbt:\\\"style,omitempty\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"chat.type.emote\", Style: struct {\n\tColor  string \"nbt:\\\"color\\\"\"\n\tItalic bool   \"nbt:\\\"italic\\\"\"\n}{Color: \"\", Italic: false}}, Narration: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"chat.type.emote\"}}, \"minecraft:msg_command_incoming\": {Chat: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n\tStyle          struct {\n\t\tColor  string \"nbt:\\\"color\\\"\"\n\t\tItalic bool   \"nbt:\\\"italic\\\"\"\n\t} \"nbt:\\\"style,omitempty\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"commands.message.display.incoming\", Style: struct {\n\tColor  string \"nbt:\\\"color\\\"\"\n\tItalic bool   \"nbt:\\\"italic\\\"\"\n}{Color: \"\", Italic: false}}, Narration: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"chat.type.text.narrate\"}}, \"minecraft:msg_command_outgoing\": {Chat: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n\tStyle          struct {\n\t\tColor  string \"nbt:\\\"color\\\"\"\n\t\tItalic bool   \"nbt:\\\"italic\\\"\"\n\t} \"nbt:\\\"style,omitempty\\\"\"\n}{Parameters: []string{\"target\", \"content\"}, TranslationKey: \"commands.message.display.outgoing\", Style: struct {\n\tColor  string \"nbt:\\\"color\\\"\"\n\tItalic bool   \"nbt:\\\"italic\\\"\"\n}{Color: \"\", Italic: false}}, Narration: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"chat.type.text.narrate\"}}, \"minecraft:say_command\": {Chat: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n\tStyle          struct {\n\t\tColor  string \"nbt:\\\"color\\\"\"\n\t\tItalic bool   \"nbt:\\\"italic\\\"\"\n\t} \"nbt:\\\"style,omitempty\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"chat.type.announcement\", Style: struct {\n\tColor  string \"nbt:\\\"color\\\"\"\n\tItalic bool   \"nbt:\\\"italic\\\"\"\n}{Color: \"\", Italic: false}}, Narration: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"chat.type.text.narrate\"}}, \"minecraft:team_msg_command_incoming\": {Chat: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n\tStyle          struct {\n\t\tColor  string \"nbt:\\\"color\\\"\"\n\t\tItalic bool   \"nbt:\\\"italic\\\"\"\n\t} \"nbt:\\\"style,omitempty\\\"\"\n}{Parameters: []string{\"target\", \"sender\", \"content\"}, TranslationKey: \"chat.type.team.text\", Style: struct {\n\tColor  string \"nbt:\\\"color\\\"\"\n\tItalic bool   \"nbt:\\\"italic\\\"\"\n}{Color: \"\", Italic: false}}, Narration: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"chat.type.text.narrate\"}}, \"minecraft:team_msg_command_outgoing\": {Chat: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n\tStyle          struct {\n\t\tColor  string \"nbt:\\\"color\\\"\"\n\t\tItalic bool   \"nbt:\\\"italic\\\"\"\n\t} \"nbt:\\\"style,omitempty\\\"\"\n}{Parameters: []string{\"target\", \"sender\", \"content\"}, TranslationKey: \"chat.type.team.sent\", Style: struct {\n\tColor  string \"nbt:\\\"color\\\"\"\n\tItalic bool   \"nbt:\\\"italic\\\"\"\n}{Color: \"\", Italic: false}}, Narration: struct {\n\tParameters     []string \"nbt:\\\"parameters\\\"\"\n\tTranslationKey string   \"nbt:\\\"translation_key\\\"\"\n}{Parameters: []string{\"sender\", \"content\"}, TranslationKey: \"chat.type.text.narrate\"}}}, \"minecraft:damage_type\": map[string]struct {\n\tExhaustion       float32 \"nbt:\\\"exhaustion\\\"\"\n\tMessageID        string  \"nbt:\\\"message_id\\\"\"\n\tScaling          string  \"nbt:\\\"scaling\\\"\"\n\tDeathMessageType string  \"nbt:\\\"death_message_type,omitempty\\\"\"\n\tEffects          string  \"nbt:\\\"effects,omitempty\\\"\"\n}{\"minecraft:arrow\": {Exhaustion: 0.1, MessageID: \"arrow\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:bad_respawn_point\": {Exhaustion: 0.1, MessageID: \"badRespawnPoint\", Scaling: \"always\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:cactus\": {Exhaustion: 0.1, MessageID: \"cactus\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:campfire\": {Exhaustion: 0.1, MessageID: \"inFire\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:cramming\": {Exhaustion: 0, MessageID: \"cramming\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:dragon_breath\": {Exhaustion: 0, MessageID: \"dragonBreath\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:drown\": {Exhaustion: 0, MessageID: \"drown\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:dry_out\": {Exhaustion: 0.1, MessageID: \"dryout\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:explosion\": {Exhaustion: 0.1, MessageID: \"explosion\", Scaling: \"always\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:fall\": {Exhaustion: 0, MessageID: \"fall\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:falling_anvil\": {Exhaustion: 0.1, MessageID: \"anvil\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:falling_block\": {Exhaustion: 0.1, MessageID: \"fallingBlock\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:falling_stalactite\": {Exhaustion: 0.1, MessageID: \"fallingStalactite\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:fireball\": {Exhaustion: 0.1, MessageID: \"fireball\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:fireworks\": {Exhaustion: 0.1, MessageID: \"fireworks\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:fly_into_wall\": {Exhaustion: 0, MessageID: \"flyIntoWall\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:freeze\": {Exhaustion: 0, MessageID: \"freeze\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:generic\": {Exhaustion: 0, MessageID: \"generic\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:generic_kill\": {Exhaustion: 0, MessageID: \"genericKill\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:hot_floor\": {Exhaustion: 0.1, MessageID: \"hotFloor\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:in_fire\": {Exhaustion: 0.1, MessageID: \"inFire\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:in_wall\": {Exhaustion: 0, MessageID: \"inWall\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:indirect_magic\": {Exhaustion: 0, MessageID: \"indirectMagic\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:lava\": {Exhaustion: 0.1, MessageID: \"lava\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:lightning_bolt\": {Exhaustion: 0.1, MessageID: \"lightningBolt\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:magic\": {Exhaustion: 0, MessageID: \"magic\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:mob_attack\": {Exhaustion: 0.1, MessageID: \"mob\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:mob_attack_no_aggro\": {Exhaustion: 0.1, MessageID: \"mob\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:mob_projectile\": {Exhaustion: 0.1, MessageID: \"mob\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:on_fire\": {Exhaustion: 0, MessageID: \"onFire\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:out_of_world\": {Exhaustion: 0, MessageID: \"outOfWorld\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:outside_border\": {Exhaustion: 0, MessageID: \"outsideBorder\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:player_attack\": {Exhaustion: 0.1, MessageID: \"player\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:player_explosion\": {Exhaustion: 0.1, MessageID: \"explosion.player\", Scaling: \"always\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:sonic_boom\": {Exhaustion: 0, MessageID: \"sonic_boom\", Scaling: \"always\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:spit\": {Exhaustion: 0.1, MessageID: \"mob\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:stalagmite\": {Exhaustion: 0, MessageID: \"stalagmite\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:starve\": {Exhaustion: 0, MessageID: \"starve\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:sting\": {Exhaustion: 0.1, MessageID: \"sting\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:sweet_berry_bush\": {Exhaustion: 0.1, MessageID: \"sweetBerryBush\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:thorns\": {Exhaustion: 0.1, MessageID: \"thorns\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:thrown\": {Exhaustion: 0.1, MessageID: \"thrown\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:trident\": {Exhaustion: 0.1, MessageID: \"trident\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:unattributed_fireball\": {Exhaustion: 0.1, MessageID: \"onFire\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:wind_charge\": {Exhaustion: 0.1, MessageID: \"mob\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:wither\": {Exhaustion: 0, MessageID: \"wither\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}, \"minecraft:wither_skull\": {Exhaustion: 0.1, MessageID: \"witherSkull\", Scaling: \"when_caused_by_living_non_player\", DeathMessageType: \"\", Effects: \"\"}}, \"minecraft:dimension_type\": struct {\n\tOverworld      Dimension  \"nbt:\\\"minecraft:overworld\\\"\"\n\tOverworldCaves Dimension  \"nbt:\\\"minecraft:overworld_caves\\\"\"\n\tTheEnd         Dimension  \"nbt:\\\"minecraft:the_end\\\"\"\n\tTheNether      Dimension1 \"nbt:\\\"minecraft:the_nether\\\"\"\n}{Overworld: Dimension{AmbientLight: 0, BedWorks: true, CoordinateScale: 1, Effects: \"minecraft:overworld\", HasCeiling: false, HasRaids: true, HasSkylight: true, Height: 384, Infiniburn: \"#minecraft:infiniburn_overworld\", LogicalHeight: 384, MinY: -64, MonsterSpawnBlockLightLimit: 0, Natural: true, Ultrawarm: false, PiglinSafe: false, RespawnAnchorWorks: false, MonsterSpawnLightLevel: struct {\n\tMaxInclusive int32  \"nbt:\\\"max_inclusive\\\"\"\n\tMinInclusive int32  \"nbt:\\\"min_inclusive\\\"\"\n\tType         string \"nbt:\\\"type\\\"\"\n}{MaxInclusive: 7, MinInclusive: 0, Type: \"minecraft:uniform\"}}, OverworldCaves: Dimension{AmbientLight: 0, BedWorks: true, CoordinateScale: 1, Effects: \"minecraft:overworld\", HasCeiling: true, HasRaids: true, HasSkylight: true, Height: 384, Infiniburn: \"#minecraft:infiniburn_overworld\", LogicalHeight: 384, MinY: -64, MonsterSpawnBlockLightLimit: 0, Natural: true, Ultrawarm: false, PiglinSafe: false, RespawnAnchorWorks: false, MonsterSpawnLightLevel: struct {\n\tMaxInclusive int32  \"nbt:\\\"max_inclusive\\\"\"\n\tMinInclusive int32  \"nbt:\\\"min_inclusive\\\"\"\n\tType         string \"nbt:\\\"type\\\"\"\n}{MaxInclusive: 7, MinInclusive: 0, Type: \"minecraft:uniform\"}}, TheEnd: Dimension{FixedTime: 6000, AmbientLight: 0, BedWorks: false, CoordinateScale: 1, Effects: \"minecraft:the_end\", HasCeiling: false, HasRaids: true, HasSkylight: false, Height: 256, Infiniburn: \"#minecraft:infiniburn_end\", LogicalHeight: 256, MinY: 0, MonsterSpawnBlockLightLimit: 0, Natural: false, Ultrawarm: false, PiglinSafe: false, RespawnAnchorWorks: false, MonsterSpawnLightLevel: struct {\n\tMaxInclusive int32  \"nbt:\\\"max_inclusive\\\"\"\n\tMinInclusive int32  \"nbt:\\\"min_inclusive\\\"\"\n\tType         string \"nbt:\\\"type\\\"\"\n}{MaxInclusive: 7, MinInclusive: 0, Type: \"minecraft:uniform\"}}, TheNether: Dimension1{FixedTime: 18000, AmbientLight: 0.1, BedWorks: false, CoordinateScale: 8, Effects: \"minecraft:the_nether\", HasCeiling: true, HasRaids: false, HasSkylight: false, Height: 256, Infiniburn: \"#minecraft:infiniburn_nether\", LogicalHeight: 128, MinY: 0, MonsterSpawnBlockLightLimit: 15, Natural: false, Ultrawarm: true, PiglinSafe: true, RespawnAnchorWorks: true, MonsterSpawnLightLevel: 7}}, \"minecraft:enchantment\": map[string]struct {\n\tAnvilCost   int32 \"nbt:\\\"anvil_cost\\\"\"\n\tDescription struct {\n\t\tTranslate string \"nbt:\\\"translate\\\"\"\n\t} \"nbt:\\\"description\\\"\"\n\tEffects struct {\n\t\tSmashDamagePerFallenBlock []struct {\n\t\t\tEffect struct {\n\t\t\t\tType  string \"nbt:\\\"type\\\"\"\n\t\t\t\tValue struct {\n\t\t\t\t\tBase               float32 \"nbt:\\\"base\\\"\"\n\t\t\t\t\tPerLevelAboveFirst float32 \"nbt:\\\"per_level_above_first\\\"\"\n\t\t\t\t\tType               string  \"nbt:\\\"type\\\"\"\n\t\t\t\t} \"nbt:\\\"value\\\"\"\n\t\t\t} \"nbt:\\\"effect\\\"\"\n\t\t} \"nbt:\\\"minecraft:smash_damage_per_fallen_block\\\"\"\n\t\tPreventArmorChange struct{} \"nbt:\\\"minecraft:prevent_armor_change\\\"\"\n\t\tHitBlock           []struct {\n\t\t\tEffect struct {\n\t\t\t\tEffects []struct {\n\t\t\t\t\tType   string  \"nbt:\\\"type\\\"\"\n\t\t\t\t\tEntity string  \"nbt:\\\"state\\\"\"\n\t\t\t\t\tPitch  float32 \"nbt:\\\"pitch\\\"\"\n\t\t\t\t\tSound  string  \"nbt:\\\"sound\\\"\"\n\t\t\t\t\tVolume float32 \"nbt:\\\"volume\\\"\"\n\t\t\t\t} \"nbt:\\\"effects\\\"\"\n\t\t\t\tType string \"nbt:\\\"type\\\"\"\n\t\t\t} \"nbt:\\\"effect\\\"\"\n\t\t\tRequirements struct {\n\t\t\t\tCondition string \"nbt:\\\"condition\\\"\"\n\t\t\t\tTerms     []struct {\n\t\t\t\t\tBlock      string \"nbt:\\\"block\\\"\"\n\t\t\t\t\tCondition  string \"nbt:\\\"condition\\\"\"\n\t\t\t\t\tThundering bool   \"nbt:\\\"thundering\\\"\"\n\t\t\t\t\tEntity     string \"nbt:\\\"state\\\"\"\n\t\t\t\t\tPredicate  struct {\n\t\t\t\t\t\tType      string \"nbt:\\\"type\\\"\"\n\t\t\t\t\t\tCanSeeSky bool   \"nbt:\\\"can_see_sky\\\"\"\n\t\t\t\t\t} \"nbt:\\\"predicate\\\"\"\n\t\t\t\t} \"nbt:\\\"terms\\\"\"\n\t\t\t} \"nbt:\\\"requirements\\\"\"\n\t\t} \"nbt:\\\"minecraft:hit_block\\\"\"\n\t\tArmorEffectiveness []struct {\n\t\t\tEffect struct {\n\t\t\t\tType  string \"nbt:\\\"type\\\"\"\n\t\t\t\tValue struct {\n\t\t\t\t\tBase               float32 \"nbt:\\\"base\\\"\"\n\t\t\t\t\tPerLevelAboveFirst float32 \"nbt:\\\"per_level_above_first\\\"\"\n\t\t\t\t\tType               string  \"nbt:\\\"type\\\"\"\n\t\t\t\t} \"nbt:\\\"value\\\"\"\n\t\t\t} \"nbt:\\\"effect\\\"\"\n\t\t} \"nbt:\\\"minecraft:armor_effectiveness\\\"\"\n\t\tAttributes []struct {\n\t\t\tAmount struct {\n\t\t\t\tAdded              float32 \"nbt:\\\"added\\\"\"\n\t\t\t\tBase               float32 \"nbt:\\\"base\\\"\"\n\t\t\t\tPerLevelAboveFirst float32 \"nbt:\\\"per_level_above_first\\\"\"\n\t\t\t\tType               string  \"nbt:\\\"type\\\"\"\n\t\t\t} \"nbt:\\\"amount\\\"\"\n\t\t\tAtrribute string \"nbt:\\\"attribute\\\"\"\n\t\t\tId        string \"nbt:\\\"id\\\"\"\n\t\t\tOperation string \"nbt:\\\"operation\\\"\"\n\t\t} \"nbt:\\\"minecraft:attributes\\\"\"\n\t\tAmmoUse []struct {\n\t\t\tEffect struct {\n\t\t\t\tType  string  \"nbt:\\\"type\\\"\"\n\t\t\t\tValue float32 \"nbt:\\\"value\\\"\"\n\t\t\t} \"nbt:\\\"effect\\\"\"\n\t\t\tRequirements struct {\n\t\t\t\tCondition string \"nbt:\\\"condition\\\"\"\n\t\t\t\tPredicate struct {\n\t\t\t\t\tItems string \"nbt:\\\"items\\\"\"\n\t\t\t\t} \"nbt:\\\"predicate\\\"\"\n\t\t\t} \"nbt:\\\"requirements\\\"\"\n\t\t} \"nbt:\\\"minecraft:ammo_use\\\"\"\n\t\tProjectileSpawned []struct {\n\t\t\tEffect struct {\n\t\t\t\tDuration float32 \"nbt:\\\"duration\\\"\"\n\t\t\t\tType     string  \"nbt:\\\"type\\\"\"\n\t\t\t} \"nbt:\\\"effect\\\"\"\n\t\t} \"nbt:\\\"minecraft:projectile_spawned\\\"\"\n\t\tLocationChanged []struct {\n\t\t\tEffect struct {\n\t\t\t\tBlockState struct {\n\t\t\t\t\tState struct {\n\t\t\t\t\t\tName       string\n\t\t\t\t\t\tProperties map[string]interface{}\n\t\t\t\t\t} \"nbt:\\\"state\\\"\"\n\t\t\t\t\tType string \"nbt:\\\"type\\\"\"\n\t\t\t\t} \"nbt:\\\"block_state\\\"\"\n\t\t\t\tHeight    float32 \"nbt:\\\"height\\\"\"\n\t\t\t\tOffset    []int32 \"nbt:\\\"offset\\\"\"\n\t\t\t\tPredicate struct {\n\t\t\t\t\tPredicates []struct {\n\t\t\t\t\t\tOffset []int32 \"nbt:\\\"offset\\\"\"\n\t\t\t\t\t\tTag    string  \"nbt:\\\"tag\\\"\"\n\t\t\t\t\t\tType   string  \"nbt:\\\"type\\\"\"\n\t\t\t\t\t\tBlocks string  \"nbt:\\\"blocks\\\"\"\n\t\t\t\t\t\tFluids string  \"nbt:\\\"fluids\\\"\"\n\t\t\t\t\t} \"nbt:\\\"predicates\\\"\"\n\t\t\t\t\tRadius struct {\n\t\t\t\t\t\tMax   float32 \"nbt:\\\"max\\\"\"\n\t\t\t\t\t\tMin   float32 \"nbt:\\\"min\\\"\"\n\t\t\t\t\t\tType  string  \"nbt:\\\"type\\\"\"\n\t\t\t\t\t\tValue struct {\n\t\t\t\t\t\t\tBase               float32 \"nbt:\\\"base\\\"\"\n\t\t\t\t\t\t\tPerLevelAboveFirst float32 \"nbt:\\\"per_level_above_first\\\"\"\n\t\t\t\t\t\t\tType               string  \"nbt:\\\"type\\\"\"\n\t\t\t\t\t\t} \"nbt:\\\"value\\\"\"\n\t\t\t\t\t} \"nbt:\\\"radius\\\"\"\n\t\t\t\t\tType string \"nbt:\\\"type\\\"\"\n\t\t\t\t} \"nbt:\\\"predicate\\\"\"\n\t\t\t\tTriggerGameEvent string \"nbt:\\\"trigger_game_event\\\"\"\n\t\t\t\tType             string \"nbt:\\\"type\\\"\"\n\t\t\t} \"nbt:\\\"effect\\\"\"\n\t\t\tRequirements struct {\n\t\t\t\tCondition string \"nbt:\\\"condition\\\"\"\n\t\t\t\tEntity    string \"nbt:\\\"state\\\"\"\n\t\t\t\tPredicate struct {\n\t\t\t\t\tFlags struct {\n\t\t\t\t\t\tIsOnGround bool \"nbt:\\\"is_on_ground\\\"\"\n\t\t\t\t\t} \"nbt:\\\"flags\\\"\"\n\t\t\t\t} \"nbt:\\\"predicate\\\"\"\n\t\t\t} \"nbt:\\\"requirements\\\"\"\n\t\t} \"nbt:\\\"minecraft:location_changed\\\"\"\n\t\tDamageImmunity []struct {\n\t\t\tEffect       struct{}\n\t\t\tRequirements struct {\n\t\t\t\tCondition string \"nbt:\\\"condition\\\"\"\n\t\t\t\tPredicate struct {\n\t\t\t\t\tTags []struct {\n\t\t\t\t\t\tExpected bool   \"nbt:\\\"expected\\\"\"\n\t\t\t\t\t\tId       string \"nbt:\\\"id\\\"\"\n\t\t\t\t\t} \"nbt:\\\"tags\\\"\"\n\t\t\t\t} \"nbt:\\\"predicate\\\"\"\n\t\t\t} \"nbt:\\\"requirements\\\"\"\n\t\t} \"nbt:\\\"minecraft:damage_immunity\\\"\"\n\t\tDamageProtection []struct {\n\t\t\tEffect struct {\n\t\t\t\tType  string \"nbt:\\\"type\\\"\"\n\t\t\t\tValue struct {\n\t\t\t\t\tBase               float32 \"nbt:\\\"base\\\"\"\n\t\t\t\t\tPerLevelAboveFirst float32 \"nbt:\\\"per_level_above_first\\\"\"\n\t\t\t\t\tType               string  \"nbt:\\\"type\\\"\"\n\t\t\t\t} \"nbt:\\\"value\\\"\"\n\t\t\t} \"nbt:\\\"effect\\\"\"\n\t\t\tRequirements struct {\n\t\t\t\tCondition string \"nbt:\\\"condition\\\"\"\n\t\t\t\tPredicate struct {\n\t\t\t\t\tTags []struct {\n\t\t\t\t\t\tExpected bool   \"nbt:\\\"expected\\\"\"\n\t\t\t\t\t\tId       string \"nbt:\\\"id\\\"\"\n\t\t\t\t\t} \"nbt:\\\"tags\\\"\"\n\t\t\t\t} \"nbt:\\\"predicate\\\"\"\n\t\t\t\tTerms []struct {\n\t\t\t\t\tCondition string \"nbt:\\\"condition\\\"\"\n\t\t\t\t\tPredicate struct {\n\t\t\t\t\t\tTags []struct {\n\t\t\t\t\t\t\tExpected bool   \"nbt:\\\"expected\\\"\"\n\t\t\t\t\t\t\tId       string \"nbt:\\\"id\\\"\"\n\t\t\t\t\t\t} \"nbt:\\\"tags\\\"\"\n\t\t\t\t\t} \"nbt:\\\"predicate\\\"\"\n\t\t\t\t} \"nbt:\\\"terms\\\"\"\n\t\t\t} \"nbt:\\\"requirements\\\"\"\n\t\t} \"nbt:\\\"minecraft:damage_protection\\\"\"\n\t\tDamage []struct {\n\t\t\tEffect struct {\n\t\t\t\tType  string \"nbt:\\\"type\\\"\"\n\t\t\t\tValue struct {\n\t\t\t\t\tBase               float32 \"nbt:\\\"base\\\"\"\n\t\t\t\t\tPerLevelAboveFirst float32 \"nbt:\\\"per_level_above_first\\\"\"\n\t\t\t\t\tType               string  \"nbt:\\\"type\\\"\"\n\t\t\t\t} \"nbt:\\\"value\\\"\"\n\t\t\t} \"nbt:\\\"effect\\\"\"\n\t\t\tRequirements struct {\n\t\t\t\tCondition string \"nbt:\\\"condition\\\"\"\n\t\t\t\tEntity    string \"nbt:\\\"state\\\"\"\n\t\t\t\tPredicate struct {\n\t\t\t\t\tType string \"nbt:\\\"type\\\"\"\n\t\t\t\t} \"nbt:\\\"predicate\\\"\"\n\t\t\t} \"nbt:\\\"requirements\\\"\"\n\t\t} \"nbt:\\\"minecraft:damage\\\"\"\n\t\tPostAttack []struct {\n\t\t\tAffected string \"nbt:\\\"affected\\\"\"\n\t\t\tEffect   struct {\n\t\t\t\tMaxAmplifier float32 \"nbt:\\\"max_amplifier\\\"\"\n\t\t\t\tMaxDuration  struct {\n\t\t\t\t\tBase               float32 \"nbt:\\\"base\\\"\"\n\t\t\t\t\tPerLevelAboveFirst float32 \"nbt:\\\"per_level_above_first\\\"\"\n\t\t\t\t\tType               string  \"nbt:\\\"type\\\"\"\n\t\t\t\t} \"nbt:\\\"max_duration\\\"\"\n\t\t\t\tDuration struct {\n\t\t\t\t\tBase               float32 \"nbt:\\\"base\\\"\"\n\t\t\t\t\tPerLevelAboveFirst float32 \"nbt:\\\"per_level_above_first\\\"\"\n\t\t\t\t\tType               string  \"nbt:\\\"type\\\"\"\n\t\t\t\t} \"nbt:\\\"duration\\\"\"\n\t\t\t\tMinAmplifier float32 \"nbt:\\\"min_amplifier\\\"\"\n\t\t\t\tMinDuration  float32 \"nbt:\\\"min_duration\\\"\"\n\t\t\t\tToApply      string  \"nbt:\\\"to_apply\\\"\"\n\t\t\t\tType         string  \"nbt:\\\"type\\\"\"\n\t\t\t\tEffects      []struct {\n\t\t\t\t\tType   string  \"nbt:\\\"type\\\"\"\n\t\t\t\t\tEntity string  \"nbt:\\\"state\\\"\"\n\t\t\t\t\tPitch  float32 \"nbt:\\\"pitch\\\"\"\n\t\t\t\t\tSound  string  \"nbt:\\\"sound\\\"\"\n\t\t\t\t\tVolume float32 \"nbt:\\\"volume\\\"\"\n\t\t\t\t} \"nbt:\\\"effects\\\"\"\n\t\t\t} \"nbt:\\\"effect\\\"\"\n\t\t\tEnchanted    string \"nbt:\\\"enchanted\\\"\"\n\t\t\tRequirements struct {\n\t\t\t\tCondition string \"nbt:\\\"condition\\\"\"\n\t\t\t\tPredicate struct {\n\t\t\t\t\tIsDirect bool \"nbt:\\\"is_direct\\\"\"\n\t\t\t\t} \"nbt:\\\"predicate\\\"\"\n\t\t\t\tTerms []struct {\n\t\t\t\t\tCondition  string \"nbt:\\\"condition\\\"\"\n\t\t\t\t\tThundering bool   \"nbt:\\\"thundering\\\"\"\n\t\t\t\t\tEntity     string \"nbt:\\\"state\\\"\"\n\t\t\t\t\tPredicate  struct {\n\t\t\t\t\t\tIsDirect bool   \"nbt:\\\"is_direct\\\"\"\n\t\t\t\t\t\tType     string \"nbt:\\\"type\\\"\"\n\t\t\t\t\t\tLocation struct {\n\t\t\t\t\t\t\tCanSeeSky bool \"nbt:\\\"can_see_sky\\\"\"\n\t\t\t\t\t\t} \"nbt:\\\"location\\\"\"\n\t\t\t\t\t} \"nbt:\\\"predicate\\\"\"\n\t\t\t\t} \"nbt:\\\"terms\\\"\"\n\t\t\t} \"nbt:\\\"requirements\\\"\"\n\t\t} \"nbt:\\\"minecraft:post_attack\\\"\"\n\t} \"nbt:\\\"effects\\\"\"\n\tMaxCost struct {\n\t\tBase               int32 \"nbt:\\\"base\\\"\"\n\t\tPerLevelAboveFirst int32 \"nbt:\\\"per_level_above_first\\\"\"\n\t} \"nbt:\\\"max_cost\\\"\"\n\tMinCost struct {\n\t\tBase               int32 \"nbt:\\\"base\\\"\"\n\t\tPerLevelAboveFirst int32 \"nbt:\\\"per_level_above_first\\\"\"\n\t} \"nbt:\\\"min_cost\\\"\"\n\tMaxLevel       int32    \"nbt:\\\"max_level\\\"\"\n\tSlots          []string \"nbt:\\\"slots\\\"\"\n\tSupportedItems string   \"nbt:\\\"supported_items\\\"\"\n\tWeight         int32    \"nbt:\\\"weight\\\"\"\n\tExclusiveSet   string   \"nbt:\\\"exclusive_set\\\"\"\n\tPrimaryItems   string   \"nbt:\\\"primary_items\\\"\"\n}(nil), \"minecraft:jukebox_song\": map[string]struct {\n\tComparatorOutput int32 \"nbt:\\\"comparator_output\\\"\"\n\tDescription      struct {\n\t\tTranslate string \"nbt:\\\"translate\\\"\"\n\t} \"nbt:\\\"description\\\"\"\n\tLengthInSeconds float32 \"nbt:\\\"length_in_seconds\\\"\"\n\tSoundEvent      string  \"nbt:\\\"sound_event\\\"\"\n}{\"minecraft:11\": {ComparatorOutput: 11, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.11\"}, LengthInSeconds: 71, SoundEvent: \"minecraft:music_disc.11\"}, \"minecraft:13\": {ComparatorOutput: 1, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.13\"}, LengthInSeconds: 178, SoundEvent: \"minecraft:music_disc.13\"}, \"minecraft:5\": {ComparatorOutput: 15, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.5\"}, LengthInSeconds: 178, SoundEvent: \"minecraft:music_disc.5\"}, \"minecraft:blocks\": {ComparatorOutput: 3, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.blocks\"}, LengthInSeconds: 345, SoundEvent: \"minecraft:music_disc.blocks\"}, \"minecraft:cat\": {ComparatorOutput: 2, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.cat\"}, LengthInSeconds: 185, SoundEvent: \"minecraft:music_disc.cat\"}, \"minecraft:chirp\": {ComparatorOutput: 4, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.chirp\"}, LengthInSeconds: 185, SoundEvent: \"minecraft:music_disc.chirp\"}, \"minecraft:creator\": {ComparatorOutput: 12, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.creator\"}, LengthInSeconds: 176, SoundEvent: \"minecraft:music_disc.creator\"}, \"minecraft:creator_music_box\": {ComparatorOutput: 11, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.creator_music_box\"}, LengthInSeconds: 73, SoundEvent: \"minecraft:music_disc.creator_music_box\"}, \"minecraft:far\": {ComparatorOutput: 5, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.far\"}, LengthInSeconds: 174, SoundEvent: \"minecraft:music_disc.far\"}, \"minecraft:mall\": {ComparatorOutput: 6, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.mall\"}, LengthInSeconds: 197, SoundEvent: \"minecraft:music_disc.mall\"}, \"minecraft:mellohi\": {ComparatorOutput: 7, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.mellohi\"}, LengthInSeconds: 96, SoundEvent: \"minecraft:music_disc.mellohi\"}, \"minecraft:otherside\": {ComparatorOutput: 14, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.otherside\"}, LengthInSeconds: 195, SoundEvent: \"minecraft:music_disc.otherside\"}, \"minecraft:pigstep\": {ComparatorOutput: 13, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.pigstep\"}, LengthInSeconds: 149, SoundEvent: \"minecraft:music_disc.pigstep\"}, \"minecraft:precipice\": {ComparatorOutput: 13, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.precipice\"}, LengthInSeconds: 299, SoundEvent: \"minecraft:music_disc.precipice\"}, \"minecraft:relic\": {ComparatorOutput: 14, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.relic\"}, LengthInSeconds: 218, SoundEvent: \"minecraft:music_disc.relic\"}, \"minecraft:stal\": {ComparatorOutput: 8, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.stal\"}, LengthInSeconds: 150, SoundEvent: \"minecraft:music_disc.stal\"}, \"minecraft:strad\": {ComparatorOutput: 9, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.strad\"}, LengthInSeconds: 188, SoundEvent: \"minecraft:music_disc.strad\"}, \"minecraft:wait\": {ComparatorOutput: 12, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.wait\"}, LengthInSeconds: 238, SoundEvent: \"minecraft:music_disc.wait\"}, \"minecraft:ward\": {ComparatorOutput: 10, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"jukebox_song.minecraft.ward\"}, LengthInSeconds: 251, SoundEvent: \"minecraft:music_disc.ward\"}}, \"minecraft:painting_variant\": map[string]struct {\n\tAssetId string \"nbt:\\\"asset_id\\\"\"\n\tHeight  int32  \"nbt:\\\"height\\\"\"\n\tWeight  int32  \"nbt:\\\"width\\\"\"\n}{\"minecraft:alban\": {AssetId: \"minecraft:alban\", Height: 1, Weight: 1}, \"minecraft:aztec\": {AssetId: \"minecraft:aztec\", Height: 1, Weight: 1}, \"minecraft:aztec2\": {AssetId: \"minecraft:aztec2\", Height: 1, Weight: 1}, \"minecraft:backyard\": {AssetId: \"minecraft:backyard\", Height: 4, Weight: 3}, \"minecraft:baroque\": {AssetId: \"minecraft:baroque\", Height: 2, Weight: 2}, \"minecraft:bomb\": {AssetId: \"minecraft:bomb\", Height: 1, Weight: 1}, \"minecraft:bouquet\": {AssetId: \"minecraft:bouquet\", Height: 3, Weight: 3}, \"minecraft:burning_skull\": {AssetId: \"minecraft:burning_skull\", Height: 4, Weight: 4}, \"minecraft:bust\": {AssetId: \"minecraft:bust\", Height: 2, Weight: 2}, \"minecraft:cavebird\": {AssetId: \"minecraft:cavebird\", Height: 3, Weight: 3}, \"minecraft:changing\": {AssetId: \"minecraft:changing\", Height: 2, Weight: 4}, \"minecraft:cotan\": {AssetId: \"minecraft:cotan\", Height: 3, Weight: 3}, \"minecraft:courbet\": {AssetId: \"minecraft:courbet\", Height: 1, Weight: 2}, \"minecraft:creebet\": {AssetId: \"minecraft:creebet\", Height: 1, Weight: 2}, \"minecraft:donkey_kong\": {AssetId: \"minecraft:donkey_kong\", Height: 3, Weight: 4}, \"minecraft:earth\": {AssetId: \"minecraft:earth\", Height: 2, Weight: 2}, \"minecraft:endboss\": {AssetId: \"minecraft:endboss\", Height: 3, Weight: 3}, \"minecraft:fern\": {AssetId: \"minecraft:fern\", Height: 3, Weight: 3}, \"minecraft:fighters\": {AssetId: \"minecraft:fighters\", Height: 2, Weight: 4}, \"minecraft:finding\": {AssetId: \"minecraft:finding\", Height: 2, Weight: 4}, \"minecraft:fire\": {AssetId: \"minecraft:fire\", Height: 2, Weight: 2}, \"minecraft:graham\": {AssetId: \"minecraft:graham\", Height: 2, Weight: 1}, \"minecraft:humble\": {AssetId: \"minecraft:humble\", Height: 2, Weight: 2}, \"minecraft:kebab\": {AssetId: \"minecraft:kebab\", Height: 1, Weight: 1}, \"minecraft:lowmist\": {AssetId: \"minecraft:lowmist\", Height: 2, Weight: 4}, \"minecraft:match\": {AssetId: \"minecraft:match\", Height: 2, Weight: 2}, \"minecraft:meditative\": {AssetId: \"minecraft:meditative\", Height: 1, Weight: 1}, \"minecraft:orb\": {AssetId: \"minecraft:orb\", Height: 4, Weight: 4}, \"minecraft:owlemons\": {AssetId: \"minecraft:owlemons\", Height: 3, Weight: 3}, \"minecraft:passage\": {AssetId: \"minecraft:passage\", Height: 2, Weight: 4}, \"minecraft:pigscene\": {AssetId: \"minecraft:pigscene\", Height: 4, Weight: 4}, \"minecraft:plant\": {AssetId: \"minecraft:plant\", Height: 1, Weight: 1}, \"minecraft:pointer\": {AssetId: \"minecraft:pointer\", Height: 4, Weight: 4}, \"minecraft:pond\": {AssetId: \"minecraft:pond\", Height: 4, Weight: 3}, \"minecraft:pool\": {AssetId: \"minecraft:pool\", Height: 1, Weight: 2}, \"minecraft:prairie_ride\": {AssetId: \"minecraft:prairie_ride\", Height: 2, Weight: 1}, \"minecraft:sea\": {AssetId: \"minecraft:sea\", Height: 1, Weight: 2}, \"minecraft:skeleton\": {AssetId: \"minecraft:skeleton\", Height: 3, Weight: 4}, \"minecraft:skull_and_roses\": {AssetId: \"minecraft:skull_and_roses\", Height: 2, Weight: 2}, \"minecraft:stage\": {AssetId: \"minecraft:stage\", Height: 2, Weight: 2}, \"minecraft:sunflowers\": {AssetId: \"minecraft:sunflowers\", Height: 3, Weight: 3}, \"minecraft:sunset\": {AssetId: \"minecraft:sunset\", Height: 1, Weight: 2}, \"minecraft:tides\": {AssetId: \"minecraft:tides\", Height: 3, Weight: 3}, \"minecraft:unpacked\": {AssetId: \"minecraft:unpacked\", Height: 4, Weight: 4}, \"minecraft:void\": {AssetId: \"minecraft:void\", Height: 2, Weight: 2}, \"minecraft:wanderer\": {AssetId: \"minecraft:wanderer\", Height: 2, Weight: 1}, \"minecraft:wasteland\": {AssetId: \"minecraft:wasteland\", Height: 1, Weight: 1}, \"minecraft:water\": {AssetId: \"minecraft:water\", Height: 2, Weight: 2}, \"minecraft:wind\": {AssetId: \"minecraft:wind\", Height: 2, Weight: 2}, \"minecraft:wither\": {AssetId: \"minecraft:wither\", Height: 2, Weight: 2}}, \"minecraft:trim_material\": map[string]struct {\n\tAssetName   string \"nbt:\\\"asset_name\\\"\"\n\tDescription struct {\n\t\tColor     string \"nbt:\\\"color\\\"\"\n\t\tTranslate string \"nbt:\\\"translate\\\"\"\n\t} \"nbt:\\\"description\\\"\"\n\tIngredient             string  \"nbt:\\\"ingredient\\\"\"\n\tItemModelIndex         float32 \"nbt:\\\"item_model_index\\\"\"\n\tOverrideArmorMaterials struct {\n\t\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\t\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\t\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n\t} \"nbt:\\\"override_armor_materials,omitempty\\\"\"\n}{\"minecraft:amethyst\": {AssetName: \"amethyst\", Description: struct {\n\tColor     string \"nbt:\\\"color\\\"\"\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Color: \"#9A5CC6\", Translate: \"trim_material.minecraft.amethyst\"}, Ingredient: \"minecraft:amethyst_shard\", ItemModelIndex: 1, OverrideArmorMaterials: struct {\n\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n}{Diamond: \"\", Gold: \"\", Iron: \"\"}}, \"minecraft:copper\": {AssetName: \"copper\", Description: struct {\n\tColor     string \"nbt:\\\"color\\\"\"\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Color: \"#B4684D\", Translate: \"trim_material.minecraft.copper\"}, Ingredient: \"minecraft:copper_ingot\", ItemModelIndex: 0.5, OverrideArmorMaterials: struct {\n\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n}{Diamond: \"\", Gold: \"\", Iron: \"\"}}, \"minecraft:diamond\": {AssetName: \"diamond\", Description: struct {\n\tColor     string \"nbt:\\\"color\\\"\"\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Color: \"#6EECD2\", Translate: \"trim_material.minecraft.diamond\"}, Ingredient: \"minecraft:diamond\", ItemModelIndex: 0.8, OverrideArmorMaterials: struct {\n\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n}{Diamond: \"\", Gold: \"\", Iron: \"\"}}, \"minecraft:emerald\": {AssetName: \"emerald\", Description: struct {\n\tColor     string \"nbt:\\\"color\\\"\"\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Color: \"#11A036\", Translate: \"trim_material.minecraft.emerald\"}, Ingredient: \"minecraft:emerald\", ItemModelIndex: 0.7, OverrideArmorMaterials: struct {\n\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n}{Diamond: \"\", Gold: \"\", Iron: \"\"}}, \"minecraft:gold\": {AssetName: \"gold\", Description: struct {\n\tColor     string \"nbt:\\\"color\\\"\"\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Color: \"#DEB12D\", Translate: \"trim_material.minecraft.gold\"}, Ingredient: \"minecraft:gold_ingot\", ItemModelIndex: 0.6, OverrideArmorMaterials: struct {\n\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n}{Diamond: \"\", Gold: \"\", Iron: \"\"}}, \"minecraft:iron\": {AssetName: \"iron\", Description: struct {\n\tColor     string \"nbt:\\\"color\\\"\"\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Color: \"#ECECEC\", Translate: \"trim_material.minecraft.iron\"}, Ingredient: \"minecraft:iron_ingot\", ItemModelIndex: 0.2, OverrideArmorMaterials: struct {\n\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n}{Diamond: \"\", Gold: \"\", Iron: \"\"}}, \"minecraft:lapis\": {AssetName: \"lapis\", Description: struct {\n\tColor     string \"nbt:\\\"color\\\"\"\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Color: \"#416E97\", Translate: \"trim_material.minecraft.lapis\"}, Ingredient: \"minecraft:lapis_lazuli\", ItemModelIndex: 0.9, OverrideArmorMaterials: struct {\n\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n}{Diamond: \"\", Gold: \"\", Iron: \"\"}}, \"minecraft:netherite\": {AssetName: \"netherite\", Description: struct {\n\tColor     string \"nbt:\\\"color\\\"\"\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Color: \"#625859\", Translate: \"trim_material.minecraft.netherite\"}, Ingredient: \"minecraft:netherite_ingot\", ItemModelIndex: 0.3, OverrideArmorMaterials: struct {\n\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n}{Diamond: \"\", Gold: \"\", Iron: \"\"}}, \"minecraft:quartz\": {AssetName: \"quartz\", Description: struct {\n\tColor     string \"nbt:\\\"color\\\"\"\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Color: \"#E3D4C4\", Translate: \"trim_material.minecraft.quartz\"}, Ingredient: \"minecraft:quartz\", ItemModelIndex: 0.1, OverrideArmorMaterials: struct {\n\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n}{Diamond: \"\", Gold: \"\", Iron: \"\"}}, \"minecraft:redstone\": {AssetName: \"redstone\", Description: struct {\n\tColor     string \"nbt:\\\"color\\\"\"\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Color: \"#971607\", Translate: \"trim_material.minecraft.redstone\"}, Ingredient: \"minecraft:redstone\", ItemModelIndex: 0.4, OverrideArmorMaterials: struct {\n\tDiamond string \"nbt:\\\"minecraft:diamond,omitempty\\\"\"\n\tGold    string \"nbt:\\\"minecraft:gold,omitempty\\\"\"\n\tIron    string \"nbt:\\\"minecraft:iron,omitempty\\\"\"\n}{Diamond: \"\", Gold: \"\", Iron: \"\"}}}, \"minecraft:trim_pattern\": map[string]struct {\n\tAssetId     string \"nbt:\\\"asset_id\\\"\"\n\tDecal       bool   \"nbt:\\\"decal\\\"\"\n\tDescription struct {\n\t\tTranslate string \"nbt:\\\"translate\\\"\"\n\t} \"nbt:\\\"description\\\"\"\n\tTemplateItem string \"nbt:\\\"template_item\\\"\"\n}{\"minecraft:bolt\": {AssetId: \"minecraft:bolt\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.bolt\"}, TemplateItem: \"minecraft:bolt_armor_trim_smithing_template\"}, \"minecraft:coast\": {AssetId: \"minecraft:coast\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.coast\"}, TemplateItem: \"minecraft:coast_armor_trim_smithing_template\"}, \"minecraft:dune\": {AssetId: \"minecraft:dune\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.dune\"}, TemplateItem: \"minecraft:dune_armor_trim_smithing_template\"}, \"minecraft:eye\": {AssetId: \"minecraft:eye\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.eye\"}, TemplateItem: \"minecraft:eye_armor_trim_smithing_template\"}, \"minecraft:flow\": {AssetId: \"minecraft:flow\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.flow\"}, TemplateItem: \"minecraft:flow_armor_trim_smithing_template\"}, \"minecraft:host\": {AssetId: \"minecraft:host\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.host\"}, TemplateItem: \"minecraft:host_armor_trim_smithing_template\"}, \"minecraft:raiser\": {AssetId: \"minecraft:raiser\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.raiser\"}, TemplateItem: \"minecraft:raiser_armor_trim_smithing_template\"}, \"minecraft:rib\": {AssetId: \"minecraft:rib\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.rib\"}, TemplateItem: \"minecraft:rib_armor_trim_smithing_template\"}, \"minecraft:sentry\": {AssetId: \"minecraft:sentry\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.sentry\"}, TemplateItem: \"minecraft:sentry_armor_trim_smithing_template\"}, \"minecraft:shaper\": {AssetId: \"minecraft:shaper\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.shaper\"}, TemplateItem: \"minecraft:shaper_armor_trim_smithing_template\"}, \"minecraft:silence\": {AssetId: \"minecraft:silence\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.silence\"}, TemplateItem: \"minecraft:silence_armor_trim_smithing_template\"}, \"minecraft:snout\": {AssetId: \"minecraft:snout\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.snout\"}, TemplateItem: \"minecraft:snout_armor_trim_smithing_template\"}, \"minecraft:spire\": {AssetId: \"minecraft:spire\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.spire\"}, TemplateItem: \"minecraft:spire_armor_trim_smithing_template\"}, \"minecraft:tide\": {AssetId: \"minecraft:tide\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.tide\"}, TemplateItem: \"minecraft:tide_armor_trim_smithing_template\"}, \"minecraft:vex\": {AssetId: \"minecraft:vex\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.vex\"}, TemplateItem: \"minecraft:vex_armor_trim_smithing_template\"}, \"minecraft:ward\": {AssetId: \"minecraft:ward\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.ward\"}, TemplateItem: \"minecraft:ward_armor_trim_smithing_template\"}, \"minecraft:wayfinder\": {AssetId: \"minecraft:wayfinder\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.wayfinder\"}, TemplateItem: \"minecraft:wayfinder_armor_trim_smithing_template\"}, \"minecraft:wild\": {AssetId: \"minecraft:wild\", Decal: false, Description: struct {\n\tTranslate string \"nbt:\\\"translate\\\"\"\n}{Translate: \"trim_pattern.minecraft.wild\"}, TemplateItem: \"minecraft:wild_armor_trim_smithing_template\"}}, \"minecraft:wolf_variant\": map[string]struct {\n\tAngryTexture string \"nbt:\\\"angry_texture\\\"\"\n\tBiomes       string \"nbt:\\\"biomes\\\"\"\n\tTameTexture  string \"nbt:\\\"tame_texture\\\"\"\n\tWildTexture  string \"nbt:\\\"wild_texture\\\"\"\n}{\"minecraft:ashen\": {AngryTexture: \"minecraft:state/wolf/wolf_ashen_angry\", Biomes: \"minecraft:snowy_taiga\", TameTexture: \"minecraft:state/wolf/wolf_ashen_tame\", WildTexture: \"minecraft:state/wolf/wolf_ashen\"}, \"minecraft:black\": {AngryTexture: \"minecraft:state/wolf/wolf_black_angry\", Biomes: \"minecraft:old_growth_pine_taiga\", TameTexture: \"minecraft:state/wolf/wolf_black_tame\", WildTexture: \"minecraft:state/wolf/wolf_black\"}, \"minecraft:chestnut\": {AngryTexture: \"minecraft:state/wolf/wolf_chestnut_angry\", Biomes: \"minecraft:old_growth_spruce_taiga\", TameTexture: \"minecraft:state/wolf/wolf_chestnut_tame\", WildTexture: \"minecraft:state/wolf/wolf_chestnut\"}, \"minecraft:pale\": {AngryTexture: \"minecraft:state/wolf/wolf_angry\", Biomes: \"minecraft:taiga\", TameTexture: \"minecraft:state/wolf/wolf_tame\", WildTexture: \"minecraft:state/wolf/wolf\"}, \"minecraft:rusty\": {AngryTexture: \"minecraft:state/wolf/wolf_rusty_angry\", Biomes: \"#minecraft:is_jungle\", TameTexture: \"minecraft:state/wolf/wolf_rusty_tame\", WildTexture: \"minecraft:state/wolf/wolf_rusty\"}, \"minecraft:snowy\": {AngryTexture: \"minecraft:state/wolf/wolf_snowy_angry\", Biomes: \"minecraft:grove\", TameTexture: \"minecraft:state/wolf/wolf_snowy_tame\", WildTexture: \"minecraft:state/wolf/wolf_snowy\"}, \"minecraft:spotted\": {AngryTexture: \"minecraft:state/wolf/wolf_spotted_angry\", Biomes: \"#minecraft:is_savanna\", TameTexture: \"minecraft:state/wolf/wolf_spotted_tame\", WildTexture: \"minecraft:state/wolf/wolf_spotted\"}, \"minecraft:striped\": {AngryTexture: \"minecraft:state/wolf/wolf_striped_angry\", Biomes: \"#minecraft:is_badlands\", TameTexture: \"minecraft:state/wolf/wolf_striped_tame\", WildTexture: \"minecraft:state/wolf/wolf_striped\"}, \"minecraft:woods\": {AngryTexture: \"minecraft:state/wolf/wolf_woods_angry\", Biomes: \"minecraft:forest\", TameTexture: \"minecraft:state/wolf/wolf_woods_tame\", WildTexture: \"minecraft:state/wolf/wolf_woods\"}}, \"minecraft:worldgen/biome\": map[string]struct {\n\tDownfall float32 \"nbt:\\\"downfall\\\"\"\n\tEffects  struct {\n\t\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\t\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\t\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\t\tMoodSound    struct {\n\t\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t\t} \"nbt:\\\"mood_sound\\\"\"\n\t\tMusic struct {\n\t\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t\t} \"nbt:\\\"music,omitempty\\\"\"\n\t\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\t\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\t\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n\t} \"nbt:\\\"effects\\\"\"\n\tHasPrecipitation bool    \"nbt:\\\"has_precipitation\\\"\"\n\tTemperature      float32 \"nbt:\\\"temperature\\\"\"\n}{\"minecraft:badlands\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:bamboo_jungle\": {Downfall: 0.9, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7842047, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.95}, \"minecraft:basalt_deltas\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 6840176, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.basalt_deltas.mood\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:beach\": {Downfall: 0.4, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7907327, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.8}, \"minecraft:birch_forest\": {Downfall: 0.6, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8037887, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.6}, \"minecraft:cherry_grove\": {Downfall: 0.8, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 6141935, WaterFogColor: 6141935}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:cold_ocean\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 4020182, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:crimson_forest\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 3343107, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.crimson_forest.mood\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:dark_forest\": {Downfall: 0.8, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7972607, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.7}, \"minecraft:deep_cold_ocean\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 4020182, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:deep_dark\": {Downfall: 0.4, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7907327, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.8}, \"minecraft:deep_frozen_ocean\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 3750089, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:deep_lukewarm_ocean\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 4566514, WaterFogColor: 267827}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:deep_ocean\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:desert\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:dripstone_caves\": {Downfall: 0.4, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7907327, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.8}, \"minecraft:end_barrens\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 10518688, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 0, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 0.5}, \"minecraft:end_highlands\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 10518688, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 0, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 0.5}, \"minecraft:end_midlands\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 10518688, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 0, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 0.5}, \"minecraft:eroded_badlands\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:flower_forest\": {Downfall: 0.8, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7972607, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.7}, \"minecraft:forest\": {Downfall: 0.8, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7972607, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.7}, \"minecraft:frozen_ocean\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8364543, WaterColor: 3750089, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0}, \"minecraft:frozen_peaks\": {Downfall: 0.9, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8756735, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: -0.7}, \"minecraft:frozen_river\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8364543, WaterColor: 3750089, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0}, \"minecraft:grove\": {Downfall: 0.8, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8495359, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: -0.2}, \"minecraft:ice_spikes\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8364543, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0}, \"minecraft:jagged_peaks\": {Downfall: 0.9, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8756735, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: -0.7}, \"minecraft:jungle\": {Downfall: 0.9, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7842047, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.95}, \"minecraft:lukewarm_ocean\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 4566514, WaterFogColor: 267827}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:lush_caves\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:mangrove_swamp\": {Downfall: 0.9, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7907327, WaterColor: 3832426, WaterFogColor: 5077600}, HasPrecipitation: true, Temperature: 0.8}, \"minecraft:meadow\": {Downfall: 0.8, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 937679, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:mushroom_fields\": {Downfall: 1, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7842047, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.9}, \"minecraft:nether_wastes\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 3344392, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.nether_wastes.mood\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:ocean\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:old_growth_birch_forest\": {Downfall: 0.6, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8037887, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.6}, \"minecraft:old_growth_pine_taiga\": {Downfall: 0.8, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8168447, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.3}, \"minecraft:old_growth_spruce_taiga\": {Downfall: 0.8, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8233983, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.25}, \"minecraft:plains\": {Downfall: 0.4, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7907327, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.8}, \"minecraft:river\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:savanna\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:savanna_plateau\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:small_end_islands\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 10518688, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 0, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 0.5}, \"minecraft:snowy_beach\": {Downfall: 0.3, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8364543, WaterColor: 4020182, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.05}, \"minecraft:snowy_plains\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8364543, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0}, \"minecraft:snowy_slopes\": {Downfall: 0.9, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8560639, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: -0.3}, \"minecraft:snowy_taiga\": {Downfall: 0.4, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8625919, WaterColor: 4020182, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: -0.5}, \"minecraft:soul_sand_valley\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 1787717, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.soul_sand_valley.mood\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:sparse_jungle\": {Downfall: 0.8, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7842047, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.95}, \"minecraft:stony_peaks\": {Downfall: 0.3, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7776511, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 1}, \"minecraft:stony_shore\": {Downfall: 0.3, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8233727, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.2}, \"minecraft:sunflower_plains\": {Downfall: 0.4, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7907327, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.8}, \"minecraft:swamp\": {Downfall: 0.9, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7907327, WaterColor: 6388580, WaterFogColor: 2302743}, HasPrecipitation: true, Temperature: 0.8}, \"minecraft:taiga\": {Downfall: 0.8, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8233983, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.25}, \"minecraft:the_end\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 10518688, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 0, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 0.5}, \"minecraft:the_void\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 0.5}, \"minecraft:warm_ocean\": {Downfall: 0.5, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8103167, WaterColor: 4445678, WaterFogColor: 270131}, HasPrecipitation: true, Temperature: 0.5}, \"minecraft:warped_forest\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 1705242, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.warped_forest.mood\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:windswept_forest\": {Downfall: 0.3, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8233727, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.2}, \"minecraft:windswept_gravelly_hills\": {Downfall: 0.3, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8233727, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.2}, \"minecraft:windswept_hills\": {Downfall: 0.3, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 8233727, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: true, Temperature: 0.2}, \"minecraft:windswept_savanna\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}, \"minecraft:wooded_badlands\": {Downfall: 0, Effects: struct {\n\tFogColor     int32 \"nbt:\\\"fog_color\\\"\"\n\tFoliageColor int32 \"nbt:\\\"foliage_color,omitempty\\\"\"\n\tGrassColor   int32 \"nbt:\\\"grass_color,omitempty\\\"\"\n\tMoodSound    struct {\n\t\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\t\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\t\tSound             string  \"nbt:\\\"sound\\\"\"\n\t\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n\t} \"nbt:\\\"mood_sound\\\"\"\n\tMusic struct {\n\t\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\t\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\t\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\t\tSound               string \"nbt:\\\"sound\\\"\"\n\t} \"nbt:\\\"music,omitempty\\\"\"\n\tSkyColor      int32 \"nbt:\\\"sky_color\\\"\"\n\tWaterColor    int32 \"nbt:\\\"water_color\\\"\"\n\tWaterFogColor int32 \"nbt:\\\"water_fog_color\\\"\"\n}{FogColor: 12638463, FoliageColor: 0, GrassColor: 0, MoodSound: struct {\n\tBlockSearchExtent int32   \"nbt:\\\"block_search_extent\\\"\"\n\tOffset            float64 \"nbt:\\\"offset\\\"\"\n\tSound             string  \"nbt:\\\"sound\\\"\"\n\tTickDelay         int32   \"nbt:\\\"tick_delay\\\"\"\n}{BlockSearchExtent: 8, Offset: 2, Sound: \"minecraft:ambient.cave\", TickDelay: 6000}, Music: struct {\n\tMaxDelay            int32  \"nbt:\\\"max_delay\\\"\"\n\tMinDelay            int32  \"nbt:\\\"min_delay\\\"\"\n\tReplaceCurrentMusic bool   \"nbt:\\\"replace_current_music\\\"\"\n\tSound               string \"nbt:\\\"sound\\\"\"\n}{MaxDelay: 0, MinDelay: 0, ReplaceCurrentMusic: false, Sound: \"\"}, SkyColor: 7254527, WaterColor: 4159204, WaterFogColor: 329011}, HasPrecipitation: false, Temperature: 2}}}\n"
  },
  {
    "path": "protocol/net/registry/registry.go",
    "content": "package registry\n\nimport (\n\t_ \"embed\"\n)\n\n// This packet contains registries that are sent to the client. Because  Go maps aren't ordered, sending a registry data packet will set its Indexes field to the order in which its entries were encoded, which can then be used to get registry ids\n\ntype ChatType struct {\n\tChat struct {\n\t\tParameters     []string `nbt:\"parameters\"`\n\t\tTranslationKey string   `nbt:\"translation_key\"`\n\n\t\tStyle struct {\n\t\t\tColor  string `nbt:\"color\"`\n\t\t\tItalic bool   `nbt:\"italic\"`\n\t\t} `nbt:\"style,omitempty\"`\n\t} `nbt:\"chat\"`\n\tNarration struct {\n\t\tParameters     []string `nbt:\"parameters\"`\n\t\tTranslationKey string   `nbt:\"translation_key\"`\n\t} `nbt:\"narration\"`\n}\n\ntype Dimension1 struct {\n\tFixedTime                   int64   `nbt:\"fixed_time,omitempty\"`\n\tAmbientLight                float32 `nbt:\"ambient_light\"`\n\tBedWorks                    bool    `nbt:\"bed_works\"`\n\tCoordinateScale             float64 `nbt:\"coordinate_scale\"`\n\tEffects                     string  `nbt:\"effects\"`\n\tHasCeiling                  bool    `nbt:\"has_ceiling\"`\n\tHasRaids                    bool    `nbt:\"has_raids\"`\n\tHasSkylight                 bool    `nbt:\"has_skylight\"`\n\tHeight                      int32   `nbt:\"height\"`\n\tInfiniburn                  string  `nbt:\"infiniburn\"`\n\tLogicalHeight               int32   `nbt:\"logical_height\"`\n\tMinY                        int32   `nbt:\"min_y\"`\n\tMonsterSpawnBlockLightLimit int32   `nbt:\"monster_spawn_block_light_limit\"`\n\tNatural                     bool    `nbt:\"natural\"`\n\tUltrawarm                   bool    `nbt:\"ultrawarm\"`\n\tPiglinSafe                  bool    `nbt:\"piglin_safe\"`\n\tRespawnAnchorWorks          bool    `nbt:\"respawn_anchor_works\"`\n\tMonsterSpawnLightLevel      int32   `nbt:\"monster_spawn_light_level\"`\n}\n\ntype Dimension struct {\n\tFixedTime                   int64   `nbt:\"fixed_time,omitempty\"`\n\tAmbientLight                float32 `nbt:\"ambient_light\"`\n\tBedWorks                    bool    `nbt:\"bed_works\"`\n\tCoordinateScale             float64 `nbt:\"coordinate_scale\"`\n\tEffects                     string  `nbt:\"effects\"`\n\tHasCeiling                  bool    `nbt:\"has_ceiling\"`\n\tHasRaids                    bool    `nbt:\"has_raids\"`\n\tHasSkylight                 bool    `nbt:\"has_skylight\"`\n\tHeight                      int32   `nbt:\"height\"`\n\tInfiniburn                  string  `nbt:\"infiniburn\"`\n\tLogicalHeight               int32   `nbt:\"logical_height\"`\n\tMinY                        int32   `nbt:\"min_y\"`\n\tMonsterSpawnBlockLightLimit int32   `nbt:\"monster_spawn_block_light_limit\"`\n\tNatural                     bool    `nbt:\"natural\"`\n\tUltrawarm                   bool    `nbt:\"ultrawarm\"`\n\tPiglinSafe                  bool    `nbt:\"piglin_safe\"`\n\tRespawnAnchorWorks          bool    `nbt:\"respawn_anchor_works\"`\n\tMonsterSpawnLightLevel      struct {\n\t\tMaxInclusive int32  `nbt:\"max_inclusive\"`\n\t\tMinInclusive int32  `nbt:\"min_inclusive\"`\n\t\tType         string `nbt:\"type\"`\n\t} `nbt:\"monster_spawn_light_level\"`\n}\n\n/*type registries struct {\n\tBannerPattern map[string]struct {\n\t\tAssetId        string `nbt:\"asset_id\"`\n\t\tTranslationKey string `nbt:\"translation_key\"`\n\t} `nbt:\"minecraft:banner_pattern\"`\n\tChatType   map[string]ChatType `nbt:\"minecraft:chat_type\"`\n\tDamageType map[string]struct {\n\t\tExhaustion       float32 `nbt:\"exhaustion\"`\n\t\tMessageID        string  `nbt:\"message_id\"`\n\t\tScaling          string  `nbt:\"scaling\"`\n\t\tDeathMessageType string  `nbt:\"death_message_type,omitempty\"`\n\t\tEffects          string  `nbt:\"effects,omitempty\"`\n\t} `nbt:\"minecraft:damage_type\"`\n\tDimensionType struct {\n\t\tOverworld      Dimension  `nbt:\"minecraft:overworld\"`\n\t\tOverworldCaves Dimension  `nbt:\"minecraft:overworld_caves\"`\n\t\tTheEnd         Dimension  `nbt:\"minecraft:the_end\"`\n\t\tTheNether      Dimension1 `nbt:\"minecraft:the_nether\"`\n\t} `nbt:\"minecraft:dimension_type\"`\n\tEnchantment map[string]struct {\n\t\tAnvilCost   int32 `nbt:\"anvil_cost\"`\n\t\tDescription struct {\n\t\t\tTranslate string `nbt:\"translate\"`\n\t\t} `nbt:\"description\"`\n\t\tEffects struct {\n\t\t\tSmashDamagePerFallenBlock []struct {\n\t\t\t\tEffect struct {\n\t\t\t\t\tType  string `nbt:\"type\"`\n\t\t\t\t\tValue struct {\n\t\t\t\t\t\tBase               float32 `nbt:\"base\"`\n\t\t\t\t\t\tPerLevelAboveFirst float32 `nbt:\"per_level_above_first\"`\n\t\t\t\t\t\tType               string  `nbt:\"type\"`\n\t\t\t\t\t} `nbt:\"value\"`\n\t\t\t\t} `nbt:\"effect\"`\n\t\t\t} `nbt:\"minecraft:smash_damage_per_fallen_block\"`\n\t\t\tPreventArmorChange struct{} `nbt:\"minecraft:prevent_armor_change\"`\n\t\t\tHitBlock           []struct {\n\t\t\t\tEffect struct {\n\t\t\t\t\tEffects []struct {\n\t\t\t\t\t\tType string `nbt:\"type\"`\n\n\t\t\t\t\t\tEntity string `nbt:\"state\"`\n\n\t\t\t\t\t\tPitch  float32 `nbt:\"pitch\"`\n\t\t\t\t\t\tSound  string  `nbt:\"sound\"`\n\t\t\t\t\t\tVolume float32 `nbt:\"volume\"`\n\t\t\t\t\t} `nbt:\"effects\"`\n\t\t\t\t\tType string `nbt:\"type\"`\n\t\t\t\t} `nbt:\"effect\"`\n\t\t\t\tRequirements struct {\n\t\t\t\t\tCondition string `nbt:\"condition\"`\n\t\t\t\t\tTerms     []struct {\n\t\t\t\t\t\tBlock string `nbt:\"block\"`\n\n\t\t\t\t\t\tCondition string `nbt:\"condition\"`\n\n\t\t\t\t\t\tThundering bool `nbt:\"thundering\"`\n\n\t\t\t\t\t\tEntity string `nbt:\"state\"`\n\n\t\t\t\t\t\tPredicate struct {\n\t\t\t\t\t\t\tType      string `nbt:\"type\"`\n\t\t\t\t\t\t\tCanSeeSky bool   `nbt:\"can_see_sky\"`\n\t\t\t\t\t\t} `nbt:\"predicate\"`\n\t\t\t\t\t} `nbt:\"terms\"`\n\t\t\t\t} `nbt:\"requirements\"`\n\t\t\t} `nbt:\"minecraft:hit_block\"`\n\t\t\tArmorEffectiveness []struct {\n\t\t\t\tEffect struct {\n\t\t\t\t\tType  string `nbt:\"type\"`\n\t\t\t\t\tValue struct {\n\t\t\t\t\t\tBase               float32 `nbt:\"base\"`\n\t\t\t\t\t\tPerLevelAboveFirst float32 `nbt:\"per_level_above_first\"`\n\t\t\t\t\t\tType               string  `nbt:\"type\"`\n\t\t\t\t\t} `nbt:\"value\"`\n\t\t\t\t} `nbt:\"effect\"`\n\t\t\t} `nbt:\"minecraft:armor_effectiveness\"`\n\t\t\tAttributes []struct {\n\t\t\t\tAmount struct {\n\t\t\t\t\tAdded              float32 `nbt:\"added\"`\n\t\t\t\t\tBase               float32 `nbt:\"base\"`\n\t\t\t\t\tPerLevelAboveFirst float32 `nbt:\"per_level_above_first\"`\n\t\t\t\t\tType               string  `nbt:\"type\"`\n\t\t\t\t} `nbt:\"amount\"`\n\t\t\t\tAtrribute string `nbt:\"attribute\"`\n\t\t\t\tId        string `nbt:\"id\"`\n\t\t\t\tOperation string `nbt:\"operation\"`\n\t\t\t} `nbt:\"minecraft:attributes\"`\n\t\t\tAmmoUse []struct {\n\t\t\t\tEffect struct {\n\t\t\t\t\tType  string  `nbt:\"type\"`\n\t\t\t\t\tValue float32 `nbt:\"value\"`\n\t\t\t\t} `nbt:\"effect\"`\n\t\t\t\tRequirements struct {\n\t\t\t\t\tCondition string `nbt:\"condition\"`\n\t\t\t\t\tPredicate struct {\n\t\t\t\t\t\tItems string `nbt:\"items\"`\n\t\t\t\t\t} `nbt:\"predicate\"`\n\t\t\t\t} `nbt:\"requirements\"`\n\t\t\t} `nbt:\"minecraft:ammo_use\"`\n\t\t\tProjectileSpawned []struct {\n\t\t\t\tEffect struct {\n\t\t\t\t\tDuration float32 `nbt:\"duration\"`\n\t\t\t\t\tType     string  `nbt:\"type\"`\n\t\t\t\t} `nbt:\"effect\"`\n\t\t\t} `nbt:\"minecraft:projectile_spawned\"`\n\t\t\tLocationChanged []struct {\n\t\t\t\tEffect struct {\n\t\t\t\t\tBlockState struct {\n\t\t\t\t\t\tState struct {\n\t\t\t\t\t\t\tName       string\n\t\t\t\t\t\t\tProperties map[string]any\n\t\t\t\t\t\t} `nbt:\"state\"`\n\t\t\t\t\t\tType string `nbt:\"type\"`\n\t\t\t\t\t} `nbt:\"block_state\"`\n\t\t\t\t\tHeight    float32 `nbt:\"height\"`\n\t\t\t\t\tOffset    []int32 `nbt:\"offset\"`\n\t\t\t\t\tPredicate struct {\n\t\t\t\t\t\tPredicates []struct {\n\t\t\t\t\t\t\tOffset []int32 `nbt:\"offset\"`\n\t\t\t\t\t\t\tTag    string  `nbt:\"tag\"`\n\t\t\t\t\t\t\tType   string  `nbt:\"type\"`\n\t\t\t\t\t\t\tBlocks string  `nbt:\"blocks\"`\n\t\t\t\t\t\t\tFluids string  `nbt:\"fluids\"`\n\t\t\t\t\t\t} `nbt:\"predicates\"`\n\t\t\t\t\t\tRadius struct {\n\t\t\t\t\t\t\tMax   float32 `nbt:\"max\"`\n\t\t\t\t\t\t\tMin   float32 `nbt:\"min\"`\n\t\t\t\t\t\t\tType  string  `nbt:\"type\"`\n\t\t\t\t\t\t\tValue struct {\n\t\t\t\t\t\t\t\tBase               float32 `nbt:\"base\"`\n\t\t\t\t\t\t\t\tPerLevelAboveFirst float32 `nbt:\"per_level_above_first\"`\n\t\t\t\t\t\t\t\tType               string  `nbt:\"type\"`\n\t\t\t\t\t\t\t} `nbt:\"value\"`\n\t\t\t\t\t\t} `nbt:\"radius\"`\n\t\t\t\t\t\tType string `nbt:\"type\"`\n\t\t\t\t\t} `nbt:\"predicate\"`\n\t\t\t\t\tTriggerGameEvent string `nbt:\"trigger_game_event\"`\n\t\t\t\t\tType             string `nbt:\"type\"`\n\t\t\t\t} `nbt:\"effect\"`\n\t\t\t\tRequirements struct {\n\t\t\t\t\tCondition string `nbt:\"condition\"`\n\t\t\t\t\tEntity    string `nbt:\"state\"`\n\t\t\t\t\tPredicate struct {\n\t\t\t\t\t\tFlags struct {\n\t\t\t\t\t\t\tIsOnGround bool `nbt:\"is_on_ground\"`\n\t\t\t\t\t\t} `nbt:\"flags\"`\n\t\t\t\t\t} `nbt:\"predicate\"`\n\t\t\t\t} `nbt:\"requirements\"`\n\t\t\t} `nbt:\"minecraft:location_changed\"`\n\t\t\tDamageImmunity []struct {\n\t\t\t\tEffect       struct{}\n\t\t\t\tRequirements struct {\n\t\t\t\t\tCondition string `nbt:\"condition\"`\n\t\t\t\t\tPredicate struct {\n\t\t\t\t\t\tTags []struct {\n\t\t\t\t\t\t\tExpected bool   `nbt:\"expected\"`\n\t\t\t\t\t\t\tId       string `nbt:\"id\"`\n\t\t\t\t\t\t} `nbt:\"tags\"`\n\t\t\t\t\t} `nbt:\"predicate\"`\n\t\t\t\t} `nbt:\"requirements\"`\n\t\t\t} `nbt:\"minecraft:damage_immunity\"`\n\t\t\tDamageProtection []struct {\n\t\t\t\tEffect struct {\n\t\t\t\t\tType  string `nbt:\"type\"`\n\t\t\t\t\tValue struct {\n\t\t\t\t\t\tBase               float32 `nbt:\"base\"`\n\t\t\t\t\t\tPerLevelAboveFirst float32 `nbt:\"per_level_above_first\"`\n\t\t\t\t\t\tType               string  `nbt:\"type\"`\n\t\t\t\t\t} `nbt:\"value\"`\n\t\t\t\t} `nbt:\"effect\"`\n\t\t\t\tRequirements struct {\n\t\t\t\t\tCondition string `nbt:\"condition\"`\n\t\t\t\t\tPredicate struct {\n\t\t\t\t\t\tTags []struct {\n\t\t\t\t\t\t\tExpected bool   `nbt:\"expected\"`\n\t\t\t\t\t\t\tId       string `nbt:\"id\"`\n\t\t\t\t\t\t} `nbt:\"tags\"`\n\t\t\t\t\t} `nbt:\"predicate\"`\n\t\t\t\t\tTerms []struct {\n\t\t\t\t\t\tCondition string `nbt:\"condition\"`\n\t\t\t\t\t\tPredicate struct {\n\t\t\t\t\t\t\tTags []struct {\n\t\t\t\t\t\t\t\tExpected bool   `nbt:\"expected\"`\n\t\t\t\t\t\t\t\tId       string `nbt:\"id\"`\n\t\t\t\t\t\t\t} `nbt:\"tags\"`\n\t\t\t\t\t\t} `nbt:\"predicate\"`\n\t\t\t\t\t} `nbt:\"terms\"`\n\t\t\t\t} `nbt:\"requirements\"`\n\t\t\t} `nbt:\"minecraft:damage_protection\"`\n\t\t\tDamage []struct {\n\t\t\t\tEffect struct {\n\t\t\t\t\tType  string `nbt:\"type\"`\n\t\t\t\t\tValue struct {\n\t\t\t\t\t\tBase               float32 `nbt:\"base\"`\n\t\t\t\t\t\tPerLevelAboveFirst float32 `nbt:\"per_level_above_first\"`\n\t\t\t\t\t\tType               string  `nbt:\"type\"`\n\t\t\t\t\t} `nbt:\"value\"`\n\t\t\t\t} `nbt:\"effect\"`\n\t\t\t\tRequirements struct {\n\t\t\t\t\tCondition string `nbt:\"condition\"`\n\t\t\t\t\tEntity    string `nbt:\"state\"`\n\t\t\t\t\tPredicate struct {\n\t\t\t\t\t\tType string `nbt:\"type\"`\n\t\t\t\t\t} `nbt:\"predicate\"`\n\t\t\t\t} `nbt:\"requirements\"`\n\t\t\t} `nbt:\"minecraft:damage\"`\n\t\t\tPostAttack []struct {\n\t\t\t\tAffected string `nbt:\"affected\"`\n\t\t\t\tEffect   struct {\n\t\t\t\t\tMaxAmplifier float32 `nbt:\"max_amplifier\"`\n\t\t\t\t\tMaxDuration  struct {\n\t\t\t\t\t\tBase               float32 `nbt:\"base\"`\n\t\t\t\t\t\tPerLevelAboveFirst float32 `nbt:\"per_level_above_first\"`\n\t\t\t\t\t\tType               string  `nbt:\"type\"`\n\t\t\t\t\t} `nbt:\"max_duration\"`\n\t\t\t\t\tDuration struct {\n\t\t\t\t\t\tBase               float32 `nbt:\"base\"`\n\t\t\t\t\t\tPerLevelAboveFirst float32 `nbt:\"per_level_above_first\"`\n\t\t\t\t\t\tType               string  `nbt:\"type\"`\n\t\t\t\t\t} `nbt:\"duration\"`\n\t\t\t\t\tMinAmplifier float32 `nbt:\"min_amplifier\"`\n\t\t\t\t\tMinDuration  float32 `nbt:\"min_duration\"`\n\t\t\t\t\tToApply      string  `nbt:\"to_apply\"`\n\t\t\t\t\tType         string  `nbt:\"type\"`\n\n\t\t\t\t\tEffects []struct {\n\t\t\t\t\t\tType string `nbt:\"type\"`\n\n\t\t\t\t\t\tEntity string `nbt:\"state\"`\n\n\t\t\t\t\t\tPitch  float32 `nbt:\"pitch\"`\n\t\t\t\t\t\tSound  string  `nbt:\"sound\"`\n\t\t\t\t\t\tVolume float32 `nbt:\"volume\"`\n\t\t\t\t\t} `nbt:\"effects\"`\n\t\t\t\t} `nbt:\"effect\"`\n\t\t\t\tEnchanted    string `nbt:\"enchanted\"`\n\t\t\t\tRequirements struct {\n\t\t\t\t\tCondition string `nbt:\"condition\"`\n\t\t\t\t\tPredicate struct {\n\t\t\t\t\t\tIsDirect bool `nbt:\"is_direct\"`\n\t\t\t\t\t} `nbt:\"predicate\"`\n\t\t\t\t\tTerms []struct {\n\t\t\t\t\t\tCondition  string `nbt:\"condition\"`\n\t\t\t\t\t\tThundering bool   `nbt:\"thundering\"`\n\t\t\t\t\t\tEntity     string `nbt:\"state\"`\n\t\t\t\t\t\tPredicate  struct {\n\t\t\t\t\t\t\tIsDirect bool   `nbt:\"is_direct\"`\n\t\t\t\t\t\t\tType     string `nbt:\"type\"`\n\t\t\t\t\t\t\tLocation struct {\n\t\t\t\t\t\t\t\tCanSeeSky bool `nbt:\"can_see_sky\"`\n\t\t\t\t\t\t\t} `nbt:\"location\"`\n\t\t\t\t\t\t} `nbt:\"predicate\"`\n\t\t\t\t\t} `nbt:\"terms\"`\n\t\t\t\t} `nbt:\"requirements\"`\n\t\t\t} `nbt:\"minecraft:post_attack\"`\n\t\t} `nbt:\"effects\"`\n\t\tMaxCost struct {\n\t\t\tBase               int32 `nbt:\"base\"`\n\t\t\tPerLevelAboveFirst int32 `nbt:\"per_level_above_first\"`\n\t\t} `nbt:\"max_cost\"`\n\t\tMinCost struct {\n\t\t\tBase               int32 `nbt:\"base\"`\n\t\t\tPerLevelAboveFirst int32 `nbt:\"per_level_above_first\"`\n\t\t} `nbt:\"min_cost\"`\n\t\tMaxLevel       int32    `nbt:\"max_level\"`\n\t\tSlots          []string `nbt:\"slots\"`\n\t\tSupportedItems string   `nbt:\"supported_items\"`\n\t\tWeight         int32    `nbt:\"weight\"`\n\t\tExclusiveSet   string   `nbt:\"exclusive_set\"`\n\t\tPrimaryItems   string   `nbt:\"primary_items\"`\n\t} `nbt:\"minecraft:enchantment\"`\n\tJukeboxSong map[string]struct {\n\t\tComparatorOutput int32 `nbt:\"comparator_output\"`\n\t\tDescription      struct {\n\t\t\tTranslate string `nbt:\"translate\"`\n\t\t} `nbt:\"description\"`\n\t\tLengthInSeconds float32 `nbt:\"length_in_seconds\"`\n\t\tSoundEvent      string  `nbt:\"sound_event\"`\n\t} `nbt:\"minecraft:jukebox_song\"`\n\tPaintingVariant map[string]struct {\n\t\tAssetId string `nbt:\"asset_id\"`\n\t\tHeight  int32  `nbt:\"height\"`\n\t\tWeight  int32  `nbt:\"width\"`\n\t} `nbt:\"minecraft:painting_variant\"`\n\tTrimMaterial map[string]struct {\n\t\tAssetName   string `nbt:\"asset_name\"`\n\t\tDescription struct {\n\t\t\tColor     string `nbt:\"color\"`\n\t\t\tTranslate string `nbt:\"translate\"`\n\t\t} `nbt:\"description\"`\n\t\tIngredient             string  `nbt:\"ingredient\"`\n\t\tItemModelIndex         float32 `nbt:\"item_model_index\"`\n\t\tOverrideArmorMaterials struct {\n\t\t\tDiamond string `nbt:\"minecraft:diamond,omitempty\"`\n\t\t\tGold    string `nbt:\"minecraft:gold,omitempty\"`\n\t\t\tIron    string `nbt:\"minecraft:iron,omitempty\"`\n\t\t} `nbt:\"override_armor_materials,omitempty\"`\n\t} `nbt:\"minecraft:trim_material\"`\n\tTrimPattern map[string]struct {\n\t\tAssetId     string `nbt:\"asset_id\"`\n\t\tDecal       bool   `nbt:\"decal\"`\n\t\tDescription struct {\n\t\t\tTranslate string `nbt:\"translate\"`\n\t\t} `nbt:\"description\"`\n\t\tTemplateItem string `nbt:\"template_item\"`\n\t} `nbt:\"minecraft:trim_pattern\"`\n\tWolfVariant map[string]struct {\n\t\tAngryTexture string `nbt:\"angry_texture\"`\n\t\tBiomes       string `nbt:\"biomes\"`\n\t\tTameTexture  string `nbt:\"tame_texture\"`\n\t\tWildTexture  string `nbt:\"wild_texture\"`\n\t} `nbt:\"minecraft:wolf_variant\"`\n\tWorldgenBiome map[string]struct {\n\t\tDownfall float32 `nbt:\"downfall\"`\n\t\tEffects  struct {\n\t\t\tFogColor     int32 `nbt:\"fog_color\"`\n\t\t\tFoliageColor int32 `nbt:\"foliage_color,omitempty\"`\n\t\t\tGrassColor   int32 `nbt:\"grass_color,omitempty\"`\n\t\t\tMoodSound    struct {\n\t\t\t\tBlockSearchExtent int32   `nbt:\"block_search_extent\"`\n\t\t\t\tOffset            float64 `nbt:\"offset\"`\n\t\t\t\tSound             string  `nbt:\"sound\"`\n\t\t\t\tTickDelay         int32   `nbt:\"tick_delay\"`\n\t\t\t} `nbt:\"mood_sound\"`\n\t\t\tMusic struct {\n\t\t\t\tMaxDelay            int32  `nbt:\"max_delay\"`\n\t\t\t\tMinDelay            int32  `nbt:\"min_delay\"`\n\t\t\t\tReplaceCurrentMusic bool   `nbt:\"replace_current_music\"`\n\t\t\t\tSound               string `nbt:\"sound\"`\n\t\t\t} `nbt:\"music,omitempty\"`\n\t\t\tSkyColor      int32 `nbt:\"sky_color\"`\n\t\t\tWaterColor    int32 `nbt:\"water_color\"`\n\t\t\tWaterFogColor int32 `nbt:\"water_fog_color\"`\n\t\t} `nbt:\"effects\"`\n\t\tHasPrecipitation bool    `nbt:\"has_precipitation\"`\n\t\tTemperature      float32 `nbt:\"temperature\"`\n\t} `nbt:\"minecraft:worldgen/biome\"`\n}*/\n\n/*func init() {\n\tv := reflect.ValueOf(Registries)\n\tfor i := 0; i < v.NumField(); i++ {\n\t\tRegistryMap[v.Type().Field(i).Tag.Get(\"nbt\")] = v.Field(i).Interface()\n\t}\n\n\tos.WriteFile(\"d.go\", fmt.Appendf(nil, \"package registry\\n\\nvar Registries = %#v\", RegistryMap), 0755)\n}\n*/\n"
  },
  {
    "path": "protocol/net/slot/comp_dec.go",
    "content": "package slot\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n)\r\n\r\nfunc decode(r encoding.Reader, comp *Component) error {\r\n\tswitch comp.Type {\r\n\tcase CustomData:\r\n\t\tcomp.Data = make(map[string]any)\r\n\t\tif err := r.NBT(&comp.Data); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\tcase MaxStackSize, Damage, MaxDamage, Rarity:\r\n\t\tvar data int32\r\n\t\tif _, err := r.VarInt(&data); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tcomp.Data = data\r\n\tcase Unbreakable:\r\n\t\tvar data bool\r\n\t\tif err := r.Bool(&data); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tcomp.Data = data\r\n\tcase ItemName, CustomName:\r\n\t\tvar data text.TextComponent\r\n\t\tif err := r.TextComponent(&data); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tcomp.Data = data\r\n\tcase Lore:\r\n\t\tvar number int32\r\n\t\tif _, err := r.VarInt(&number); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tvar data = make([]text.TextComponent, number)\r\n\t\tfor _, line := range data {\r\n\t\t\tif err := r.TextComponent(&line); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t\tcomp.Data = data\r\n\t}\r\n\r\n\treturn nil\r\n}\r\n"
  },
  {
    "path": "protocol/net/slot/slot.go",
    "content": "package slot\r\n\r\nimport (\r\n\t\"slices\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\r\n)\r\n\r\ntype Slot struct {\r\n\tItemCount int32\r\n\tItemId    int32\r\n\tAdd       []Component\r\n\tRemove    []int32\r\n}\r\n\r\nfunc (s Slot) Is(s1 Slot) bool {\r\n\treturn s.ItemCount == s1.ItemCount && s.ItemId == s1.ItemId && slices.Equal(s.Add, s1.Add) && slices.Equal(s.Remove, s1.Remove)\r\n}\r\n\r\nvar Air Slot\r\n\r\ntype Component struct {\r\n\tType int32\r\n\tData any\r\n}\r\n\r\nfunc (s *Slot) Encode(w encoding.Writer) error {\r\n\tif err := w.VarInt(s.ItemCount); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif s.ItemCount > 0 {\r\n\t\tif err := w.VarInt(s.ItemId); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif err := w.VarInt(int32(len(s.Add))); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\t//TODO ENCODE COMPONENTS\r\n\t\tif err := w.VarInt(int32(len(s.Remove))); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tfor _, i := range s.Remove {\r\n\t\t\tif err := w.VarInt(i); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nfunc (s *Slot) Decode(r encoding.Reader) error {\r\n\tif _, err := r.VarInt(&s.ItemCount); err != nil {\r\n\t\treturn err\r\n\t}\r\n\tif s.ItemCount > 0 {\r\n\t\tif _, err := r.VarInt(&s.ItemId); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tvar componentAddLength int32\r\n\t\tif _, err := r.VarInt(&componentAddLength); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\tif componentAddLength != 0 {\r\n\t\t\tpanic(\"no comp decode!\")\r\n\t\t}\r\n\r\n\t\ts.Add = make([]Component, componentAddLength)\r\n\t\tfor _, comp := range s.Add {\r\n\t\t\tif err := decode(r, &comp); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar componentRemoveLength int32\r\n\t\tif componentRemoveLength != 0 {\r\n\t\t\tpanic(\"no comp decode!\")\r\n\t\t}\r\n\t\tif _, err := r.VarInt(&componentRemoveLength); err != nil {\r\n\t\t\treturn err\r\n\t\t}\r\n\t\ts.Remove = make([]int32, componentRemoveLength)\r\n\t\tfor _, i := range s.Remove {\r\n\t\t\tif _, err := r.VarInt(&i); err != nil {\r\n\t\t\t\treturn err\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn nil\r\n}\r\n\r\nconst (\r\n\tCustomData = iota\r\n\tMaxStackSize\r\n\tMaxDamage\r\n\tDamage\r\n\tUnbreakable\r\n\tCustomName\r\n\tItemName\r\n\tLore\r\n\tRarity\r\n\tEnchantments\r\n\tCanPlaceOn\r\n\tCanBreak\r\n\tAttributeModifiers\r\n\tCustomModelData\r\n\tHideAdditionalTooltip\r\n\tHideTooltip\r\n\tRepairCost\r\n\tCreativeSlotLock\r\n\tEnchantmentGlintOverride\r\n\tIntangibleProjectile\r\n\tFood\r\n\tFireResistant\r\n\tTool\r\n\tStoredEnchantments\r\n\tDyedColor\r\n\tMapColor\r\n\tMapId\r\n\tMapDecorations\r\n\tMapPostProcessing\r\n\tCharjedProjectiles\r\n\tBundleContents\r\n\tPotionContents\r\n\tSuspicousStewEffects\r\n\tWritableBookContent\r\n\tWrittenBookContent\r\n\tTrim\r\n\tDebugStickState\r\n\tEntityData\r\n\tBucketEntityData\r\n\tBlockEntityData\r\n\tInstrument\r\n\tOminousBottleAmplifier\r\n\tJukeboxPlayable\r\n\tRecipes\r\n\tLodestoneTracker\r\n\tFireworkExplosion\r\n\tFireworks\r\n\tProfile\r\n\tNoteBlockSound\r\n\tBannerPatterns\r\n\tBaseColor\r\n\tPotDecorations\r\n\tContainer\r\n\tBlockState\r\n\tBees\r\n\tLock\r\n\tContainerLoot\r\n)\r\n\r\n// Item's rarity\r\nconst (\r\n\t// white\r\n\tCommon = iota\r\n\t// yellow\r\n\tUncommon\r\n\t// aqua\r\n\tRare\r\n\t// pink\r\n\tEpic\r\n)\r\n"
  },
  {
    "path": "protocol/net/tags/tags.go",
    "content": "package tags\n\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\nvar Tags = &play.UpdateTags{Tags: map[string]map[string][]int32{\"minecraft:banner_pattern\": map[string][]int32{\"minecraft:no_item_required\": []int32{26, 27, 28, 29, 31, 38, 35, 37, 32, 36, 34, 33, 25, 5, 30, 39, 40, 41, 42, 7, 10, 9, 8, 3, 23, 19, 17, 20, 18, 1, 6, 14, 15, 2}, \"minecraft:pattern_item/creeper\": []int32{4}, \"minecraft:pattern_item/flow\": []int32{11}, \"minecraft:pattern_item/flower\": []int32{12}, \"minecraft:pattern_item/globe\": []int32{13}, \"minecraft:pattern_item/guster\": []int32{16}, \"minecraft:pattern_item/mojang\": []int32{21}, \"minecraft:pattern_item/piglin\": []int32{22}, \"minecraft:pattern_item/skull\": []int32{24}}, \"minecraft:block\": map[string][]int32{\"minecraft:acacia_logs\": []int32{50, 70, 60, 78}, \"minecraft:air\": []int32{0, 729, 730}, \"minecraft:all_hanging_signs\": []int32{208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 226, 229}, \"minecraft:all_signs\": []int32{186, 187, 188, 189, 191, 192, 828, 829, 193, 194, 190, 199, 200, 201, 202, 204, 205, 830, 831, 206, 207, 203, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 226, 229}, \"minecraft:ancient_city_replaceable\": []int32{1023, 1036, 1032, 1038, 1034, 1037, 1035, 1039, 1024, 1041, 1042, 137}, \"minecraft:animals_spawnable_on\": []int32{8}, \"minecraft:anvil\": []int32{408, 409, 410}, \"minecraft:armadillo_spawnable_on\": []int32{8, 494, 425, 429, 426, 439, 437, 433, 36, 10}, \"minecraft:axolotls_spawnable_on\": []int32{251}, \"minecraft:azalea_grows_on\": []int32{9, 8, 11, 10, 323, 1021, 1016, 1022, 55, 34, 36, 35, 494, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 249, 925}, \"minecraft:azalea_root_replaceable\": []int32{1, 2, 4, 6, 909, 1023, 9, 8, 11, 10, 323, 1021, 1016, 1022, 55, 494, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 36, 251, 37, 34, 249, 925}, \"minecraft:badlands_terracotta\": []int32{494, 425, 429, 426, 439, 437, 433}, \"minecraft:bamboo_blocks\": []int32{56, 65}, \"minecraft:bamboo_plantable_on\": []int32{34, 36, 35, 9, 8, 11, 10, 323, 1021, 1016, 1022, 55, 727, 726, 37, 38}, \"minecraft:banners\": []int32{503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534}, \"minecraft:base_stone_nether\": []int32{255, 258, 849}, \"minecraft:base_stone_overworld\": []int32{1, 2, 4, 6, 909, 1023}, \"minecraft:beacon_base_blocks\": []int32{840, 347, 181, 163, 164}, \"minecraft:beds\": []int32{117, 118, 114, 115, 112, 110, 116, 106, 111, 108, 105, 104, 109, 113, 103, 107}, \"minecraft:bee_growables\": []int32{601, 383, 384, 183, 316, 315, 598, 599, 788, 1009, 1010}, \"minecraft:beehives\": []int32{836, 837}, \"minecraft:big_dripleaf_placeable\": []int32{251, 1016, 9, 8, 11, 10, 323, 1021, 1022, 55, 184}, \"minecraft:birch_logs\": []int32{48, 68, 58, 76}, \"minecraft:blocks_wind_charge_explosions\": []int32{464, 31}, \"minecraft:buttons\": []int32{385, 386, 387, 388, 389, 391, 824, 825, 392, 393, 390, 246, 864}, \"minecraft:camel_sand_step_sound_blocks\": []int32{34, 36, 35, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677}, \"minecraft:campfires\": []int32{786, 787}, \"minecraft:candle_cakes\": []int32{886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902}, \"minecraft:candles\": []int32{869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885}, \"minecraft:cauldrons\": []int32{331, 332, 333, 334}, \"minecraft:cave_vines\": []int32{1010, 1009}, \"minecraft:ceiling_hanging_signs\": []int32{208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218}, \"minecraft:cherry_logs\": []int32{51, 71, 61, 79}, \"minecraft:climbable\": []int32{196, 317, 772, 805, 806, 807, 808, 1009, 1010}, \"minecraft:coal_ores\": []int32{43, 44}, \"minecraft:combination_step_sound_blocks\": []int32{478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 1014, 247, 797, 796, 809}, \"minecraft:completes_find_tree_tutorial\": []int32{52, 72, 62, 80, 46, 66, 63, 74, 50, 70, 60, 78, 48, 68, 58, 76, 49, 69, 59, 77, 47, 67, 57, 75, 53, 73, 64, 81, 51, 71, 61, 79, 798, 799, 800, 801, 789, 790, 791, 792, 85, 82, 83, 88, 86, 84, 90, 91, 89, 87, 608, 795}, \"minecraft:concrete_powder\": []int32{662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677}, \"minecraft:convertable_to_mud\": []int32{9, 10, 1021}, \"minecraft:copper_ores\": []int32{936, 937}, \"minecraft:coral_blocks\": []int32{688, 689, 690, 691, 692}, \"minecraft:coral_plants\": []int32{698, 699, 700, 701, 702}, \"minecraft:corals\": []int32{698, 699, 700, 701, 702, 708, 709, 710, 711, 712}, \"minecraft:crimson_stems\": []int32{798, 799, 800, 801}, \"minecraft:crops\": []int32{601, 383, 384, 183, 316, 315, 598, 599}, \"minecraft:crystal_sound_blocks\": []int32{903, 904}, \"minecraft:dampens_vibrations\": []int32{130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493}, \"minecraft:dark_oak_logs\": []int32{52, 72, 62, 80}, \"minecraft:dead_bush_may_place_on\": []int32{34, 36, 35, 494, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 9, 8, 11, 10, 323, 1021, 1016, 1022, 55}, \"minecraft:deepslate_ore_replaceables\": []int32{1023, 909}, \"minecraft:diamond_ores\": []int32{179, 180}, \"minecraft:dirt\": []int32{9, 8, 11, 10, 323, 1021, 1016, 1022, 55}, \"minecraft:does_not_block_hoppers\": []int32{836, 837}, \"minecraft:doors\": []int32{195, 583, 584, 585, 586, 588, 826, 827, 589, 590, 587, 974, 975, 977, 976, 978, 979, 981, 980, 232}, \"minecraft:dragon_immune\": []int32{464, 31, 335, 336, 603, 351, 604, 605, 832, 833, 146, 170, 842, 337, 308, 843, 1054}, \"minecraft:dragon_transparent\": []int32{465, 173, 174}, \"minecraft:dripstone_replaceable_blocks\": []int32{1, 2, 4, 6, 909, 1023}, \"minecraft:emerald_ores\": []int32{342, 343}, \"minecraft:enchantment_power_provider\": []int32{167}, \"minecraft:enchantment_power_transmitter\": []int32{0, 32, 33, 123, 124, 125, 126, 127, 173, 174, 247, 317, 318, 465, 501, 502, 611, 729, 730, 731, 796, 797, 809, 1020}, \"minecraft:enderman_holdable\": []int32{147, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 160, 159, 148, 9, 8, 11, 10, 323, 1021, 1016, 1022, 55, 34, 36, 37, 161, 162, 166, 250, 251, 311, 264, 312, 803, 802, 809, 794, 793, 796}, \"minecraft:fall_damage_resetting\": []int32{196, 317, 772, 805, 806, 807, 808, 1009, 1010, 788, 122}, \"minecraft:features_cannot_replace\": []int32{31, 175, 177, 336, 1054, 1057, 1058}, \"minecraft:fence_gates\": []int32{570, 568, 572, 569, 319, 567, 820, 821, 573, 574, 571}, \"minecraft:fences\": []int32{254, 578, 580, 575, 576, 577, 816, 817, 581, 582, 579, 326}, \"minecraft:fire\": []int32{173, 174}, \"minecraft:flower_pots\": []int32{355, 367, 368, 369, 370, 371, 372, 373, 374, 375, 366, 357, 358, 359, 360, 361, 363, 379, 380, 381, 365, 382, 376, 377, 378, 728, 844, 845, 846, 847, 1048, 1049, 364, 362, 356}, \"minecraft:flowers\": []int32{147, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 160, 159, 148, 497, 498, 500, 499, 600, 91, 1013, 30, 87, 1015, 593, 1011}, \"minecraft:foxes_spawnable_on\": []int32{8, 247, 249, 11, 10}, \"minecraft:frog_prefer_jump_to\": []int32{324, 1017}, \"minecraft:frogs_spawnable_on\": []int32{8, 1022, 54, 55}, \"minecraft:geode_invalid_blocks\": []int32{31, 32, 33, 248, 496, 724}, \"minecraft:goats_spawnable_on\": []int32{8, 1, 247, 249, 496, 37}, \"minecraft:gold_ores\": []int32{39, 45, 40}, \"minecraft:guarded_by_piglins\": []int32{163, 774, 177, 344, 860, 411, 1047, 613, 629, 625, 626, 623, 621, 627, 617, 622, 619, 616, 615, 620, 624, 628, 614, 618, 39, 45, 40}, \"minecraft:hoglin_repellents\": []int32{794, 845, 263, 843}, \"minecraft:ice\": []int32{248, 496, 724, 606}, \"minecraft:impermeable\": []int32{94, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 924}, \"minecraft:incorrect_for_diamond_tool\": []int32{}, \"minecraft:incorrect_for_gold_tool\": []int32{170, 842, 840, 843, 841, 181, 179, 180, 342, 343, 347, 163, 1047, 39, 40, 242, 243, 164, 1045, 41, 42, 97, 95, 96, 932, 1046, 936, 937, 957, 953, 941, 934, 955, 951, 939, 935, 954, 950, 938, 933, 956, 952, 940, 958, 973, 969, 965, 959, 971, 967, 963, 960, 972, 968, 964, 961, 970, 966, 962, 1006, 1056, 945, 944, 943, 942, 949, 948, 947, 946, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 982, 983, 985, 984, 986, 987, 989, 988, 974, 975, 977, 976, 978, 979, 981, 980}, \"minecraft:incorrect_for_iron_tool\": []int32{170, 842, 840, 843, 841}, \"minecraft:incorrect_for_netherite_tool\": []int32{}, \"minecraft:incorrect_for_stone_tool\": []int32{170, 842, 840, 843, 841, 181, 179, 180, 342, 343, 347, 163, 1047, 39, 40, 242, 243}, \"minecraft:incorrect_for_wooden_tool\": []int32{170, 842, 840, 843, 841, 181, 179, 180, 342, 343, 347, 163, 1047, 39, 40, 242, 243, 164, 1045, 41, 42, 97, 95, 96, 932, 1046, 936, 937, 957, 953, 941, 934, 955, 951, 939, 935, 954, 950, 938, 933, 956, 952, 940, 958, 973, 969, 965, 959, 971, 967, 963, 960, 972, 968, 964, 961, 970, 966, 962, 1006, 1056, 945, 944, 943, 942, 949, 948, 947, 946, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 982, 983, 985, 984, 986, 987, 989, 988, 974, 975, 977, 976, 978, 979, 981, 980}, \"minecraft:infiniburn_end\": []int32{255, 607, 31}, \"minecraft:infiniburn_nether\": []int32{255, 607}, \"minecraft:infiniburn_overworld\": []int32{255, 607}, \"minecraft:inside_step_sound_blocks\": []int32{925, 929, 318, 324, 908, 1015}, \"minecraft:invalid_spawn_inside\": []int32{335, 603}, \"minecraft:iron_ores\": []int32{41, 42}, \"minecraft:jungle_logs\": []int32{49, 69, 59, 77}, \"minecraft:lapis_ores\": []int32{95, 96}, \"minecraft:lava_pool_stone_cannot_replace\": []int32{31, 175, 177, 336, 1054, 1057, 1058, 85, 82, 83, 88, 86, 84, 90, 91, 89, 87, 52, 72, 62, 80, 46, 66, 63, 74, 50, 70, 60, 78, 48, 68, 58, 76, 49, 69, 59, 77, 47, 67, 57, 75, 53, 73, 64, 81, 51, 71, 61, 79, 798, 799, 800, 801, 789, 790, 791, 792}, \"minecraft:leaves\": []int32{85, 82, 83, 88, 86, 84, 90, 91, 89, 87}, \"minecraft:logs\": []int32{52, 72, 62, 80, 46, 66, 63, 74, 50, 70, 60, 78, 48, 68, 58, 76, 49, 69, 59, 77, 47, 67, 57, 75, 53, 73, 64, 81, 51, 71, 61, 79, 798, 799, 800, 801, 789, 790, 791, 792}, \"minecraft:logs_that_burn\": []int32{52, 72, 62, 80, 46, 66, 63, 74, 50, 70, 60, 78, 48, 68, 58, 76, 49, 69, 59, 77, 47, 67, 57, 75, 53, 73, 64, 81, 51, 71, 61, 79}, \"minecraft:lush_ground_replaceable\": []int32{1, 2, 4, 6, 909, 1023, 1010, 1009, 9, 8, 11, 10, 323, 1021, 1016, 1022, 55, 251, 37, 34}, \"minecraft:maintains_farmland\": []int32{315, 313, 316, 314, 601, 383, 384, 598, 148, 599, 183}, \"minecraft:mangrove_logs\": []int32{53, 73, 64, 81}, \"minecraft:mangrove_logs_can_grow_through\": []int32{1022, 55, 54, 89, 53, 30, 1014, 317}, \"minecraft:mangrove_roots_can_grow_through\": []int32{1022, 55, 54, 1014, 317, 30, 247}, \"minecraft:mineable/axe\": []int32{102, 314, 313, 1012, 727, 774, 836, 837, 601, 1018, 1017, 167, 305, 161, 786, 383, 777, 264, 1010, 1009, 177, 593, 592, 340, 834, 182, 803, 415, 125, 124, 778, 318, 123, 1020, 265, 253, 196, 502, 780, 324, 773, 316, 312, 307, 328, 384, 315, 311, 306, 162, 772, 1019, 781, 787, 1011, 252, 788, 501, 411, 808, 807, 317, 794, 806, 805, 183, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 570, 568, 572, 569, 319, 567, 820, 821, 573, 574, 571, 52, 72, 62, 80, 46, 66, 63, 74, 50, 70, 60, 78, 48, 68, 58, 76, 49, 69, 59, 77, 47, 67, 57, 75, 53, 73, 64, 81, 51, 71, 61, 79, 798, 799, 800, 801, 789, 790, 791, 792, 13, 14, 15, 16, 17, 19, 810, 811, 20, 21, 18, 23, 24, 25, 26, 27, 29, 1013, 30, 28, 186, 187, 188, 189, 191, 192, 828, 829, 193, 194, 190, 199, 200, 201, 202, 204, 205, 830, 831, 206, 207, 203, 385, 386, 387, 388, 389, 391, 824, 825, 392, 393, 390, 195, 583, 584, 585, 586, 588, 826, 827, 589, 590, 587, 254, 578, 580, 575, 576, 577, 816, 817, 581, 582, 579, 233, 234, 235, 236, 237, 239, 814, 815, 240, 241, 238, 539, 540, 541, 542, 543, 545, 812, 813, 546, 547, 544, 176, 348, 349, 350, 457, 459, 822, 823, 460, 461, 458, 288, 286, 290, 287, 284, 285, 818, 819, 291, 292, 289, 54, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 227, 228, 226, 229, 22, 548, 462, 56, 65, 168}, \"minecraft:mineable/hoe\": []int32{608, 795, 477, 680, 835, 804, 92, 93, 85, 82, 83, 88, 86, 84, 90, 91, 89, 926, 927, 1016, 1014, 928, 930, 929, 931, 1015, 87}, \"minecraft:mineable/pickaxe\": []int32{1, 2, 3, 4, 5, 6, 7, 12, 39, 40, 41, 42, 43, 44, 45, 95, 96, 97, 98, 99, 100, 101, 163, 164, 165, 169, 170, 175, 179, 180, 181, 185, 198, 231, 232, 242, 243, 255, 258, 259, 293, 294, 295, 296, 308, 309, 320, 321, 325, 326, 327, 329, 330, 337, 341, 342, 343, 344, 347, 412, 413, 416, 417, 418, 419, 420, 421, 422, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 494, 495, 535, 536, 537, 538, 549, 550, 551, 552, 553, 554, 555, 556, 558, 559, 560, 561, 562, 563, 564, 565, 566, 594, 595, 596, 597, 607, 609, 610, 612, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 703, 704, 705, 706, 707, 713, 714, 715, 716, 717, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 775, 776, 779, 782, 783, 784, 785, 793, 802, 840, 841, 842, 843, 848, 849, 850, 852, 853, 854, 855, 856, 857, 858, 860, 861, 862, 863, 866, 867, 868, 909, 923, 935, 934, 933, 932, 936, 937, 938, 939, 940, 941, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 1006, 1007, 1008, 1023, 1024, 1025, 1026, 1028, 1029, 1030, 1032, 1033, 1034, 1036, 1037, 1038, 1040, 1041, 1042, 1044, 1045, 1046, 1047, 248, 496, 724, 128, 121, 129, 905, 908, 907, 906, 903, 904, 300, 304, 303, 1043, 299, 302, 301, 246, 864, 353, 354, 759, 760, 761, 762, 763, 764, 766, 767, 768, 769, 770, 771, 851, 859, 865, 1027, 1031, 1035, 1039, 765, 912, 916, 921, 613, 629, 625, 626, 623, 621, 627, 617, 622, 619, 616, 615, 620, 624, 628, 614, 618, 408, 409, 410, 331, 332, 333, 334, 197, 119, 120, 423, 725, 298, 322, 557, 297, 1056, 910, 911, 917, 913, 914, 915, 918, 919, 920, 922, 945, 944, 943, 942, 949, 948, 947, 946, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 974, 975, 977, 976, 978, 979, 981, 980, 982, 983, 985, 984, 986, 987, 989, 988, 1059}, \"minecraft:mineable/shovel\": []int32{251, 9, 10, 11, 184, 8, 37, 323, 34, 36, 249, 247, 256, 602, 257, 1021, 55, 1022, 35, 38, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677}, \"minecraft:mob_interactable_doors\": []int32{195, 583, 584, 585, 586, 588, 826, 827, 589, 590, 587, 974, 975, 977, 976, 978, 979, 981, 980}, \"minecraft:mooshrooms_spawnable_on\": []int32{323}, \"minecraft:moss_replaceable\": []int32{1, 2, 4, 6, 909, 1023, 1010, 1009, 9, 8, 11, 10, 323, 1021, 1016, 1022, 55}, \"minecraft:mushroom_grow_block\": []int32{323, 11, 802, 793}, \"minecraft:needs_diamond_tool\": []int32{170, 842, 840, 843, 841}, \"minecraft:needs_iron_tool\": []int32{181, 179, 180, 342, 343, 347, 163, 1047, 39, 40, 242, 243}, \"minecraft:needs_stone_tool\": []int32{164, 1045, 41, 42, 97, 95, 96, 932, 1046, 936, 937, 957, 953, 941, 934, 955, 951, 939, 935, 954, 950, 938, 933, 956, 952, 940, 958, 973, 969, 965, 959, 971, 967, 963, 960, 972, 968, 964, 961, 970, 966, 962, 1006, 1056, 945, 944, 943, 942, 949, 948, 947, 946, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 982, 983, 985, 984, 986, 987, 989, 988, 974, 975, 977, 976, 978, 979, 981, 980}, \"minecraft:nether_carver_replaceables\": []int32{1, 2, 4, 6, 909, 1023, 255, 258, 849, 9, 8, 11, 10, 323, 1021, 1016, 1022, 55, 802, 793, 608, 795, 256, 257}, \"minecraft:nylium\": []int32{802, 793}, \"minecraft:oak_logs\": []int32{46, 66, 63, 74}, \"minecraft:occludes_vibration_signals\": []int32{130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145}, \"minecraft:overworld_carver_replaceables\": []int32{1, 2, 4, 6, 909, 1023, 9, 8, 11, 10, 323, 1021, 1016, 1022, 55, 34, 36, 35, 494, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 41, 42, 936, 937, 32, 37, 38, 99, 535, 923, 247, 496, 1045, 1046}, \"minecraft:overworld_natural_logs\": []int32{50, 48, 46, 49, 47, 52, 53, 51}, \"minecraft:parrots_spawnable_on\": []int32{8, 0, 85, 82, 83, 88, 86, 84, 90, 91, 89, 87, 52, 72, 62, 80, 46, 66, 63, 74, 50, 70, 60, 78, 48, 68, 58, 76, 49, 69, 59, 77, 47, 67, 57, 75, 53, 73, 64, 81, 51, 71, 61, 79, 798, 799, 800, 801, 789, 790, 791, 792}, \"minecraft:piglin_repellents\": []int32{174, 260, 785, 261, 787}, \"minecraft:planks\": []int32{13, 14, 15, 16, 17, 19, 810, 811, 20, 21, 18}, \"minecraft:polar_bears_spawnable_on_alternate\": []int32{248}, \"minecraft:portals\": []int32{263, 335, 603}, \"minecraft:pressure_plates\": []int32{412, 413, 233, 234, 235, 236, 237, 239, 814, 815, 240, 241, 238, 231, 863}, \"minecraft:prevent_mob_spawning_inside\": []int32{197, 119, 120, 423}, \"minecraft:rabbits_spawnable_on\": []int32{8, 247, 249, 34}, \"minecraft:rails\": []int32{197, 119, 120, 423}, \"minecraft:redstone_ores\": []int32{242, 243}, \"minecraft:replaceable\": []int32{0, 32, 33, 123, 124, 125, 126, 127, 173, 174, 247, 317, 318, 465, 501, 502, 611, 729, 730, 731, 796, 797, 809, 1020}, \"minecraft:replaceable_by_trees\": []int32{85, 82, 83, 88, 86, 84, 90, 91, 89, 87, 123, 124, 125, 317, 318, 497, 498, 499, 500, 501, 502, 1020, 600, 32, 126, 127, 796, 797, 809}, \"minecraft:sand\": []int32{34, 36, 35}, \"minecraft:saplings\": []int32{23, 24, 25, 26, 27, 29, 1012, 1013, 30, 28}, \"minecraft:sculk_replaceable\": []int32{1, 2, 4, 6, 909, 1023, 9, 8, 11, 10, 323, 1021, 1016, 1022, 55, 494, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 802, 793, 255, 258, 849, 34, 36, 37, 256, 257, 923, 1044, 251, 1008, 337, 535, 99}, \"minecraft:sculk_replaceable_world_gen\": []int32{1, 2, 4, 6, 909, 1023, 9, 8, 11, 10, 323, 1021, 1016, 1022, 55, 494, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 802, 793, 255, 258, 849, 34, 36, 37, 256, 257, 923, 1044, 251, 1008, 337, 535, 99, 1036, 1032, 1024, 1041, 1042, 1028}, \"minecraft:shulker_boxes\": []int32{613, 629, 625, 626, 623, 621, 627, 617, 622, 619, 616, 615, 620, 624, 628, 614, 618}, \"minecraft:signs\": []int32{186, 187, 188, 189, 191, 192, 828, 829, 193, 194, 190, 199, 200, 201, 202, 204, 205, 830, 831, 206, 207, 203}, \"minecraft:slabs\": []int32{539, 540, 541, 542, 543, 545, 812, 813, 546, 547, 544, 548, 549, 550, 556, 551, 562, 559, 560, 555, 554, 558, 553, 473, 474, 475, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 552, 561, 852, 857, 862, 1026, 1030, 1034, 1038, 971, 972, 973, 954, 955, 956, 957, 970, 557, 910, 914, 919}, \"minecraft:small_dripleaf_placeable\": []int32{251, 1016}, \"minecraft:small_flowers\": []int32{147, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 160, 159, 148}, \"minecraft:smelts_to_glass\": []int32{34, 36}, \"minecraft:snaps_goat_horn\": []int32{50, 48, 46, 49, 47, 52, 53, 51, 1, 496, 41, 43, 936, 342}, \"minecraft:sniffer_diggable_block\": []int32{9, 8, 11, 10, 1021, 1016, 1022, 55}, \"minecraft:sniffer_egg_hatch_boost\": []int32{1016}, \"minecraft:snow\": []int32{247, 249, 925}, \"minecraft:snow_layer_can_survive_on\": []int32{838, 256, 1022}, \"minecraft:snow_layer_cannot_survive_on\": []int32{248, 496, 464}, \"minecraft:soul_fire_base_blocks\": []int32{256, 257}, \"minecraft:soul_speed_blocks\": []int32{256, 257}, \"minecraft:spruce_logs\": []int32{47, 67, 57, 75}, \"minecraft:stairs\": []int32{176, 348, 349, 350, 457, 459, 822, 823, 460, 461, 458, 462, 198, 341, 327, 321, 320, 596, 422, 538, 471, 470, 472, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 850, 858, 861, 1025, 1029, 1033, 1037, 950, 951, 952, 953, 967, 968, 969, 966, 322, 911, 915, 920}, \"minecraft:standing_signs\": []int32{186, 187, 188, 189, 191, 192, 828, 829, 193, 194, 190}, \"minecraft:stone_bricks\": []int32{293, 294, 295, 296}, \"minecraft:stone_buttons\": []int32{246, 864}, \"minecraft:stone_ore_replaceables\": []int32{1, 2, 4, 6}, \"minecraft:stone_pressure_plates\": []int32{231, 863}, \"minecraft:strider_warm_blocks\": []int32{33}, \"minecraft:sword_efficient\": []int32{85, 82, 83, 88, 86, 84, 90, 91, 89, 87, 23, 24, 25, 26, 27, 29, 1012, 1013, 30, 28, 147, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 160, 159, 148, 601, 383, 384, 183, 316, 315, 598, 599, 123, 124, 125, 317, 318, 497, 498, 499, 500, 501, 502, 1020, 600, 161, 162, 252, 311, 264, 265, 312, 313, 314, 324, 340, 788, 1009, 1010, 1011, 1014, 1015, 1017, 1018, 1019, 328, 794, 796, 797, 803, 805, 806, 807, 808, 809, 592, 593}, \"minecraft:tall_flowers\": []int32{497, 498, 500, 499, 600}, \"minecraft:terracotta\": []int32{494, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440}, \"minecraft:trail_ruins_replaceable\": []int32{37}, \"minecraft:trapdoors\": []int32{288, 286, 290, 287, 284, 285, 818, 819, 291, 292, 289, 466, 982, 983, 985, 984, 986, 987, 989, 988}, \"minecraft:underwater_bonemeals\": []int32{126, 698, 699, 700, 701, 702, 708, 709, 710, 711, 712, 718, 719, 720, 721, 722}, \"minecraft:unstable_bottom_center\": []int32{570, 568, 572, 569, 319, 567, 820, 821, 573, 574, 571}, \"minecraft:valid_spawn\": []int32{8, 11}, \"minecraft:vibration_resonators\": []int32{903}, \"minecraft:wall_corals\": []int32{718, 719, 720, 721, 722}, \"minecraft:wall_hanging_signs\": []int32{219, 220, 221, 222, 223, 224, 225, 227, 228, 226, 229}, \"minecraft:wall_post_override\": []int32{171, 260, 244, 346, 186, 187, 188, 189, 191, 192, 828, 829, 193, 194, 190, 199, 200, 201, 202, 204, 205, 830, 831, 206, 207, 203, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 412, 413, 233, 234, 235, 236, 237, 239, 814, 815, 240, 241, 238, 231, 863}, \"minecraft:wall_signs\": []int32{199, 200, 201, 202, 204, 205, 830, 831, 206, 207, 203}, \"minecraft:walls\": []int32{353, 354, 759, 760, 761, 762, 763, 764, 766, 767, 768, 769, 770, 771, 851, 859, 865, 1027, 1031, 1035, 1039, 765, 912, 916, 921}, \"minecraft:warped_stems\": []int32{789, 790, 791, 792}, \"minecraft:wart_blocks\": []int32{608, 795}, \"minecraft:wither_immune\": []int32{464, 31, 335, 336, 603, 351, 604, 605, 832, 833, 146, 465, 1054}, \"minecraft:wither_summon_base_blocks\": []int32{256, 257}, \"minecraft:wolves_spawnable_on\": []int32{8, 247, 249, 10, 11}, \"minecraft:wooden_buttons\": []int32{385, 386, 387, 388, 389, 391, 824, 825, 392, 393, 390}, \"minecraft:wooden_doors\": []int32{195, 583, 584, 585, 586, 588, 826, 827, 589, 590, 587}, \"minecraft:wooden_fences\": []int32{254, 578, 580, 575, 576, 577, 816, 817, 581, 582, 579}, \"minecraft:wooden_pressure_plates\": []int32{233, 234, 235, 236, 237, 239, 814, 815, 240, 241, 238}, \"minecraft:wooden_slabs\": []int32{539, 540, 541, 542, 543, 545, 812, 813, 546, 547, 544}, \"minecraft:wooden_stairs\": []int32{176, 348, 349, 350, 457, 459, 822, 823, 460, 461, 458}, \"minecraft:wooden_trapdoors\": []int32{288, 286, 290, 287, 284, 285, 818, 819, 291, 292, 289}, \"minecraft:wool\": []int32{130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145}, \"minecraft:wool_carpets\": []int32{478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493}}, \"minecraft:cat_variant\": map[string][]int32{\"minecraft:default_spawns\": []int32{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, \"minecraft:full_moon_spawns\": []int32{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}, \"minecraft:damage_type\": map[string][]int32{\"minecraft:always_hurts_ender_dragons\": []int32{14, 8, 33, 1}, \"minecraft:always_kills_armor_stands\": []int32{0, 42, 13, 46, 44}, \"minecraft:always_most_significant_fall\": []int32{30}, \"minecraft:always_triggers_silverfish\": []int32{25}, \"minecraft:avoids_guardian_thorns\": []int32{25, 40, 14, 8, 33, 1}, \"minecraft:burn_from_stepping\": []int32{3, 19}, \"minecraft:burns_armor_stands\": []int32{29}, \"minecraft:bypasses_armor\": []int32{29, 21, 4, 6, 15, 17, 45, 5, 37, 9, 16, 36, 25, 22, 30, 18, 34, 31}, \"minecraft:bypasses_effects\": []int32{37}, \"minecraft:bypasses_enchantments\": []int32{34}, \"minecraft:bypasses_invulnerability\": []int32{30, 18}, \"minecraft:bypasses_resistance\": []int32{30, 18}, \"minecraft:bypasses_shield\": []int32{29, 21, 4, 6, 15, 17, 45, 5, 37, 9, 16, 36, 25, 22, 30, 18, 34, 31, 10, 12}, \"minecraft:bypasses_wolf_armor\": []int32{30, 18, 4, 6, 7, 16, 21, 22, 25, 31, 37, 40, 45}, \"minecraft:can_break_armor_stand\": []int32{32, 33}, \"minecraft:damages_helmet\": []int32{10, 11, 12}, \"minecraft:ignites_armor_stands\": []int32{20, 3}, \"minecraft:is_drowning\": []int32{6}, \"minecraft:is_explosion\": []int32{14, 8, 33, 1}, \"minecraft:is_fall\": []int32{9, 36}, \"minecraft:is_fire\": []int32{20, 3, 29, 23, 19, 43, 13}, \"minecraft:is_freezing\": []int32{16}, \"minecraft:is_lightning\": []int32{24}, \"minecraft:is_player_attack\": []int32{32}, \"minecraft:is_projectile\": []int32{0, 42, 28, 43, 13, 46, 41, 44}, \"minecraft:no_anger\": []int32{27}, \"minecraft:no_impact\": []int32{6}, \"minecraft:no_knockback\": []int32{8, 33, 1, 20, 24, 29, 23, 19, 21, 4, 6, 37, 2, 9, 15, 30, 17, 25, 45, 5, 7, 39, 16, 36, 31, 18, 3}, \"minecraft:panic_causes\": []int32{2, 16, 19, 20, 23, 24, 29, 0, 5, 8, 13, 14, 22, 25, 26, 28, 32, 33, 34, 38, 41, 42, 43, 44, 45, 46}, \"minecraft:panic_environmental_causes\": []int32{2, 16, 19, 20, 23, 24, 29}, \"minecraft:witch_resistant_to\": []int32{25, 22, 34, 40}, \"minecraft:wither_immune_to\": []int32{6}}, \"minecraft:enchantment\": map[string][]int32{\"minecraft:curse\": []int32{2, 40}, \"minecraft:double_trade_price\": []int32{2, 40, 37, 35, 14, 22, 41}, \"minecraft:exclusive_set/armor\": []int32{27, 3, 11, 26}, \"minecraft:exclusive_set/boots\": []int32{14, 7}, \"minecraft:exclusive_set/bow\": []int32{16, 22}, \"minecraft:exclusive_set/crossbow\": []int32{23, 24}, \"minecraft:exclusive_set/damage\": []int32{32, 34, 1, 15, 6, 4}, \"minecraft:exclusive_set/mining\": []int32{13, 33}, \"minecraft:exclusive_set/riptide\": []int32{19, 5}, \"minecraft:in_enchanting_table\": []int32{27, 11, 9, 3, 26, 30, 0, 38, 7, 32, 34, 1, 17, 10, 18, 36, 8, 33, 39, 13, 25, 28, 12, 16, 20, 21, 19, 15, 31, 5, 23, 29, 24, 6, 4}, \"minecraft:non_treasure\": []int32{27, 11, 9, 3, 26, 30, 0, 38, 7, 32, 34, 1, 17, 10, 18, 36, 8, 33, 39, 13, 25, 28, 12, 16, 20, 21, 19, 15, 31, 5, 23, 29, 24, 6, 4}, \"minecraft:on_mob_spawn_equipment\": []int32{27, 11, 9, 3, 26, 30, 0, 38, 7, 32, 34, 1, 17, 10, 18, 36, 8, 33, 39, 13, 25, 28, 12, 16, 20, 21, 19, 15, 31, 5, 23, 29, 24, 6, 4}, \"minecraft:on_random_loot\": []int32{27, 11, 9, 3, 26, 30, 0, 38, 7, 32, 34, 1, 17, 10, 18, 36, 8, 33, 39, 13, 25, 28, 12, 16, 20, 21, 19, 15, 31, 5, 23, 29, 24, 6, 4, 2, 40, 14, 22}, \"minecraft:on_traded_equipment\": []int32{27, 11, 9, 3, 26, 30, 0, 38, 7, 32, 34, 1, 17, 10, 18, 36, 8, 33, 39, 13, 25, 28, 12, 16, 20, 21, 19, 15, 31, 5, 23, 29, 24, 6, 4}, \"minecraft:prevents_bee_spawns_when_mining\": []int32{33}, \"minecraft:prevents_decorated_pot_shattering\": []int32{33}, \"minecraft:prevents_ice_melting\": []int32{33}, \"minecraft:prevents_infested_spawns\": []int32{33}, \"minecraft:smelts_loot\": []int32{10}, \"minecraft:tooltip_order\": []int32{2, 40, 31, 5, 41, 14, 32, 34, 1, 15, 25, 6, 4, 24, 36, 23, 10, 12, 17, 28, 27, 3, 11, 26, 9, 13, 18, 33, 20, 8, 29, 21, 30, 0, 35, 37, 7, 38, 19, 39, 16, 22}, \"minecraft:tradeable\": []int32{27, 11, 9, 3, 26, 30, 0, 38, 7, 32, 34, 1, 17, 10, 18, 36, 8, 33, 39, 13, 25, 28, 12, 16, 20, 21, 19, 15, 31, 5, 23, 29, 24, 6, 4, 2, 40, 14, 22}, \"minecraft:treasure\": []int32{2, 40, 37, 35, 14, 22, 41}}, \"minecraft:entity_type\": map[string][]int32{\"minecraft:aquatic\": []int32{111, 5, 50, 29, 20, 83, 86, 110, 24, 101, 48, 104}, \"minecraft:arrows\": []int32{4, 99}, \"minecraft:arthropod\": []int32{7, 34, 90, 100, 16}, \"minecraft:axolotl_always_hostiles\": []int32{27, 50, 29}, \"minecraft:axolotl_hunt_targets\": []int32{110, 83, 86, 20, 101, 48, 104}, \"minecraft:beehive_inhabitors\": []int32{7}, \"minecraft:can_breathe_under_water\": []int32{91, 102, 120, 92, 11, 125, 124, 126, 127, 123, 27, 54, 119, 76, 5, 43, 50, 29, 111, 48, 20, 83, 86, 101, 110, 104, 3}, \"minecraft:can_turn_in_boats\": []int32{12}, \"minecraft:deflects_projectiles\": []int32{12}, \"minecraft:dismounts_underwater\": []int32{14, 19, 25, 53, 65, 71, 77, 85, 100, 103, 108, 125}, \"minecraft:fall_damage_immune\": []int32{57, 96, 88, 0, 6, 7, 8, 15, 19, 45, 76, 67, 72, 75, 119, 12}, \"minecraft:freeze_hurts_extra_types\": []int32{103, 8, 67}, \"minecraft:freeze_immune_entity_types\": []int32{102, 81, 96, 119}, \"minecraft:frog_food\": []int32{93, 67}, \"minecraft:ignores_poison_and_regen\": []int32{91, 102, 120, 92, 11, 125, 124, 126, 127, 123, 27, 54, 119, 76}, \"minecraft:illager\": []int32{35, 55, 80, 114}, \"minecraft:illager_friends\": []int32{35, 55, 80, 114}, \"minecraft:immune_to_infested\": []int32{90}, \"minecraft:immune_to_oozing\": []int32{93}, \"minecraft:impact_projectiles\": []int32{4, 99, 41, 97, 62, 94, 28, 109, 26, 121, 117, 13}, \"minecraft:inverted_healing_and_harm\": []int32{91, 102, 120, 92, 11, 125, 124, 126, 127, 123, 27, 54, 119, 76}, \"minecraft:no_anger_from_wind_charge\": []int32{12, 91, 11, 102, 124, 54, 100, 16, 93}, \"minecraft:non_controlling_rider\": []int32{93, 67}, \"minecraft:not_scary_for_pufferfish\": []int32{111, 50, 29, 20, 83, 86, 110, 24, 101, 48, 104}, \"minecraft:powder_snow_walkable_mobs\": []int32{84, 34, 90, 42}, \"minecraft:raiders\": []int32{35, 80, 85, 114, 55, 118}, \"minecraft:redirectable_projectile\": []int32{62, 117, 13}, \"minecraft:sensitive_to_bane_of_arthropods\": []int32{7, 34, 90, 100, 16}, \"minecraft:sensitive_to_impaling\": []int32{111, 5, 50, 29, 20, 83, 86, 110, 24, 101, 48, 104}, \"minecraft:sensitive_to_smite\": []int32{91, 102, 120, 92, 11, 125, 124, 126, 127, 123, 27, 54, 119, 76}, \"minecraft:skeletons\": []int32{91, 102, 120, 92, 11}, \"minecraft:undead\": []int32{91, 102, 120, 92, 11, 125, 124, 126, 127, 123, 27, 54, 119, 76}, \"minecraft:wither_friends\": []int32{91, 102, 120, 92, 11, 125, 124, 126, 127, 123, 27, 54, 119, 76}, \"minecraft:zombies\": []int32{125, 124, 126, 127, 123, 27, 54}}, \"minecraft:fluid\": map[string][]int32{\"minecraft:lava\": []int32{4, 3}, \"minecraft:water\": []int32{2, 1}}, \"minecraft:game_event\": map[string][]int32{\"minecraft:allay_can_listen\": []int32{33}, \"minecraft:ignore_vibrations_sneaking\": []int32{26, 36, 41, 42, 29, 28}, \"minecraft:shrieker_can_listen\": []int32{37}, \"minecraft:vibrations\": []int32{1, 2, 3, 5, 6, 7, 8, 0, 4, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 32, 33, 34, 35, 36, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 23}, \"minecraft:warden_can_listen\": []int32{1, 2, 3, 5, 6, 7, 8, 0, 4, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 32, 33, 34, 35, 36, 38, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 39, 37}}, \"minecraft:instrument\": map[string][]int32{\"minecraft:goat_horns\": []int32{0, 1, 2, 3, 4, 5, 6, 7}, \"minecraft:regular_goat_horns\": []int32{0, 1, 2, 3}, \"minecraft:screaming_goat_horns\": []int32{4, 5, 6, 7}}, \"minecraft:item\": map[string][]int32{\"minecraft:acacia_logs\": []int32{136, 170, 149, 159}, \"minecraft:anvil\": []int32{419, 420, 421}, \"minecraft:armadillo_food\": []int32{1000}, \"minecraft:arrows\": []int32{802, 1160, 1159}, \"minecraft:axes\": []int32{841, 826, 831, 846, 821, 836}, \"minecraft:axolotl_food\": []int32{918}, \"minecraft:bamboo_blocks\": []int32{144, 165}, \"minecraft:banners\": []int32{1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148}, \"minecraft:beacon_payment_items\": []int32{816, 806, 805, 815, 811}, \"minecraft:beds\": []int32{978, 979, 975, 976, 973, 971, 977, 967, 972, 969, 966, 965, 970, 974, 964, 968}, \"minecraft:bee_food\": []int32{218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 465, 466, 468, 467, 232, 185, 198, 55, 181, 246, 294, 233}, \"minecraft:birch_logs\": []int32{134, 168, 147, 157}, \"minecraft:boats\": []int32{774, 776, 778, 780, 782, 786, 788, 790, 784, 775, 777, 779, 781, 783, 787, 789, 791, 785}, \"minecraft:bookshelf_books\": []int32{925, 1092, 1114, 1091, 1166}, \"minecraft:breaks_decorated_pots\": []int32{838, 823, 828, 843, 818, 833, 841, 826, 831, 846, 821, 836, 840, 825, 830, 845, 820, 835, 839, 824, 829, 844, 819, 834, 842, 827, 832, 847, 822, 837, 1188, 1093}, \"minecraft:buttons\": []int32{684, 685, 686, 687, 688, 690, 693, 694, 691, 692, 689, 682, 683}, \"minecraft:camel_food\": []int32{308}, \"minecraft:candles\": []int32{1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257}, \"minecraft:cat_food\": []int32{935, 936}, \"minecraft:cherry_logs\": []int32{137, 171, 150, 160}, \"minecraft:chest_armor\": []int32{857, 861, 873, 865, 869, 877}, \"minecraft:chest_boats\": []int32{775, 777, 779, 781, 783, 787, 789, 791, 785}, \"minecraft:chicken_food\": []int32{853, 987, 986, 1155, 1152, 1153}, \"minecraft:cluster_max_harvestables\": []int32{840, 830, 835, 845, 825, 820}, \"minecraft:coal_ores\": []int32{62, 63}, \"minecraft:coals\": []int32{803, 804}, \"minecraft:compasses\": []int32{928, 929}, \"minecraft:completes_find_tree_tutorial\": []int32{138, 172, 151, 161, 132, 166, 145, 155, 136, 170, 149, 159, 134, 168, 147, 157, 135, 169, 148, 158, 133, 167, 146, 156, 139, 173, 152, 162, 137, 171, 150, 160, 142, 153, 174, 163, 143, 154, 175, 164, 179, 176, 177, 182, 180, 178, 184, 185, 183, 181, 517, 518}, \"minecraft:copper_ores\": []int32{66, 67}, \"minecraft:cow_food\": []int32{854}, \"minecraft:creeper_drop_music_discs\": []int32{1168, 1169, 1170, 1171, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181}, \"minecraft:creeper_igniters\": []int32{798, 1089}, \"minecraft:crimson_stems\": []int32{142, 153, 174, 163}, \"minecraft:dampens_vibrations\": []int32{202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461}, \"minecraft:dark_oak_logs\": []int32{138, 172, 151, 161}, \"minecraft:decorated_pot_ingredients\": []int32{921, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1307, 1308, 1309, 1310, 1296, 1298, 1306}, \"minecraft:decorated_pot_sherds\": []int32{1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1297, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1307, 1308, 1309, 1310, 1296, 1298, 1306}, \"minecraft:diamond_ores\": []int32{76, 77}, \"minecraft:dirt\": []int32{28, 27, 30, 29, 364, 31, 247, 32, 141}, \"minecraft:doors\": []int32{711, 712, 713, 714, 715, 717, 720, 721, 718, 719, 716, 722, 723, 724, 725, 726, 727, 728, 729, 710}, \"minecraft:dyeable\": []int32{856, 857, 858, 859, 1127, 797}, \"minecraft:emerald_ores\": []int32{72, 73}, \"minecraft:enchantable/armor\": []int32{859, 863, 875, 867, 871, 879, 858, 862, 874, 866, 870, 878, 857, 861, 873, 865, 869, 877, 856, 860, 872, 864, 868, 876, 794}, \"minecraft:enchantable/bow\": []int32{801}, \"minecraft:enchantable/chest_armor\": []int32{857, 861, 873, 865, 869, 877}, \"minecraft:enchantable/crossbow\": []int32{1192}, \"minecraft:enchantable/durability\": []int32{859, 863, 875, 867, 871, 879, 858, 862, 874, 866, 870, 878, 857, 861, 873, 865, 869, 877, 856, 860, 872, 864, 868, 876, 794, 773, 1162, 838, 823, 828, 843, 818, 833, 841, 826, 831, 846, 821, 836, 840, 825, 830, 845, 820, 835, 839, 824, 829, 844, 819, 834, 842, 827, 832, 847, 822, 837, 801, 1192, 1188, 798, 983, 1268, 931, 771, 772, 1093}, \"minecraft:enchantable/equippable\": []int32{859, 863, 875, 867, 871, 879, 858, 862, 874, 866, 870, 878, 857, 861, 873, 865, 869, 877, 856, 860, 872, 864, 868, 876, 794, 773, 1105, 1107, 1106, 1103, 1104, 1108, 1109, 323}, \"minecraft:enchantable/fire_aspect\": []int32{838, 823, 828, 843, 818, 833, 1093}, \"minecraft:enchantable/fishing\": []int32{931}, \"minecraft:enchantable/foot_armor\": []int32{859, 863, 875, 867, 871, 879}, \"minecraft:enchantable/head_armor\": []int32{856, 860, 872, 864, 868, 876, 794}, \"minecraft:enchantable/leg_armor\": []int32{858, 862, 874, 866, 870, 878}, \"minecraft:enchantable/mace\": []int32{1093}, \"minecraft:enchantable/mining\": []int32{841, 826, 831, 846, 821, 836, 840, 825, 830, 845, 820, 835, 839, 824, 829, 844, 819, 834, 842, 827, 832, 847, 822, 837, 983}, \"minecraft:enchantable/mining_loot\": []int32{841, 826, 831, 846, 821, 836, 840, 825, 830, 845, 820, 835, 839, 824, 829, 844, 819, 834, 842, 827, 832, 847, 822, 837}, \"minecraft:enchantable/sharp_weapon\": []int32{838, 823, 828, 843, 818, 833, 841, 826, 831, 846, 821, 836}, \"minecraft:enchantable/sword\": []int32{838, 823, 828, 843, 818, 833}, \"minecraft:enchantable/trident\": []int32{1188}, \"minecraft:enchantable/vanishing\": []int32{859, 863, 875, 867, 871, 879, 858, 862, 874, 866, 870, 878, 857, 861, 873, 865, 869, 877, 856, 860, 872, 864, 868, 876, 794, 773, 1162, 838, 823, 828, 843, 818, 833, 841, 826, 831, 846, 821, 836, 840, 825, 830, 845, 820, 835, 839, 824, 829, 844, 819, 834, 842, 827, 832, 847, 822, 837, 801, 1192, 1188, 798, 983, 1268, 931, 771, 772, 1093, 928, 323, 1105, 1107, 1106, 1103, 1104, 1108, 1109}, \"minecraft:enchantable/weapon\": []int32{838, 823, 828, 843, 818, 833, 841, 826, 831, 846, 821, 836, 1093}, \"minecraft:fence_gates\": []int32{754, 752, 756, 753, 750, 751, 759, 760, 757, 758, 755}, \"minecraft:fences\": []int32{311, 315, 317, 312, 313, 314, 320, 321, 318, 319, 316, 369}, \"minecraft:fishes\": []int32{935, 939, 936, 940, 938, 937}, \"minecraft:flowers\": []int32{218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 465, 466, 468, 467, 232, 185, 198, 55, 181, 246, 294, 233}, \"minecraft:foot_armor\": []int32{859, 863, 875, 867, 871, 879}, \"minecraft:fox_food\": []int32{1216, 1217}, \"minecraft:freeze_immune_wearables\": []int32{859, 858, 857, 856, 1127}, \"minecraft:frog_food\": []int32{926}, \"minecraft:goat_food\": []int32{854}, \"minecraft:gold_ores\": []int32{68, 78, 69}, \"minecraft:hanging_signs\": []int32{897, 898, 899, 901, 902, 900, 903, 906, 907, 904, 905}, \"minecraft:head_armor\": []int32{856, 860, 872, 864, 868, 876, 794}, \"minecraft:hoes\": []int32{842, 827, 832, 847, 822, 837}, \"minecraft:hoglin_food\": []int32{236}, \"minecraft:horse_food\": []int32{854, 962, 445, 800, 1102, 884, 885}, \"minecraft:horse_tempt_items\": []int32{1102, 884, 885}, \"minecraft:ignored_by_piglin_babies\": []int32{913}, \"minecraft:iron_ores\": []int32{64, 65}, \"minecraft:jungle_logs\": []int32{135, 169, 148, 158}, \"minecraft:lapis_ores\": []int32{74, 75}, \"minecraft:leaves\": []int32{179, 176, 177, 182, 180, 178, 184, 185, 183, 181}, \"minecraft:lectern_books\": []int32{1092, 1091}, \"minecraft:leg_armor\": []int32{858, 862, 874, 866, 870, 878}, \"minecraft:llama_food\": []int32{854, 445}, \"minecraft:llama_tempt_items\": []int32{445}, \"minecraft:logs\": []int32{138, 172, 151, 161, 132, 166, 145, 155, 136, 170, 149, 159, 134, 168, 147, 157, 135, 169, 148, 158, 133, 167, 146, 156, 139, 173, 152, 162, 137, 171, 150, 160, 142, 153, 174, 163, 143, 154, 175, 164}, \"minecraft:logs_that_burn\": []int32{138, 172, 151, 161, 132, 166, 145, 155, 136, 170, 149, 159, 134, 168, 147, 157, 135, 169, 148, 158, 133, 167, 146, 156, 139, 173, 152, 162, 137, 171, 150, 160}, \"minecraft:mangrove_logs\": []int32{139, 173, 152, 162}, \"minecraft:meat\": []int32{988, 990, 989, 991, 1132, 882, 1119, 1131, 881, 1118, 992}, \"minecraft:non_flammable_wood\": []int32{143, 154, 175, 164, 142, 153, 174, 163, 45, 46, 262, 263, 708, 709, 320, 321, 740, 741, 759, 760, 393, 394, 693, 694, 720, 721, 895, 896, 907, 906}, \"minecraft:noteblock_top_instruments\": []int32{1106, 1103, 1107, 1108, 1104, 1109, 1105}, \"minecraft:oak_logs\": []int32{132, 166, 145, 155}, \"minecraft:ocelot_food\": []int32{935, 936}, \"minecraft:panda_food\": []int32{251}, \"minecraft:parrot_food\": []int32{853, 987, 986, 1155, 1152, 1153}, \"minecraft:parrot_poisonous_food\": []int32{980}, \"minecraft:pickaxes\": []int32{840, 825, 830, 845, 820, 835}, \"minecraft:pig_food\": []int32{1097, 1098, 1154}, \"minecraft:piglin_food\": []int32{881, 882}, \"minecraft:piglin_loved\": []int32{68, 78, 69, 90, 1231, 697, 815, 1213, 932, 1102, 1007, 884, 885, 872, 873, 874, 875, 1125, 828, 830, 829, 831, 832, 814, 84}, \"minecraft:piglin_repellents\": []int32{331, 1215, 1219}, \"minecraft:planks\": []int32{36, 37, 38, 39, 40, 42, 45, 46, 43, 44, 41}, \"minecraft:rabbit_food\": []int32{1097, 1102, 218}, \"minecraft:rails\": []int32{763, 761, 762, 764}, \"minecraft:redstone_ores\": []int32{70, 71}, \"minecraft:sand\": []int32{57, 60, 58}, \"minecraft:saplings\": []int32{48, 49, 50, 51, 52, 54, 197, 198, 55, 53}, \"minecraft:sheep_food\": []int32{854}, \"minecraft:shovels\": []int32{839, 824, 829, 844, 819, 834}, \"minecraft:signs\": []int32{886, 887, 888, 890, 889, 892, 895, 896, 893, 894, 891}, \"minecraft:skulls\": []int32{1105, 1107, 1106, 1103, 1104, 1108, 1109}, \"minecraft:slabs\": []int32{252, 253, 254, 255, 256, 258, 262, 263, 259, 260, 257, 261, 264, 265, 271, 266, 277, 274, 275, 270, 269, 273, 268, 278, 279, 280, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 267, 276, 1229, 1237, 1233, 652, 653, 655, 654, 130, 129, 128, 111, 110, 109, 108, 131, 272, 13, 18, 22}, \"minecraft:small_flowers\": []int32{218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231}, \"minecraft:smelts_to_glass\": []int32{57, 60}, \"minecraft:sniffer_food\": []int32{1152}, \"minecraft:soul_fire_base_blocks\": []int32{326, 327}, \"minecraft:spruce_logs\": []int32{133, 167, 146, 156}, \"minecraft:stairs\": []int32{383, 384, 385, 386, 387, 389, 393, 394, 390, 391, 388, 392, 304, 380, 370, 362, 361, 297, 426, 513, 507, 506, 508, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 1230, 1238, 1234, 635, 636, 638, 637, 107, 106, 105, 104, 126, 125, 124, 127, 363, 14, 19, 23}, \"minecraft:stone_bricks\": []int32{340, 341, 342, 343}, \"minecraft:stone_buttons\": []int32{682, 683}, \"minecraft:stone_crafting_materials\": []int32{35, 1228, 9}, \"minecraft:stone_tool_materials\": []int32{35, 1228, 9}, \"minecraft:strider_food\": []int32{237}, \"minecraft:strider_tempt_items\": []int32{237, 772}, \"minecraft:swords\": []int32{838, 823, 828, 843, 818, 833}, \"minecraft:tall_flowers\": []int32{465, 466, 468, 467, 232}, \"minecraft:terracotta\": []int32{462, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442}, \"minecraft:trapdoors\": []int32{735, 733, 737, 734, 731, 732, 740, 741, 738, 739, 736, 730, 742, 743, 744, 745, 746, 747, 748, 749}, \"minecraft:trim_materials\": []int32{811, 813, 815, 807, 806, 805, 816, 657, 808, 809}, \"minecraft:trim_templates\": []int32{1274, 1280, 1272, 1275, 1271, 1273, 1279, 1277, 1270, 1276, 1278, 1281, 1282, 1283, 1284, 1285, 1286, 1287}, \"minecraft:trimmable_armor\": []int32{859, 863, 875, 867, 871, 879, 858, 862, 874, 866, 870, 878, 857, 861, 873, 865, 869, 877, 856, 860, 872, 864, 868, 876, 794}, \"minecraft:turtle_food\": []int32{200}, \"minecraft:villager_plantable_seeds\": []int32{853, 1098, 1097, 1155, 1152, 1153}, \"minecraft:walls\": []int32{397, 398, 399, 400, 401, 402, 403, 404, 406, 407, 408, 409, 410, 411, 412, 414, 413, 415, 416, 418, 417, 405, 15, 20, 24}, \"minecraft:warped_stems\": []int32{143, 154, 175, 164}, \"minecraft:wart_blocks\": []int32{517, 518}, \"minecraft:wolf_food\": []int32{988, 990, 989, 991, 1132, 882, 1119, 1131, 881, 1118, 992}, \"minecraft:wooden_buttons\": []int32{684, 685, 686, 687, 688, 690, 693, 694, 691, 692, 689}, \"minecraft:wooden_doors\": []int32{711, 712, 713, 714, 715, 717, 720, 721, 718, 719, 716}, \"minecraft:wooden_fences\": []int32{311, 315, 317, 312, 313, 314, 320, 321, 318, 319, 316}, \"minecraft:wooden_pressure_plates\": []int32{699, 700, 701, 702, 703, 705, 708, 709, 706, 707, 704}, \"minecraft:wooden_slabs\": []int32{252, 253, 254, 255, 256, 258, 262, 263, 259, 260, 257}, \"minecraft:wooden_stairs\": []int32{383, 384, 385, 386, 387, 389, 393, 394, 390, 391, 388}, \"minecraft:wooden_trapdoors\": []int32{735, 733, 737, 734, 731, 732, 740, 741, 738, 739, 736}, \"minecraft:wool\": []int32{202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217}, \"minecraft:wool_carpets\": []int32{446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461}}, \"minecraft:painting_variant\": map[string][]int32{\"minecraft:placeable\": []int32{23, 1, 0, 2, 5, 31, 46, 34, 12, 36, 41, 13, 45, 21, 25, 8, 39, 44, 38, 49, 18, 32, 30, 7, 37, 14, 4, 22, 26, 35, 43, 3, 6, 9, 10, 11, 16, 17, 19, 24, 27, 28, 29, 33, 40, 42}}, \"minecraft:point_of_interest_type\": map[string][]int32{\"minecraft:acquirable_job_site\": []int32{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, \"minecraft:bee_home\": []int32{15, 16}, \"minecraft:village\": []int32{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}}, \"minecraft:worldgen/biome\": map[string][]int32{\"minecraft:allows_surface_slime_spawns\": []int32{53, 31}, \"minecraft:allows_tropical_fish_spawns_at_any_height\": []int32{30}, \"minecraft:has_closer_water_fog\": []int32{53, 31}, \"minecraft:has_structure/ancient_city\": []int32{10}, \"minecraft:has_structure/bastion_remnant\": []int32{7, 34, 48, 58}, \"minecraft:has_structure/buried_treasure\": []int32{3, 44}, \"minecraft:has_structure/desert_pyramid\": []int32{14}, \"minecraft:has_structure/end_city\": []int32{17, 18}, \"minecraft:has_structure/igloo\": []int32{47, 45, 46}, \"minecraft:has_structure/jungle_temple\": []int32{1, 28}, \"minecraft:has_structure/mineshaft\": []int32{11, 9, 13, 12, 22, 35, 6, 29, 57, 40, 24, 3, 44, 32, 23, 27, 50, 46, 5, 61, 59, 60, 54, 47, 37, 38, 1, 28, 49, 21, 20, 4, 36, 8, 25, 51, 33, 26, 62, 14, 41, 45, 39, 52, 53, 31, 42, 15, 30}, \"minecraft:has_structure/mineshaft_mesa\": []int32{0, 19, 63}, \"minecraft:has_structure/nether_fortress\": []int32{34, 48, 7, 58, 2}, \"minecraft:has_structure/nether_fossil\": []int32{48}, \"minecraft:has_structure/ocean_monument\": []int32{11, 9, 13, 12}, \"minecraft:has_structure/ocean_ruin_cold\": []int32{22, 6, 35, 11, 9, 13}, \"minecraft:has_structure/ocean_ruin_warm\": []int32{29, 57, 12}, \"minecraft:has_structure/pillager_outpost\": []int32{14, 39, 41, 45, 54, 32, 23, 27, 50, 46, 5, 25}, \"minecraft:has_structure/ruined_portal_desert\": []int32{14}, \"minecraft:has_structure/ruined_portal_jungle\": []int32{1, 28, 49}, \"minecraft:has_structure/ruined_portal_mountain\": []int32{0, 19, 63, 61, 59, 60, 42, 62, 51, 32, 23, 27, 50, 46, 5}, \"minecraft:has_structure/ruined_portal_nether\": []int32{34, 48, 7, 58, 2}, \"minecraft:has_structure/ruined_portal_ocean\": []int32{11, 9, 13, 12, 22, 35, 6, 29, 57}, \"minecraft:has_structure/ruined_portal_standard\": []int32{3, 44, 40, 24, 54, 47, 37, 38, 21, 20, 4, 36, 8, 25, 33, 26, 15, 30, 41, 45, 39, 52}, \"minecraft:has_structure/ruined_portal_swamp\": []int32{53, 31}, \"minecraft:has_structure/shipwreck\": []int32{11, 9, 13, 12, 22, 35, 6, 29, 57}, \"minecraft:has_structure/shipwreck_beached\": []int32{3, 44}, \"minecraft:has_structure/stronghold\": []int32{33, 11, 22, 9, 6, 13, 35, 12, 29, 57, 51, 53, 31, 46, 45, 44, 60, 25, 61, 47, 59, 54, 39, 32, 3, 21, 38, 20, 4, 8, 42, 41, 28, 0, 14, 63, 27, 50, 24, 40, 26, 37, 52, 36, 49, 1, 19, 62, 5, 23, 15, 30, 10}, \"minecraft:has_structure/swamp_hut\": []int32{53}, \"minecraft:has_structure/trail_ruins\": []int32{54, 47, 37, 38, 36, 28}, \"minecraft:has_structure/trial_chambers\": []int32{33, 11, 22, 9, 6, 13, 35, 12, 29, 57, 51, 53, 31, 46, 45, 44, 60, 25, 61, 47, 59, 54, 39, 32, 3, 21, 38, 20, 4, 8, 42, 41, 28, 0, 14, 63, 27, 50, 24, 40, 26, 37, 52, 36, 49, 1, 19, 62, 5, 23, 15, 30}, \"minecraft:has_structure/village_desert\": []int32{14}, \"minecraft:has_structure/village_plains\": []int32{39, 32}, \"minecraft:has_structure/village_savanna\": []int32{41}, \"minecraft:has_structure/village_snowy\": []int32{45}, \"minecraft:has_structure/village_taiga\": []int32{54}, \"minecraft:has_structure/woodland_mansion\": []int32{8}, \"minecraft:increased_fire_burnout\": []int32{1, 33, 31, 46, 23, 27, 53, 28}, \"minecraft:is_badlands\": []int32{0, 19, 63}, \"minecraft:is_beach\": []int32{3, 44}, \"minecraft:is_deep_ocean\": []int32{11, 9, 13, 12}, \"minecraft:is_end\": []int32{55, 17, 18, 43, 16}, \"minecraft:is_forest\": []int32{21, 20, 4, 36, 8, 25}, \"minecraft:is_hill\": []int32{61, 59, 60}, \"minecraft:is_jungle\": []int32{1, 28, 49}, \"minecraft:is_mountain\": []int32{32, 23, 27, 50, 46, 5}, \"minecraft:is_nether\": []int32{34, 48, 7, 58, 2}, \"minecraft:is_ocean\": []int32{11, 9, 13, 12, 22, 35, 6, 29, 57}, \"minecraft:is_overworld\": []int32{33, 11, 22, 9, 6, 13, 35, 12, 29, 57, 51, 53, 31, 46, 45, 44, 60, 25, 61, 47, 59, 54, 39, 32, 3, 21, 38, 20, 4, 8, 42, 41, 28, 0, 14, 63, 27, 50, 24, 40, 26, 37, 52, 36, 49, 1, 19, 62, 5, 23, 15, 30, 10}, \"minecraft:is_river\": []int32{40, 24}, \"minecraft:is_savanna\": []int32{41, 42, 62}, \"minecraft:is_taiga\": []int32{54, 47, 37, 38}, \"minecraft:mineshaft_blocking\": []int32{10}, \"minecraft:more_frequent_drowned_spawns\": []int32{40, 24}, \"minecraft:plays_underwater_music\": []int32{11, 9, 13, 12, 22, 35, 6, 29, 57, 40, 24}, \"minecraft:polar_bears_spawn_on_alternate_blocks\": []int32{22, 11}, \"minecraft:produces_corals_from_bonemeal\": []int32{57}, \"minecraft:reduce_water_ambient_spawns\": []int32{40, 24}, \"minecraft:required_ocean_monument_surrounding\": []int32{11, 9, 13, 12, 22, 35, 6, 29, 57, 40, 24}, \"minecraft:snow_golem_melts\": []int32{0, 2, 7, 14, 19, 34, 41, 42, 48, 58, 62, 63}, \"minecraft:spawns_cold_variant_frogs\": []int32{45, 26, 23, 27, 46, 22, 11, 25, 10, 24, 47, 44, 55, 17, 18, 43, 16}, \"minecraft:spawns_gold_rabbits\": []int32{14}, \"minecraft:spawns_snow_foxes\": []int32{45, 26, 22, 47, 24, 44, 23, 27, 46, 25}, \"minecraft:spawns_warm_variant_frogs\": []int32{14, 57, 1, 28, 49, 41, 42, 62, 34, 48, 7, 58, 2, 0, 19, 63, 31}, \"minecraft:spawns_white_rabbits\": []int32{45, 26, 22, 47, 24, 44, 23, 27, 46, 25}, \"minecraft:stronghold_biased_to\": []int32{39, 52, 45, 26, 14, 21, 20, 4, 8, 36, 37, 38, 54, 47, 41, 42, 61, 60, 59, 62, 28, 49, 1, 0, 19, 63, 32, 25, 46, 23, 27, 50, 33, 15, 30}, \"minecraft:water_on_map_outlines\": []int32{11, 9, 13, 12, 22, 35, 6, 29, 57, 40, 24, 53, 31}, \"minecraft:without_patrol_spawns\": []int32{33}, \"minecraft:without_wandering_trader_spawns\": []int32{56}, \"minecraft:without_zombie_sieges\": []int32{33}}}}\n"
  },
  {
    "path": "protocol/text/builder.go",
    "content": "package text\r\n\r\nfunc New() TextComponent {\r\n\treturn TextComponent{}\r\n}\r\n\r\nfunc (t TextComponent) WithColor(c string) TextComponent {\r\n\tt.Color = c\r\n\treturn t\r\n}\r\n\r\nfunc (t TextComponent) WithText(c string) TextComponent {\r\n\tt.Text = c\r\n\treturn t\r\n}\r\n\r\nfunc (t TextComponent) WithItalic() TextComponent {\r\n\tt.Italic = !t.Italic\r\n\treturn t\r\n}\r\n\r\nfunc (t TextComponent) WithUnderline() TextComponent {\r\n\tt.Underlined = !t.Underlined\r\n\treturn t\r\n}\r\n\r\nfunc (t TextComponent) WithStrikethrough() TextComponent {\r\n\tt.Strikethrough = !t.Strikethrough\r\n\treturn t\r\n}\r\n\r\nfunc (t TextComponent) WithObfuscation() TextComponent {\r\n\tt.Obfuscated = !t.Obfuscated\r\n\treturn t\r\n}\r\n\r\nfunc Color(c string) TextComponent {\r\n\treturn TextComponent{Color: c}\r\n}\r\n\r\nfunc Text(c string) TextComponent {\r\n\treturn TextComponent{Text: c}\r\n}\r\n\r\nfunc Italic() TextComponent {\r\n\treturn TextComponent{Italic: true}\r\n}\r\n\r\nfunc Underline() TextComponent {\r\n\treturn TextComponent{Underlined: true}\r\n}\r\n\r\nfunc Strikethrough() TextComponent {\r\n\treturn TextComponent{Strikethrough: true}\r\n}\r\n\r\nfunc Obfuscation() TextComponent {\r\n\treturn TextComponent{Obfuscated: true}\r\n}\r\n"
  },
  {
    "path": "protocol/text/color.go",
    "content": "package text\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"image/color\"\r\n)\r\n\r\n// colors\r\nconst (\r\n\tBlack       = \"black\"\r\n\tDarkBlue    = \"dark_blue\"\r\n\tDarkGreen   = \"dark_green\"\r\n\tDarkCyan    = \"dark_aqua\"\r\n\tDarkRed     = \"dark_red\"\r\n\tPurple      = \"dark_purple\"\r\n\tGold        = \"gold\"\r\n\tGray        = \"gray\"\r\n\tDarkGray    = \"dark_gray\"\r\n\tBlue        = \"blue\"\r\n\tBrightGreen = \"green\"\r\n\tCyan        = \"aqua\"\r\n\tRed         = \"red\"\r\n\tPink        = \"light_purple\"\r\n\tYellow      = \"yellow\"\r\n\tWhite       = \"white\"\r\n)\r\n\r\nfunc RGB(r, g, b uint8) string {\r\n\treturn fmt.Sprintf(\"#%02X%02X%02X\", r, g, b)\r\n}\r\n\r\nfunc CustomColor(c color.Color) string {\r\n\tr, g, b, _ := c.RGBA()\r\n\r\n\treturn RGB(uint8(r>>8), uint8(g>>8), uint8(b>>8))\r\n}\r\n"
  },
  {
    "path": "protocol/text/text.go",
    "content": "// Package text provides encoding and decoding of text components\npackage text\n\nimport \"fmt\"\n\nconst (\n\tTypeText         = \"text\"\n\tTypeTranslatable = \"translatable\"\n\tTypeKeybind      = \"keybind\"\n\tTypeScore        = \"score\"\n\tTypeSelector     = \"selector\"\n\tTypeNBT          = \"nbt\"\n)\n\nconst (\n\tFontDefault    = \"minecraft:default\"\n\tFontUniform    = \"minecraft:uniform\"\n\tFontAlt        = \"minecraft:alt\"\n\tFontIllageralt = \"minecraft:illageralt\"\n)\n\nconst (\n\tClickEventOpenURL         = \"open_url\"\n\tClickEventRunCommand      = \"run_command\"\n\tClickEventSuggestCommand  = \"suggest_command\"\n\tClickEventChangePage      = \"change_page\"\n\tClickEventCopyToClipboard = \"copy_to_clipboard\"\n)\n\nconst (\n\tHoverEventShowText   = \"show_text\"\n\tHoverEventShowItem   = \"show_item\"\n\tHoverEventShowEntity = \"show_entity\"\n)\n\ntype ClickEvent struct {\n\tAction string `json:\"action\" nbt:\"action\"`\n\tValue  string `json:\"value\" nbt:\"value\"`\n}\n\ntype HoverEventContents struct {\n\tID    string `json:\"id,omitempty\" nbt:\"id,omitempty\"`\n\tCount int    `json:\"count,omitempty\" nbt:\"count,omitempty\"`\n\tTag   string `json:\"tag,omitempty\" nbt:\"tag,omitempty\"`\n\tType  string `json:\"type,omitempty\" nbt:\"type,omitempty\"`\n\tName  string `json:\"name,omitempty\" nbt:\"name,omitempty\"`\n}\n\ntype HoverEvent struct {\n\tAction   string             `json:\"action\" nbt:\"action\"`\n\tContents HoverEventContents `json:\"contents\" nbt:\"contents\"`\n}\n\ntype TextComponent struct {\n\tType  string          `json:\"type,omitempty\" nbt:\"type,omitempty\"`\n\tExtra []TextComponent `json:\"extra,omitempty\" nbt:\"extra,omitempty\"`\n\n\tColor         string     `json:\"color,omitempty\" nbt:\"color,omitempty\"`\n\tBold          bool       `json:\"bold,omitempty\" nbt:\"bold,omitempty\"`\n\tItalic        bool       `json:\"italic,omitempty\" nbt:\"italic,omitempty\"`\n\tUnderlined    bool       `json:\"underlined,omitempty\" nbt:\"underlined,omitempty\"`\n\tStrikethrough bool       `json:\"strikethrough,omitempty\" nbt:\"strikethrough,omitempty\"`\n\tObfuscated    bool       `json:\"obfuscated,omitempty\" nbt:\"obfuscated,omitempty\"`\n\tFont          string     `json:\"font,omitempty\" nbt:\"font,omitempty\"`\n\tInsertion     string     `json:\"insertion,omitempty\" nbt:\"insertion,omitempty\"`\n\tClickEvent    ClickEvent `json:\"click_event,omitempty\" nbt:\"click_event,omitempty\"`\n\tHoverEvent    HoverEvent `json:\"hover_event,omitempty\" nbt:\"hover_event,omitempty\"`\n\n\tText string `json:\"text\" nbt:\"text\"`\n}\n\nfunc Sprint(a ...any) TextComponent {\n\treturn TextComponent{Text: fmt.Sprint(a...)}\n}\n\nfunc Sprintf(format string, a ...any) TextComponent {\n\treturn TextComponent{Text: fmt.Sprintf(format, a...)}\n}\n\n// Unmarshalf is the same as Unmarshal but with formatting\nfunc Unmarshalf(codeChar rune, format string, v ...any) TextComponent {\n\treturn Unmarshal(fmt.Sprintf(format, v...), codeChar)\n}\n\n// Unmarshal parses the text and color codes into a text component. The codeChar argument is what's used for color codes (i.e &)\nfunc Unmarshal(text string, codeChar rune) TextComponent {\n\tvar root TextComponent\n\tvar component TextComponent\n\tvar runeText = []rune(text)\n\n\tfor i := 0; i < len(runeText); i++ {\n\t\tchar := runeText[i]\n\t\tif char == codeChar && runeText[i+1] >= '0' && runeText[i+1] <= 'r' {\n\t\t\tif component.Text != \"\" {\n\t\t\t\troot.Extra = append(root.Extra, component)\n\t\t\t\tcomponent = TextComponent{}\n\t\t\t}\n\t\t\tapplyStyle(runeText[i+1], &component)\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\t\tcomponent.Text += string(char)\n\t}\n\n\troot.Extra = append(root.Extra, component)\n\n\treturn root\n}\n\n// Marshal turns the text component to a classic color code message\nfunc Marshal(component TextComponent, codeChar rune) string {\n\tvar components = append([]TextComponent{component}, component.Extra...)\n\n\tvar text string\n\tfor _, comp := range components {\n\t\tcomponentStyles(comp, &text, codeChar)\n\t\ttext += comp.Text\n\t}\n\n\treturn text\n}\n\nfunc charColor(char rune) string {\n\tswitch char {\n\tcase '0':\n\t\treturn \"black\"\n\tcase '1':\n\t\treturn \"dark_blue\"\n\tcase '2':\n\t\treturn \"dark_green\"\n\tcase '3':\n\t\treturn \"dark_aqua\"\n\tcase '4':\n\t\treturn \"dark_red\"\n\tcase '5':\n\t\treturn \"dark_purple\"\n\tcase '6':\n\t\treturn \"gold\"\n\tcase '7':\n\t\treturn \"gray\"\n\tcase '8':\n\t\treturn \"dark_gray\"\n\tcase '9':\n\t\treturn \"blue\"\n\tcase 'a':\n\t\treturn \"green\"\n\tcase 'b':\n\t\treturn \"aqua\"\n\tcase 'c':\n\t\treturn \"red\"\n\tcase 'd':\n\t\treturn \"light_purple\"\n\tcase 'e':\n\t\treturn \"yellow\"\n\tdefault: // case 'f'\n\t\treturn \"white\"\n\t}\n}\n\nfunc colorChar(color string, char string) string {\n\tswitch color {\n\tcase \"black\":\n\t\treturn char + \"0\"\n\tcase \"dark_blue\":\n\t\treturn char + \"1\"\n\tcase \"dark_green\":\n\t\treturn char + \"2\"\n\tcase \"dark_aqua\":\n\t\treturn char + \"3\"\n\tcase \"dark_red\":\n\t\treturn char + \"4\"\n\tcase \"dark_purple\":\n\t\treturn char + \"5\"\n\tcase \"gold\":\n\t\treturn char + \"6\"\n\tcase \"gray\":\n\t\treturn char + \"7\"\n\tcase \"dark_gray\":\n\t\treturn char + \"8\"\n\tcase \"blue\":\n\t\treturn char + \"9\"\n\tcase \"green\":\n\t\treturn char + \"a\"\n\tcase \"aqua\":\n\t\treturn char + \"b\"\n\tcase \"red\":\n\t\treturn char + \"c\"\n\tcase \"light_purple\":\n\t\treturn char + \"d\"\n\tcase \"yellow\":\n\t\treturn char + \"e\"\n\tdefault: // case \"white\"\n\t\treturn char + \"f\"\n\t}\n}\n\nfunc applyStyle(char rune, component *TextComponent) {\n\tif char >= '0' && char <= 'f' {\n\t\tcomponent.Color = charColor(char)\n\t}\n\tswitch char {\n\tcase 'k':\n\t\tcomponent.Obfuscated = true\n\tcase 'l':\n\t\tcomponent.Bold = true\n\tcase 'm':\n\t\tcomponent.Strikethrough = true\n\tcase 'n':\n\t\tcomponent.Underlined = true\n\tcase 'o':\n\t\tcomponent.Italic = true\n\t}\n}\n\nfunc componentStyles(component TextComponent, text *string, codeChar rune) {\n\t*text += colorChar(component.Color, string(codeChar))\n\tif component.Obfuscated {\n\t\t*text += string(codeChar) + \"k\"\n\t}\n\tif component.Obfuscated {\n\t\t*text += string(codeChar) + \"k\"\n\t}\n\tif component.Bold {\n\t\t*text += string(codeChar) + \"l\"\n\t}\n\tif component.Strikethrough {\n\t\t*text += string(codeChar) + \"m\"\n\t}\n\tif component.Underlined {\n\t\t*text += string(codeChar) + \"n\"\n\t}\n\tif component.Italic {\n\t\t*text += string(codeChar) + \"o\"\n\t}\n}\n"
  },
  {
    "path": "readme.md",
    "content": "![zeppelinbanner (1)](https://github.com/user-attachments/assets/21605ec4-1253-460e-84c3-d984df14f212)\r\n# Zeppelin\r\n\r\nHighly optimized server implementation written in [Go](https://go.dev) for Minecraft 1.21.3\r\n\r\n[Discord Server](https://discord.gg/T8qEtDWPak)\r\n\r\n## Goal\r\nA fast, efficient, and reliable server, with a plugin API and clean code\r\n\r\n## Protocol Coverage\r\n- Packet encryption (AES/CFB8)\r\n\r\n- Packet compression (Zlib)\r\n\r\n- Authentication\r\n\r\n- Named Binary Tag (NBT)\r\n\r\n- Text formatting\r\n\r\n- Chat signing\r\n\r\n## Progress \r\n- Chunk encoding and manipulation\r\n\r\n- Region/Anvil decoding and encoding (temp disabled)\r\n\r\n- WIP terrain generation\r\n\r\n- Player movement including metadata\r\n\r\n## API\r\n### Protocol:\r\n- NBT: protocol/nbt\r\n\r\n- .properties: protocol/properties\r\n\r\n- text formatting: protocol/text\r\n\r\n- network and packets: protocol/net\r\n### Server:\r\n- Commands: server/command (server.CommandManager) - can register custom commands\r\n\r\n- World: server/world (server.World) - can register custom dimensions, modify chunks etc\r\n\r\n- Registry: server/registry - shared registry constants\r\n\r\n- Container (inventory): server/container\r\n\r\n- Player: server/player (Session.Player())\r\n\r\n- Session: server/session (api) | server/session/std (impl)\r\n\r\n## Boot Arguments\r\n`--no-plugins`: skips plugin loading\r\n\r\n`--memprof`: uses memory profiler\r\n\r\n`--cpuprof`: uses cpu profiler\r\n\r\n`--xmem=<amount>`: limits memory usage to `amount`, for example: `--xmem=1gib`\r\n\r\n## Acknowledgements\r\n[Angel](https://github.com/aimjel) - help with chunk related calculations (0x8D989E86)\r\n"
  },
  {
    "path": "server/command/builder.go",
    "content": "package command\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\r\n)\r\n\r\nconst (\r\n\tBool = iota\r\n\tFloat\r\n\tDouble\r\n\tInteger\r\n\tLong\r\n\tString\r\n\r\n\tEntity\r\n\tGameProfile\r\n\tBlockPos\r\n\tColumnPos\r\n\tVec3\r\n\tVec2\r\n\tBlockState\r\n\tBlockPredicate\r\n\tItemStack\r\n\tItemPredicate\r\n\tColor\r\n\tComponent\r\n\tStyle\r\n\tMessage\r\n\tNBT\r\n\tNBTTag\r\n\tNBTPath\r\n\tObjective\r\n\tObjectiveCriteria\r\n\tOperation\r\n\tParticle\r\n\tAngle\r\n\tRotation\r\n\tScoreboardSlot\r\n\tScoreHolder\r\n\tSwizzle\r\n\tTeam\r\n\tItemSlot\r\n\tResourceLocation\r\n\tFunction\r\n\tEntityAnchor\r\n\tIntRange\r\n\tFloatRange\r\n\tDimension\r\n\tGamemode\r\n\tTime\r\n\tResourceOrTag\r\n\tResourceOrTagKey\r\n\tResource\r\n\tResourceKey\r\n\tTemplateMirror\r\n\tTemplateRotation\r\n\tHeightmap\r\n\tUUID\r\n)\r\n\r\nconst (\r\n\tStringSingleWord = iota\r\n\tStringQuotablePhrase\r\n\tStringGreedyPhrase\r\n)\r\n\r\ntype Node struct {\r\n\tplay.Node\r\n\tchildren []Node\r\n}\r\n\r\nfunc (n *Node) Add(nodes ...Node) {\r\n\tn.children = append(n.children, nodes...)\r\n}\r\n\r\nfunc NewNode(n play.Node, children ...Node) Node {\r\n\treturn Node{n, children}\r\n}\r\n\r\nfunc NewLiteral(name string, nodes ...Node) Node {\r\n\treturn Node{\r\n\t\tNode: play.Node{\r\n\t\t\tFlags: play.NodeLiteral,\r\n\t\t\tName:  name,\r\n\t\t},\r\n\t\tchildren: nodes,\r\n\t}\r\n}\r\n\r\nfunc NewBoolArgument(name string, nodes ...Node) Node {\r\n\treturn Node{\r\n\t\tNode: play.Node{\r\n\t\t\tFlags:    play.NodeArgument,\r\n\t\t\tName:     name,\r\n\t\t\tParserId: Bool,\r\n\t\t},\r\n\t\tchildren: nodes,\r\n\t}\r\n}\r\n\r\nfunc NewIntegerArgument(name string, min, max *int32, nodes ...Node) Node {\r\n\tflags := int8(0)\r\n\tvar props = make([]any, 1, 3)\r\n\r\n\tif min != nil {\r\n\t\tflags &= 0x01\r\n\t\tprops = append(props, *min)\r\n\t}\r\n\tif max != nil {\r\n\t\tflags &= 0x02\r\n\t\tprops = append(props, *max)\r\n\t}\r\n\tprops[0] = flags\r\n\r\n\treturn Node{\r\n\t\tNode: play.Node{\r\n\t\t\tFlags:      play.NodeArgument,\r\n\t\t\tName:       name,\r\n\t\t\tParserId:   Integer,\r\n\t\t\tProperties: props,\r\n\t\t},\r\n\t\tchildren: nodes,\r\n\t}\r\n}\r\n\r\nfunc NewStringArgument(name string, typ int, nodes ...Node) Node {\r\n\treturn Node{\r\n\t\tNode: play.Node{\r\n\t\t\tFlags:      play.NodeArgument,\r\n\t\t\tName:       name,\r\n\t\t\tParserId:   String,\r\n\t\t\tProperties: []any{typ},\r\n\t\t},\r\n\t\tchildren: nodes,\r\n\t}\r\n}\r\n\r\nfunc NewTimeArgument(name string, min int32, nodes ...Node) Node {\r\n\treturn Node{\r\n\t\tNode: play.Node{\r\n\t\t\tFlags:      play.NodeArgument,\r\n\t\t\tName:       name,\r\n\t\t\tParserId:   Time,\r\n\t\t\tProperties: []any{min},\r\n\t\t},\r\n\t\tchildren: nodes,\r\n\t}\r\n}\r\n"
  },
  {
    "path": "server/command/command.go",
    "content": "// Package command provides utilities for handling and registering commands\npackage command\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n)\n\ntype Command struct {\n\tNode      Node\n\tAliases   []string\n\tNamespace string\n\n\tCallback           func(CommandCallContext)\n\tSuggestionCallback func()\n}\n\ntype Arguments []string\n\nfunc (a Arguments) At(i int) string {\n\tif i < 0 || len(a) <= i {\n\t\treturn \"\"\n\t}\n\treturn a[i]\n}\n\nfunc (a Arguments) Fallback(i int, fb string) string {\n\tif i < 0 || len(a) <= i {\n\t\treturn fb\n\t}\n\treturn a[i]\n}\n\ntype CommandCallContext struct {\n\tCommand  Command\n\tServer   any\n\tExecutor Caller\n\n\tArguments Arguments\n}\n\nfunc (c CommandCallContext) Reply(msg text.TextComponent) error {\n\treturn c.Executor.SystemMessage(msg)\n}\n"
  },
  {
    "path": "server/command/graph.go",
    "content": "package command\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\r\n\r\nfunc (mgr *Manager) Encode() *play.Commands {\r\n\tif mgr.graph != nil {\r\n\t\treturn mgr.graph\r\n\t}\r\n\tpk := play.Commands{\r\n\t\tNodes: make([]play.Node, 1, len(mgr.commands)+1),\r\n\t}\r\n\tpk.Nodes[0] = play.Node{\r\n\t\tChildren: make([]int32, 0, len(mgr.commands)),\r\n\t}\r\n\r\n\tfor _, cmd := range mgr.commands {\r\n\t\tcommandNodeIndex := int32(len(pk.Nodes))\r\n\t\tpk.Nodes[0].Children = append(pk.Nodes[0].Children, commandNodeIndex)\r\n\t\tpk.Nodes = append(pk.Nodes, cmd.Node.Node)\r\n\r\n\t\tif cmd.Namespace != \"\" {\r\n\t\t\tpk.Nodes[0].Children = append(pk.Nodes[0].Children, int32(len(pk.Nodes)))\r\n\t\t\tpk.Nodes = append(pk.Nodes, play.Node{\r\n\t\t\t\tFlags:        play.NodeLiteral | play.NodeRedirect,\r\n\t\t\t\tName:         cmd.Namespace + \":\" + cmd.Node.Name,\r\n\t\t\t\tRedirectNode: commandNodeIndex,\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tfor _, alias := range cmd.Aliases {\r\n\t\t\tpk.Nodes[0].Children = append(pk.Nodes[0].Children, int32(len(pk.Nodes)))\r\n\t\t\tpk.Nodes = append(pk.Nodes, play.Node{\r\n\t\t\t\tFlags:        play.NodeLiteral | play.NodeRedirect,\r\n\t\t\t\tName:         alias,\r\n\t\t\t\tRedirectNode: commandNodeIndex,\r\n\t\t\t})\r\n\r\n\t\t\tif cmd.Namespace != \"\" {\r\n\t\t\t\tpk.Nodes[0].Children = append(pk.Nodes[0].Children, int32(len(pk.Nodes)))\r\n\t\t\t\tpk.Nodes = append(pk.Nodes, play.Node{\r\n\t\t\t\t\tFlags:        play.NodeLiteral | play.NodeRedirect,\r\n\t\t\t\t\tName:         cmd.Namespace + \":\" + alias,\r\n\t\t\t\t\tRedirectNode: commandNodeIndex,\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor _, child := range cmd.Node.children {\r\n\t\t\tappendNode(commandNodeIndex, child, &pk.Nodes)\r\n\t\t}\r\n\t}\r\n\r\n\treturn &pk\r\n}\r\n\r\nfunc appendNode(parentIndex int32, n Node, tgt *[]play.Node) {\r\n\tindex := int32(len(*tgt))\r\n\t(*tgt)[parentIndex].Children = append((*tgt)[parentIndex].Children, index)\r\n\t(*tgt) = append((*tgt), n.Node)\r\n\r\n\tfor _, child := range n.children {\r\n\t\tappendNode(index, child, tgt)\r\n\t}\r\n}\r\n"
  },
  {
    "path": "server/command/manager.go",
    "content": "package command\n\nimport (\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n)\n\ntype Manager struct {\n\tcommands []Command\n\tmu       sync.RWMutex\n\tsrv      any\n\n\tgraph *play.Commands\n}\n\ntype Caller interface {\n\tSystemMessage(text.TextComponent) error\n}\n\nfunc NewManager(srv any, cmds ...Command) *Manager {\n\treturn &Manager{commands: cmds, srv: srv}\n}\n\nfunc (mgr *Manager) Register(cmds ...Command) {\n\tmgr.mu.Lock()\n\tdefer mgr.mu.Unlock()\n\tmgr.commands = append(mgr.commands, cmds...)\n\tmgr.graph = nil\n}\n\nfunc (mgr *Manager) Call(command string, caller Caller) {\n\targuments := strings.Split(command, \" \")\n\tif len(arguments) == 0 {\n\t\tcaller.SystemMessage(\n\t\t\ttext.Unmarshal(\n\t\t\t\t\"&cInvalid command\", '&',\n\t\t\t),\n\t\t)\n\t\treturn\n\t}\n\tcmd := mgr.findCommand(arguments[0])\n\tif cmd == nil {\n\t\tcaller.SystemMessage(\n\t\t\ttext.Unmarshalf(\n\t\t\t\t'&',\n\t\t\t\t\"&cUnknown command %s\",\n\t\t\t\tcommand,\n\t\t\t),\n\t\t)\n\t\treturn\n\t}\n\tctx := CommandCallContext{\n\t\tCommand:  *cmd,\n\t\tExecutor: caller,\n\t\tServer:   mgr.srv,\n\t}\n\tif len(arguments) > 1 {\n\t\tctx.Arguments = arguments[1:]\n\t}\n\tif cmd.Callback == nil {\n\t\treturn\n\t}\n\tcmd.Callback(ctx)\n}\n\nfunc (mgr *Manager) findCommand(name string) *Command {\n\tmgr.mu.RLock()\n\tdefer mgr.mu.RUnlock()\n\n\tvar namespace string\n\tif i := strings.Index(name, \":\"); i != -1 && i != len(name) {\n\t\tnamespace = name[:i]\n\t\tname = name[i+1:]\n\t}\n\tfor _, cmd := range mgr.commands {\n\t\tif namespace != \"\" && cmd.Namespace != namespace {\n\t\t\tcontinue\n\t\t}\n\t\tif cmd.Node.Name == name {\n\t\t\treturn &cmd\n\t\t}\n\t\tfor _, alias := range cmd.Aliases {\n\t\t\tif alias == name {\n\t\t\t\treturn &cmd\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "server/container/container.go",
    "content": "package container\r\n\r\nimport (\r\n\t\"fmt\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/slot\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/registry\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/level/item\"\r\n)\r\n\r\n// A container that holds items\r\ntype Container []item.Item\r\n\r\n// NetworkConvert encodes the container with the specified size and changes the slot from data slots to network slots. This should be used for inventories\r\nfunc (c Container) EncodeResize(size int) []slot.Slot {\r\n\ts := make([]slot.Slot, size)\r\n\tfor _, item := range c {\r\n\t\tid, ok := registry.Item.Lookup(item.Id)\r\n\t\tif !ok {\r\n\t\t\tcontinue\r\n\t\t}\r\n\t\ts[item.Slot.Network()] = slot.Slot{\r\n\t\t\tItemCount: item.Count,\r\n\t\t\tItemId:    id,\r\n\t\t}\r\n\t}\r\n\r\n\treturn s\r\n}\r\n\r\nfunc (c Container) Encode() []slot.Slot {\r\n\ts := make([]slot.Slot, len(c))\r\n\tfor _, item := range c {\r\n\t\tid, ok := registry.Item.Lookup(item.Id)\r\n\t\tif !ok {\r\n\t\t\tcontinue\r\n\t\t}\r\n\t\ts[item.Slot] = slot.Slot{\r\n\t\t\tItemCount: item.Count,\r\n\t\t\tItemId:    id,\r\n\t\t}\r\n\t}\r\n\r\n\treturn s\r\n}\r\n\r\n// Set adds the item to the container and replaces the existing one if found, and returns if the operation was successful\r\nfunc (c *Container) Set(item item.Item) {\r\n\tfor x, i := range *c {\r\n\t\tif i.Slot == item.Slot {\r\n\t\t\t(*c)[x] = item\r\n\t\t\treturn\r\n\t\t}\r\n\t}\r\n\t*c = append(*c, item)\r\n}\r\n\r\n// Add adds the item to the container and replaces the existing one if found, and returns if the operation was successful\r\nfunc (c *Container) SetAt(item item.Item, slot item.DataSlot) {\r\n\titem.Slot = slot\r\n\tc.Set(item)\r\n}\r\n\r\n// finds the item at the specified data slot\r\nfunc (c Container) Slot(slot item.DataSlot) (item.Item, bool) {\r\n\tfor _, item := range c {\r\n\t\tif item.Slot == slot {\r\n\t\t\treturn item, true\r\n\t\t}\r\n\t}\r\n\treturn item.Air, false\r\n}\r\n\r\nfunc (c *Container) Merge(slot item.DataSlot, carriedItem *item.Item) {\r\n\tif carriedItem.Is(item.Air) {\r\n\t\treturn\r\n\t}\r\n\tit, ok := c.Slot(slot)\r\n\tif !ok {\r\n\t\tfmt.Println(\"nothing occupies slot! setting to\", slot, *carriedItem)\r\n\t\tc.SetAt(*carriedItem, slot)\r\n\r\n\t\ts, _ := c.Slot(slot)\r\n\t\tfmt.Println(\"new item:\", slot, s)\r\n\t\treturn\r\n\t}\r\n\tif !carriedItem.Is(it) || it.Count > 64 {\r\n\t\tfmt.Println(\"swap\", it, \"with\", *carriedItem)\r\n\t\tc.SetAt(*carriedItem, slot)\r\n\t\t*carriedItem = it\r\n\r\n\t\ts, _ := c.Slot(slot)\r\n\t\tfmt.Println(\"new item:\", slot, s)\r\n\t\treturn\r\n\t}\r\n\r\n\tit.Count += carriedItem.Count\r\n\tcarriedItem.Count = 0\r\n\r\n\tif it.Count > 64 {\r\n\t\tcarriedItem.Count = it.Count - 64\r\n\r\n\t\tit.Count = 64\r\n\t}\r\n\r\n\tif carriedItem.Count == 0 {\r\n\t\t*carriedItem = item.Air\r\n\t}\r\n\r\n\tfmt.Println(\"new item:\", it)\r\n\r\n\tc.SetAt(it, slot)\r\n}\r\n"
  },
  {
    "path": "server/entity/entity.go",
    "content": "package entity\n\nimport (\n\t\"maps\"\n\t\"math\"\n\t\"slices\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\ta \"github.com/zeppelinmc/zeppelin/util/atomic\"\n\n\t\"github.com/google/uuid\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/metadata\"\n)\n\nvar entityId atomic.Int32\n\nfunc NewEntityId() int32 {\n\treturn entityId.Add(1)\n}\n\nfunc New(uuid uuid.UUID, typ int32, metadata metadata.Metadata, attributes []Attribute) *Entity {\n\treturn &Entity{\n\t\tuuid:       uuid,\n\t\ttyp:        typ,\n\t\tmetadata:   metadata,\n\t\tattributes: attributes,\n\t}\n}\n\nfunc NewLiving(e *Entity) LivingEntity {\n\treturn LivingEntity{Entity: *e}\n}\n\n// Entity is the base state for entities\ntype Entity struct {\n\tuuid uuid.UUID\n\ttyp  int32\n\n\tx, y, z    atomic.Uint64 // the position of the state\n\tvx, vy, vz atomic.Uint64 // the velocity of the state\n\tyaw, pitch atomic.Uint32 // the rotation of the state\n\tonGround   atomic.Bool\n\n\tmd_mu    sync.RWMutex\n\tmetadata metadata.Metadata\n\n\tattr_mu    sync.RWMutex\n\tattributes []Attribute\n\n\tdimensionName a.AtomicValue[string]\n}\n\nfunc (p *Entity) Attribute(id string) *Attribute {\n\tp.attr_mu.Lock()\n\tdefer p.attr_mu.Unlock()\n\ti := slices.IndexFunc(p.attributes, func(att Attribute) bool { return att.Id == id })\n\tif i == -1 {\n\t\tattr, ok := DefaultAttributes[id]\n\t\tif !ok {\n\t\t\treturn nil\n\t\t}\n\t\ta := Attribute{\n\t\t\tId:   id,\n\t\t\tBase: attr,\n\t\t}\n\t\tp.attributes = append(p.attributes, a)\n\t\treturn &a\n\t}\n\tattr := &p.attributes[i]\n\treturn attr\n}\n\n// Attributes returns a clone of the attributes of this state\nfunc (p *Entity) Attributes() []Attribute {\n\tp.attr_mu.RLock()\n\tdefer p.attr_mu.RUnlock()\n\treturn slices.Clone(p.attributes)\n}\n\nfunc (p *Entity) SetAttribute(id string, base float64) {\n\tp.attr_mu.Lock()\n\tdefer p.attr_mu.Unlock()\n\ti := slices.IndexFunc(p.attributes, func(att Attribute) bool { return att.Id == id })\n\tif i == -1 {\n\t\treturn\n\t}\n\tp.attributes[i].Base = base\n}\n\n// Metadata returns a clone of the metadata of this state\nfunc (p *Entity) Metadata() metadata.Metadata {\n\tp.md_mu.RLock()\n\tdefer p.md_mu.RUnlock()\n\treturn maps.Clone(p.metadata)\n}\n\nfunc (p *Entity) SetMetadata(md metadata.Metadata) {\n\tp.md_mu.Lock()\n\tdefer p.md_mu.Unlock()\n\tp.metadata = md\n}\n\nfunc (p *Entity) MetadataIndex(i byte) any {\n\tp.md_mu.RLock()\n\tdefer p.md_mu.RUnlock()\n\treturn p.metadata[i]\n}\n\nfunc (p *Entity) SetMetadataIndex(i byte, v any) {\n\tp.md_mu.Lock()\n\tdefer p.md_mu.Unlock()\n\tp.metadata[i] = v\n}\n\nfunc (p *Entity) SetMetadataIndexes(md metadata.Metadata) {\n\tp.md_mu.Lock()\n\tdefer p.md_mu.Unlock()\n\tfor index, value := range md {\n\t\tp.metadata[index] = value\n\t}\n}\n\nfunc (p *Entity) DimensionName() string {\n\treturn p.dimensionName.Get()\n}\n\nfunc (p *Entity) SetDimensionName(v string) {\n\tp.dimensionName.Set(v)\n}\n\nfunc (p *Entity) SetMotion(x, y, z float64) {\n\tp.vx.Store(math.Float64bits(x))\n\tp.vy.Store(math.Float64bits(y))\n\tp.vz.Store(math.Float64bits(z))\n}\n\nfunc (p *Entity) SetPosition(x, y, z float64) {\n\tp.x.Store(math.Float64bits(x))\n\tp.y.Store(math.Float64bits(y))\n\tp.z.Store(math.Float64bits(z))\n}\n\nfunc (p *Entity) SetRotation(yaw, pitch float32) {\n\tp.yaw.Store(math.Float32bits(yaw))\n\tp.pitch.Store(math.Float32bits(pitch))\n}\n\nfunc (p *Entity) SetOnGround(v bool) {\n\tp.onGround.Store(v)\n}\n\nfunc (p *Entity) Position() (x, y, z float64) {\n\treturn math.Float64frombits(p.x.Load()), math.Float64frombits(p.y.Load()), math.Float64frombits(p.z.Load())\n}\n\nfunc (p *Entity) Motion() (vx, vy, vz float64) {\n\treturn math.Float64frombits(p.vx.Load()), math.Float64frombits(p.vy.Load()), math.Float64frombits(p.vz.Load())\n}\n\nfunc (p *Entity) Rotation() (yaw, pitch float32) {\n\treturn math.Float32frombits(p.yaw.Load()), math.Float32frombits(p.pitch.Load())\n}\n\nfunc (p *Entity) OnGround() bool {\n\treturn p.onGround.Load()\n}\n\nfunc (p *Entity) UUID() uuid.UUID {\n\treturn p.uuid\n}\n\nfunc (p *Entity) Type() int32 {\n\treturn p.typ\n}\n\ntype LivingEntity struct {\n\tEntity\n\thealth,\n\tfood,\n\tfoodSaturation, foodExhaustion atomic.Uint32\n}\n\nfunc (l *LivingEntity) SetHealth(h float32) {\n\tl.health.Store(math.Float32bits(h))\n}\n\nfunc (l *LivingEntity) SetFood(food int32, saturation, exhaustion float32) {\n\tl.food.Store(uint32(food))\n\tl.foodSaturation.Store(math.Float32bits(saturation))\n\tl.foodExhaustion.Store(math.Float32bits(exhaustion))\n}\n\nfunc (l *LivingEntity) Health() float32 {\n\treturn math.Float32frombits(l.health.Load())\n}\n\nfunc (l *LivingEntity) Food() (food int32, saturation, exhaustion float32) {\n\treturn int32(l.food.Load()), math.Float32frombits(l.foodSaturation.Load()), math.Float32frombits(l.foodExhaustion.Load())\n}\n\ntype Attribute struct {\n\tBase float64 `nbt:\"base\"`\n\tId   string  `nbt:\"id\"`\n}\n\nvar DefaultAttributes = map[string]float64{\n\t\"minecraft:generic.armor\":                     0,\n\t\"minecraft:generic.armor_toughness\":           0,\n\t\"minecraft:generic.attack_damage\":             2,\n\t\"minecraft:generic.attack_knockback\":          0,\n\t\"minecraft:generic.attack_speed\":              2,\n\t\"minecraft:generic.block_break_speed\":         1,\n\t\"minecraft:generic.block_interaction_range\":   4.5,\n\t\"minecraft:generic.entity_interaction_range\":  3,\n\t\"minecraft:generic.fall_damage_multiplier\":    1,\n\t\"minecraft:generic.flying_speed\":              0.4,\n\t\"minecraft:generic.follow_range\":              32,\n\t\"minecraft:generic.gravity\":                   0.08,\n\t\"minecraft:generic.jump_strength\":             0.42,\n\t\"minecraft:generic.knockback_resistance\":      0,\n\t\"minecraft:generic.luck\":                      0,\n\t\"minecraft:generic.max_absorption\":            0,\n\t\"minecraft:generic.max_health\":                20,\n\t\"minecraft:generic.movement_speed\":            0.7,\n\t\"minecraft:generic.safe_fall_distance\":        3,\n\t\"minecraft:generic.scale\":                     1,\n\t\"minecraft:zombie.spawn_reinforcements\":       0,\n\t\"minecraft:generic.step_height\":               0.6,\n\t\"minecraft:generic.submerged_mining_speed\":    0.2,\n\t\"minecraft:generic.sweeping_damage_ratio\":     0,\n\t\"minecraft:generic.water_movement_efficiency\": 0,\n}\n"
  },
  {
    "path": "server/entity/levelEntity.go",
    "content": "package entity\n\nimport \"github.com/zeppelinmc/zeppelin/server/world/level/uuid\"\n\ntype LevelEntity struct {\n\tAir int16\n\n\tCustomName        string\n\tCustomNameVisible bool\n\n\tFallDistance  float32\n\tFire          int16\n\tGlowing       bool\n\tHasVisualFire bool\n\n\tId string `nbt:\"id\"`\n\n\tInvulnerable bool\n\n\tMotion     [3]float64\n\tNoGravity  bool\n\tOnGround   bool\n\tPassengers []Entity\n\n\tPortalCooldown int32\n\tPos            [3]float64\n\tRotation       [2]float32\n\n\tSilent      bool `nbt:\"Silent,omitempty\"`\n\tTags        []string\n\tTicksFrozen int32 `nbt:\"TicksFrozen,omitempty\"`\n\tUUID        uuid.UUID\n\n\t//TODO add state subclasses\n}\n"
  },
  {
    "path": "server/player/chunks.go",
    "content": "package player\n\nimport (\n\t\"bytes\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/buffers\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/dimension\"\n)\n\n// Dimension returns the dimension struct this player is in\nfunc (p *Player) Dimension() *dimension.Dimension {\n\treturn p.dimensionManager.Dimension(p.DimensionName())\n}\n\nfunc (p *Player) sendSpawnChunks() error {\n\tviewDistance := p.ViewDistance()\n\n\tx, _, z := p.Position()\n\tchunkX, chunkZ := int32(x)>>4, int32(z)>>4\n\n\tif err := p.WritePacket(&play.SetCenterChunk{ChunkX: chunkX, ChunkZ: chunkZ}); err != nil {\n\t\treturn err\n\t}\n\n\tvar chunks int32\n\n\tif err := p.WritePacket(&play.ChunkBatchStart{}); err != nil {\n\t\treturn err\n\t}\n\n\tbuf := buffers.Buffers.Get().(*bytes.Buffer)\n\n\tfor x := chunkX - viewDistance; x < chunkX+viewDistance; x++ {\n\t\tfor z := chunkZ - viewDistance; z < chunkZ+viewDistance; z++ {\n\t\t\tbuf.Reset()\n\t\t\tc, err := p.Dimension().GetChunkBuf(x, z, buf)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbuf.Reset()\n\n\t\t\tif err := p.WritePacket(c.EncodeBuf(p.registryIndexes[\"minecraft:worldgen/biome\"], buf)); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tchunks++\n\t\t}\n\t}\n\tbuffers.Buffers.Put(buf)\n\n\tif err := p.WritePacket(&play.ChunkBatchFinished{\n\t\tBatchSize: chunks,\n\t}); err != nil {\n\t\treturn err\n\t}\n\n\t_, err := p.awaitPacket(play.PacketIdChunkBatchReceived)\n\n\treturn err\n}\n"
  },
  {
    "path": "server/player/conn.go",
    "content": "package player\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/configuration\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\t\"github.com/zeppelinmc/zeppelin/util/log\"\n\t\"time\"\n\t\"unsafe\"\n)\n\n// registeredHandlers maps all handler functions by their state[0] and id[1]\nvar registeredHandlers = make(map[[2]int32]func(*Player, packet.Decodeable) error)\n\nfunc RegisterHandler(state, id int32, handler func(*Player, packet.Decodeable) error) struct{} {\n\tregisteredHandlers[[2]int32{state, id}] = handler\n\n\treturn struct{}{}\n}\n\n// awaitPacket waits for the packet with the id to be received\nfunc (p *Player) awaitPacket(id int32) (packet.Decodeable, error) {\n\tp.packetAwaited.Store(id)\n\tc := make(chan packet.Decodeable)\n\tp.packetAwaitedChan.Store(&c)\n\n\tpk := <-c\n\tif pk, ok := pk.(packet.Error); ok {\n\t\treturn nil, pk.Error\n\t}\n\n\treturn pk, nil\n}\n\nfunc interfaceAssert[T any](v any) T {\n\treturn *(*T)(unsafe.Add(unsafe.Pointer(&v), unsafe.Sizeof(0)))\n}\n\nfunc (p *Player) keepAlive() error {\n\tl := time.Now().UnixMilli()\n\tp.cbLastKeepAlive.Store(l)\n\treturn p.WritePacket(&play.ClientboundKeepAlive{KeepAliveID: l})\n}\n\n// isConnectionDead checks if more than 15 seconds have passed since the client sent a keep alive packet\nfunc (p *Player) isConnectionDead() bool {\n\tlastKeepAliveByClient := p.sbLastKeepalive.Load()\n\treturn lastKeepAliveByClient != 0 && time.Now().UnixMilli()-lastKeepAliveByClient > (15*1000)\n}\n\nfunc (p *Player) listenPackets() {\n\tkeepAliveTicker := time.NewTicker(time.Second * 20)\n\tfor {\n\t\tselect {\n\t\tcase <-keepAliveTicker.C:\n\t\t\tif err := p.keepAlive(); err != nil {\n\t\t\t\tp.killConnection(false, \"lost connection\")\n\t\t\t\treturn\n\t\t\t}\n\t\tdefault:\n\t\t\tif p.isConnectionDead() {\n\t\t\t\t//todo disconnect\n\t\t\t\tp.killConnection(false, \"timed out\")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tpk, s, err := p.ReadPacket()\n\n\t\t\tawaitId := p.packetAwaited.Load()\n\n\t\t\tif err != nil {\n\t\t\t\tp.killConnection(false, \"lost connection\")\n\n\t\t\t\tif awaitId != -1 {\n\t\t\t\t\t*p.packetAwaitedChan.Swap(nil) <- packet.Error{Error: err}\n\t\t\t\t\tp.packetAwaited.Store(-1)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif s {\n\t\t\t\t// The packet was stopped mid-interception, and shouldn't be handled\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tstate, id := p.State(), pk.ID()\n\n\t\t\t// This packet is awaited by another goroutine\n\t\t\tif awaitId == id {\n\t\t\t\t*p.packetAwaitedChan.Swap(nil) <- pk\n\t\t\t\tp.packetAwaited.Store(-1)\n\t\t\t}\n\n\t\t\thandler, ok := registeredHandlers[[2]int32{state, id}]\n\t\t\tif !ok {\n\t\t\t\tswitch pk := pk.(type) {\n\t\t\t\tcase *configuration.ClientInformation, *play.ClientInformation:\n\t\t\t\t\tp.ClientInformation.Store(interfaceAssert[*configuration.ClientInformation](pk))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif err := handler(p, pk); err != nil {\n\t\t\t\tp.killConnection(false, \"packet handling error: \"+err.Error())\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\n// killConnection kills the player's connection\nfunc (p *Player) killConnection(serverError bool, reason string) {\n\tvar logFunction = log.Infolnf\n\tif serverError {\n\t\t// if an error happened on the server's side, the log message will be an error\n\t\tlogFunction = log.Errorlnf\n\t}\n\tlogFunction(\"%sPlayer %s disconnected: %s\", log.FormatAddr(true /*TODO replace*/, p.RemoteAddr()), p.Username(), reason)\n}\n"
  },
  {
    "path": "server/player/handler_chat_command.go",
    "content": "package player\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/protocol/net\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\t\"github.com/zeppelinmc/zeppelin/util/log\"\n)\n\nvar _ = RegisterHandler(net.PlayState, play.PacketIdChatCommand, func(p *Player, packet packet.Decodeable) error {\n\tpk := packet.(*play.ChatCommand)\n\n\tlog.Infolnf(\"%sPlayer %s (%s) issued server command: /%s\", log.FormatAddr(p.serverProperties.LogIPs, p.RemoteAddr()), p.Username(), p.UUID(), pk.Command)\n\tp.commandManager.Call(pk.Command, p)\n\n\treturn nil\n})\n"
  },
  {
    "path": "server/player/player.go",
    "content": "package player\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/properties\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/configuration\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/tags\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n\t\"github.com/zeppelinmc/zeppelin/server/command\"\n\t\"github.com/zeppelinmc/zeppelin/server/entity\"\n\t\"github.com/zeppelinmc/zeppelin/server/player/state\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/dimension\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/level\"\n\t\"slices\"\n\t\"sync/atomic\"\n\t\"unsafe\"\n)\n\ntype Player struct {\n\t*net.Conn\n\t*state.PlayerEntity\n\n\tplayerList *PlayerList\n\t// the entity id for this player\n\tentityId int32\n\n\tUnlisted bool\n\n\tClientInformation atomic.Pointer[configuration.ClientInformation]\n\n\tdimensionManager *dimension.DimensionManager\n\tworldLevel       *level.Level\n\n\tserverProperties *properties.ServerProperties\n\tcommandManager   *command.Manager\n\n\t// the time in milliseconds that the keep alive packet was sent to the server from the client\n\tsbLastKeepalive atomic.Int64\n\t// the time in milliseconds that the keep alive packet was sent to the client from the server\n\tcbLastKeepAlive atomic.Int64\n\n\tregistryIndexes map[string][]string\n\n\t// the packet currently awaited\n\tpacketAwaited     atomic.Int32\n\tpacketAwaitedChan atomic.Pointer[chan packet.Decodeable]\n}\n\nfunc int32toAtomic(i int32) atomic.Int32 {\n\t// int32 and atomic.Int32 are the same structure and size\n\treturn *(*atomic.Int32)(unsafe.Pointer(&i))\n}\n\nfunc (list *PlayerList) New(conn *net.Conn, en *state.PlayerEntity, dimensionManager *dimension.DimensionManager, worldLevel *level.Level, serverProperties *properties.ServerProperties, commandManager *command.Manager) *Player {\n\tp := &Player{\n\t\tentityId:     entity.NewEntityId(),\n\t\tPlayerEntity: en,\n\n\t\tdimensionManager: dimensionManager,\n\t\tworldLevel:       worldLevel,\n\n\t\tserverProperties: serverProperties,\n\t\tcommandManager:   commandManager,\n\n\t\tregistryIndexes: make(map[string][]string),\n\n\t\tpacketAwaited: int32toAtomic(-1),\n\n\t\tplayerList: list,\n\n\t\tConn: conn,\n\t}\n\tp.ClientInformation.Store(&configuration.ClientInformation{})\n\n\treturn p\n}\n\n/*\nViewDistance returns the view distance of the client, in chunks, or the server's render distance if the client's view distance is bigger or not set\n*/\nfunc (p *Player) ViewDistance() int32 {\n\tplVd := int32(p.ClientInformation.Load().ViewDistance)\n\tif plVd == 0 || plVd > p.serverProperties.ViewDistance {\n\t\treturn p.serverProperties.ViewDistance\n\t}\n\n\treturn plVd\n}\n\n// writeOrKill tries to write the packet to the player and kills the connection on failure\nfunc (p *Player) writeOrKill(pk packet.Encodeable) {\n\tif err := p.WritePacket(pk); err != nil {\n\t\tp.killConnection(false, \"lost connection\")\n\t}\n}\n\n// finishConfiguration finishes the configuration phase by sending the server brand, registries and tags\nfunc (p *Player) finishConfiguration() error {\n\t// begin packet reading in the background\n\tgo p.listenPackets()\n\n\t// send the server brand (shows in F3)\n\tif err := p.WritePacket(&configuration.ClientboundPluginMessage{\n\t\tChannel: \"minecraft:brand\",\n\t\tData:    encoding.AppendString(nil, \"Zeppelin\"),\n\t}); err != nil {\n\t\treturn err\n\t}\n\n\t// send the registry packets\n\tconfiguration.RegistryPacketsMutex.Lock()\n\tfor _, pk := range configuration.RegistryPackets {\n\t\tif err := p.WritePacket(pk); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tp.registryIndexes[pk.RegistryId] = slices.Clone(pk.Indexes)\n\t}\n\tconfiguration.RegistryPacketsMutex.Unlock()\n\n\t// finish the configuration phase\n\tif err := p.WritePacket(configuration.FinishConfiguration{}); err != nil {\n\t\treturn err\n\t}\n\n\t// wait for the client to acknowledge the finish configuration packet\n\tif _, err := p.awaitPacket(configuration.PacketIdAcknowledgeFinishConfiguration); err != nil {\n\t\treturn err\n\t}\n\n\t// switch to play state\n\tp.SetState(net.PlayState)\n\n\t// send tags (blocks, fluids, etc)\n\treturn p.WritePacket(tags.Tags)\n}\n\n// startGame finishes the initialization for the player and logs it into the world\nfunc (p *Player) startGame() error {\n\tif err := p.sendCommandGraph(); err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.WritePacket(&play.Login{\n\t\tEntityID:           p.entityId,\n\t\tDimensionName:      p.DimensionName(),\n\t\tGameMode:           byte(p.GameMode()),\n\t\tDimensionType:      int32(slices.Index(p.registryIndexes[\"minecraft:dimension_type\"], p.DimensionName())),\n\t\tViewDistance:       p.serverProperties.ViewDistance,\n\t\tSimulationDistance: p.serverProperties.SimulationDistance,\n\t\tHashedSeed:         p.worldLevel.Data.WorldGenSettings.Seed.Hash(),\n\t\tEnforcesSecureChat: p.serverProperties.EnforceSecureProfile,\n\t}); err != nil {\n\t\treturn err\n\t}\n\n\t// todo add all other stuff\n\tif err := p.WritePacket(&play.SetDefaultSpawnPosition{\n\t\tX:     p.worldLevel.Data.SpawnX,\n\t\tY:     p.worldLevel.Data.SpawnY,\n\t\tZ:     p.worldLevel.Data.SpawnZ,\n\t\tAngle: p.worldLevel.Data.SpawnAngle,\n\t}); err != nil {\n\t\treturn err\n\t}\n\n\tx, y, z := p.Position()\n\tyaw, pitch := p.Rotation()\n\n\tif err := p.SynchronizePosition(x, y, z, yaw, pitch); err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.sendSpawnChunks(); err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.SynchronizePosition(x, y, z, yaw, pitch); err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.WritePacket(&play.GameEvent{Event: play.GameEventStartWaitingChunks}); err != nil {\n\t\treturn err\n\t}\n\tp.playerList.AddPlayer(p)\n\n\treturn nil\n}\n\n// SynchronizePosition teleports the player to the specified coordinates\nfunc (p *Player) SynchronizePosition(x, y, z float64, yaw, pitch float32) error {\n\tp.SetPosition(x, y, z)\n\tp.SetRotation(yaw, pitch)\n\n\tif err := p.WritePacket(&play.SynchronizePlayerPosition{X: x, Y: y, Z: z, Yaw: yaw, Pitch: pitch}); err != nil {\n\t\treturn err\n\t}\n\t_, err := p.awaitPacket(play.PacketIdConfirmTeleportation)\n\n\treturn err\n}\n\n// Login logs the player into the game\nfunc (p *Player) Login() error {\n\tif err := p.finishConfiguration(); err != nil {\n\t\treturn err\n\t}\n\treturn p.startGame()\n}\n\n// SystemMessage sends a system message (unsigned) to the player\nfunc (p *Player) SystemMessage(msg text.TextComponent) error {\n\treturn p.WritePacket(&play.SystemChatMessage{Content: msg})\n}\n\n// sendCommandGraph sends the command graph to the player\nfunc (p *Player) sendCommandGraph() error {\n\treturn p.WritePacket(p.commandManager.Encode())\n}\n"
  },
  {
    "path": "server/player/playerlist.go",
    "content": "package player\n\nimport (\n\t\"github.com/google/uuid\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\t\"github.com/zeppelinmc/zeppelin/util/atomic\"\n\t\"unsafe\"\n)\n\nfunc NewPlayerList(cap uintptr) PlayerList {\n\treturn PlayerList{\n\t\tplayerList: atomic.Make(0, cap, atomic.Pointer),\n\t}\n}\n\ntype PlayerList struct {\n\tplayerList atomic.Slice\n}\n\nfunc (list *PlayerList) NumPlayers() int {\n\treturn int(list.playerList.Len())\n}\n\nfunc (list *PlayerList) Player(uuid uuid.UUID) *Player {\n\tfor i := uintptr(0); i < list.playerList.Len(); i++ {\n\t\tplayer := list.playerAtIndex(i)\n\n\t\tif player.UUID() == uuid {\n\t\t\treturn player\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (list *PlayerList) PlayerByUsername(name string) *Player {\n\tfor i := uintptr(0); i < list.playerList.Len(); i++ {\n\t\tplayer := list.playerAtIndex(i)\n\n\t\tif player.Username() == name {\n\t\t\treturn player\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (list *PlayerList) playerAtIndex(index uintptr) *Player {\n\treturn *(**Player)(list.playerList.Element(index))\n}\n\nfunc (list *PlayerList) AddPlayer(player *Player) {\n\tlist.addPlayerToSlice(player)\n\n\tupdate := &play.PlayerInfoUpdate{\n\t\tActions: play.ActionAddPlayer | play.ActionUpdateListed, //todo: add the rest\n\t\tPlayers: make(map[uuid.UUID]play.PlayerAction, list.NumPlayers()),\n\t}\n\n\tfor i := uintptr(0); i < list.playerList.Len(); i++ {\n\t\tplayer := list.playerAtIndex(i)\n\n\t\tupdate.Players[player.UUID()] = play.PlayerAction{\n\t\t\tName:       player.Username(),\n\t\t\tListed:     !player.Unlisted,\n\t\t\tProperties: player.Properties(),\n\t\t}\n\t}\n\n\tfor i := uintptr(0); i < list.playerList.Len(); i++ {\n\t\tplayer := list.playerAtIndex(i)\n\t\tplayer.writeOrKill(update)\n\t}\n}\n\nfunc (list *PlayerList) addPlayerToSlice(player *Player) {\n\tpointerOfPlayer := unsafe.Pointer(player)\n\tlist.playerList.Append(unsafe.Pointer(&pointerOfPlayer))\n}\n"
  },
  {
    "path": "server/player/state/list/playerlist.go",
    "content": "// Package list provides parsing of playerlist files (whitelist.json, ops.json etc)\n\npackage list\n\ntype WhitelistPlayer struct {\n\tUUID string `json:\"uuid\"`\n\tName string `json:\"name\"`\n}\n\ntype OperatorPlayer struct {\n\tUUID                string `json:\"uuid\"`\n\tName                string `json:\"name\"`\n\tLevel               int32  `json:\"level\"`\n\tBypassesPlayerLimit bool   `json:\"bypassesPlayerLimit\"`\n}\n"
  },
  {
    "path": "server/player/state/playerEntity.go",
    "content": "package state\n\nimport (\n\ta \"sync/atomic\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/metadata\"\n\t\"github.com/zeppelinmc/zeppelin/server/container\"\n\t\"github.com/zeppelinmc/zeppelin/server/entity\"\n\t\"github.com/zeppelinmc/zeppelin/server/registry\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/level\"\n\t\"github.com/zeppelinmc/zeppelin/util/atomic\"\n)\n\ntype PlayerEntity struct {\n\tentity.LivingEntity\n\n\tdata level.Player\n\n\tabilities atomic.AtomicValue[level.PlayerAbilities]\n\n\tgameMode         a.Int32\n\tselectedItemSlot a.Int32\n\n\t//recipeBook atomic.AtomicValue[level.RecipeBook]\n\n\tinventory *container.Container\n}\n\n// New looks up a player state in the cache or creates one if not found\nfunc (mgr *PlayerEntityManager) New(data level.Player) *PlayerEntity {\n\tif p, ok := mgr.lookup(data.UUID.UUID()); ok {\n\t\treturn p\n\t}\n\n\tpl := &PlayerEntity{\n\t\tLivingEntity: entity.NewLiving(entity.New(data.UUID.UUID(), registry.EntityType.Get(\"minecraft:player\"), metadata.Player(data.Health), data.Attributes)),\n\n\t\t//recipeBook: atomic.Value(data.RecipeBook),\n\n\t\tabilities: atomic.Value(data.Abilities),\n\n\t\tinventory: &data.Inventory,\n\n\t\tdata: data,\n\t}\n\n\tpl.gameMode.Store(int32(data.PlayerGameType))\n\tpl.selectedItemSlot.Store(data.SelectedItemSlot)\n\n\tpl.SetPosition(data.Pos[0], data.Pos[1], data.Pos[2])\n\tpl.SetMotion(data.Motion[0], data.Motion[1], data.Motion[2])\n\tpl.SetRotation(data.Rotation[0], data.Rotation[1])\n\tpl.SetOnGround(data.OnGround)\n\tpl.SetDimensionName(data.Dimension)\n\tpl.SetHealth(data.Health)\n\tpl.SetFood(data.FoodLevel, data.FoodSaturationLevel, data.FoodExhaustionLevel)\n\n\tmgr.add(pl)\n\n\treturn pl\n}\n\nfunc (p *PlayerEntity) Abilities() level.PlayerAbilities {\n\treturn p.abilities.Get()\n}\n\nfunc (p *PlayerEntity) SetAbilities(abs level.PlayerAbilities) {\n\tp.abilities.Set(abs)\n}\n\nfunc (p *PlayerEntity) GameMode() level.GameMode {\n\treturn level.GameMode(p.gameMode.Load())\n}\n\nfunc (p *PlayerEntity) SetGameMode(mode level.GameMode) {\n\tp.gameMode.Store(int32(mode))\n}\n\n/*func (p *PlayerEntity) RecipeBook() level.RecipeBook {\n\treturn p.recipeBook.Get()\n}\n\nfunc (p *PlayerEntity) SetRecipeBook(book level.RecipeBook) {\n\tp.recipeBook.Set(book)\n}*/\n\nfunc (p *PlayerEntity) Inventory() *container.Container {\n\treturn p.inventory\n}\n\n// if negative, returns 0 and if over 8, returns 8\nfunc (p *PlayerEntity) SelectedItemSlot() int32 {\n\tslot := p.selectedItemSlot.Load()\n\tif slot < 0 {\n\t\tslot = 0\n\t}\n\tif slot > 8 {\n\t\tslot = 8\n\t}\n\treturn slot\n}\n\n// if negative, set to 0 and if over 8, set to 8\nfunc (p *PlayerEntity) SetSelectedItemSlot(slot int32) {\n\tif slot < 0 {\n\t\tslot = 0\n\t}\n\tif slot > 8 {\n\t\tslot = 8\n\t}\n\tp.selectedItemSlot.Store(slot)\n}\n\nfunc (p *PlayerEntity) sync() {\n\tx, y, z := p.Position()\n\tyaw, pitch := p.Rotation()\n\tvx, vy, vz := p.Motion()\n\n\tp.data.Abilities = p.abilities.Get()\n\tp.data.Pos = [3]float64{x, y, z}\n\tp.data.Rotation = [2]float32{yaw, pitch}\n\tp.data.OnGround = p.OnGround()\n\tp.data.Dimension = p.DimensionName()\n\tp.data.Inventory = *p.inventory\n\t//p.data.RecipeBook = p.recipeBook.Get()\n\n\tp.data.Motion = [3]float64{vx, vy, vz}\n\n\tp.data.Attributes = p.Attributes()\n\n\tp.data.Health = p.Health()\n\tp.data.FoodLevel, p.data.FoodSaturationLevel, p.data.FoodExhaustionLevel = p.Food()\n\tp.data.PlayerGameType = level.GameMode(p.gameMode.Load())\n\tp.data.SelectedItemSlot = p.selectedItemSlot.Load()\n}\n"
  },
  {
    "path": "server/player/state/playerEntityManager.go",
    "content": "package state\n\nimport (\n\t\"sync\"\n\n\t\"github.com/google/uuid\"\n)\n\n// the player cache is used when saving the world playerdata\n\ntype PlayerEntityManager struct {\n\tm  map[uuid.UUID]*PlayerEntity\n\tmu sync.RWMutex\n}\n\nfunc (mgr *PlayerEntityManager) lookup(id uuid.UUID) (*PlayerEntity, bool) {\n\tmgr.mu.RLock()\n\tdefer mgr.mu.RUnlock()\n\tp, ok := mgr.m[id]\n\n\treturn p, ok\n}\n\nfunc (mgr *PlayerEntityManager) add(p *PlayerEntity) {\n\tmgr.mu.Lock()\n\tdefer mgr.mu.Unlock()\n\tmgr.m[p.UUID()] = p\n}\n\n// saves all the players in the manager to the path specified in their data file\nfunc (mgr *PlayerEntityManager) SaveAll() {\n\tmgr.mu.RLock()\n\tdefer mgr.mu.RUnlock()\n\tfor _, player := range mgr.m {\n\t\tplayer.sync()\n\n\t\tplayer.data.Save()\n\t}\n}\n\nfunc NewPlayerEntityManager() *PlayerEntityManager {\n\treturn &PlayerEntityManager{m: make(map[uuid.UUID]*PlayerEntity)}\n}\n"
  },
  {
    "path": "server/plugin.go",
    "content": "package server\r\n\r\nimport (\r\n\t\"io/fs\"\r\n\t\"os\"\r\n\t\"plugin\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/util/log\"\r\n)\r\n\r\ntype Plugin struct {\r\n\tbasePluginsPath string\r\n\r\n\tsrv        *Server\r\n\tIdentifier string\r\n\r\n\tOnLoad func(*Plugin)\r\n\tUnload func(*Plugin)\r\n}\r\n\r\nfunc (p Plugin) FS() fs.FS {\r\n\treturn os.DirFS(p.Dir())\r\n}\r\n\r\n// Dir returns the base directory for the plugin (plugins/<identifier>)\r\nfunc (p Plugin) Dir() string {\r\n\treturn p.basePluginsPath + \"/\" + p.Identifier\r\n}\r\n\r\nfunc (p Plugin) Server() *Server {\r\n\treturn p.srv\r\n}\r\n\r\nfunc (srv *Server) loadPlugins() {\r\n\tos.Mkdir(\"plugins\", 0755)\r\n\tdir, _ := os.ReadDir(\"plugins\")\r\n\tfor _, entry := range dir {\r\n\t\tif entry.IsDir() {\r\n\t\t\tcontinue\r\n\t\t}\r\n\t\tsrv.loadPlugin(\"plugins/\" + entry.Name())\r\n\t}\r\n}\r\n\r\nfunc (srv *Server) loadPlugin(name string) {\r\n\tpl, err := plugin.Open(name)\r\n\tif err != nil {\r\n\t\tlog.Errorlnf(\"Error loading plugin %s: %v\", name, err)\r\n\t\treturn\r\n\t}\r\n\tsym, err := pl.Lookup(\"ZeppelinPluginExport\")\r\n\tif err != nil {\r\n\t\tlog.Errorlnf(\"Couldn't find plugin export for %s: %v\", name, err)\r\n\t\treturn\r\n\t}\r\n\tplugin, ok := sym.(*Plugin)\r\n\tif !ok {\r\n\t\tlog.Errorlnf(\"Invalid plugin export for %s\", name)\r\n\t\treturn\r\n\t}\r\n\tplugin.basePluginsPath = \"plugins\"\r\n\tplugin.srv = srv\r\n\tos.Mkdir(plugin.Dir(), 0755)\r\n\r\n\tplugin.OnLoad(plugin)\r\n}\r\n"
  },
  {
    "path": "server/registry/activity.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Activity = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:fight\": 10,\n\t\t\"minecraft:idle\": 1,\n\t\t\"minecraft:long_jump\": 16,\n\t\t\"minecraft:ram\": 17,\n\t\t\"minecraft:swim\": 19,\n\t\t\"minecraft:admire_item\": 12,\n\t\t\"minecraft:celebrate\": 11,\n\t\t\"minecraft:dig\": 25,\n\t\t\"minecraft:play_dead\": 15,\n\t\t\"minecraft:pre_raid\": 8,\n\t\t\"minecraft:rest\": 4,\n\t\t\"minecraft:roar\": 23,\n\t\t\"minecraft:lay_spawn\": 20,\n\t\t\"minecraft:meet\": 5,\n\t\t\"minecraft:panic\": 6,\n\t\t\"minecraft:ride\": 14,\n\t\t\"minecraft:tongue\": 18,\n\t\t\"minecraft:avoid\": 13,\n\t\t\"minecraft:core\": 0,\n\t\t\"minecraft:play\": 3,\n\t\t\"minecraft:raid\": 7,\n\t\t\"minecraft:sniff\": 21,\n\t\t\"minecraft:work\": 2,\n\t\t\"minecraft:emerge\": 24,\n\t\t\"minecraft:hide\": 9,\n\t\t\"minecraft:investigate\": 22,\n\t},\n}"
  },
  {
    "path": "server/registry/armor_material.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar ArmorMaterial = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:gold\": 3,\n\t\t\"minecraft:iron\": 2,\n\t\t\"minecraft:leather\": 0,\n\t\t\"minecraft:netherite\": 6,\n\t\t\"minecraft:turtle\": 5,\n\t\t\"minecraft:armadillo\": 7,\n\t\t\"minecraft:chainmail\": 1,\n\t\t\"minecraft:diamond\": 4,\n\t},\n}"
  },
  {
    "path": "server/registry/attribute.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Attribute = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:generic.jump_strength\": 14,\n\t\t\"minecraft:generic.armor\": 0,\n\t\t\"minecraft:generic.explosion_knockback_resistance\": 8,\n\t\t\"minecraft:generic.fall_damage_multiplier\": 10,\n\t\t\"minecraft:generic.gravity\": 13,\n\t\t\"minecraft:generic.luck\": 16,\n\t\t\"minecraft:generic.oxygen_bonus\": 22,\n\t\t\"minecraft:player.block_interaction_range\": 6,\n\t\t\"minecraft:player.mining_efficiency\": 19,\n\t\t\"minecraft:generic.attack_damage\": 2,\n\t\t\"minecraft:generic.follow_range\": 12,\n\t\t\"minecraft:player.entity_interaction_range\": 9,\n\t\t\"minecraft:player.sweeping_damage_ratio\": 29,\n\t\t\"minecraft:generic.armor_toughness\": 1,\n\t\t\"minecraft:generic.attack_knockback\": 3,\n\t\t\"minecraft:generic.attack_speed\": 4,\n\t\t\"minecraft:generic.knockback_resistance\": 15,\n\t\t\"minecraft:generic.max_health\": 18,\n\t\t\"minecraft:generic.water_movement_efficiency\": 30,\n\t\t\"minecraft:player.block_break_speed\": 5,\n\t\t\"minecraft:player.sneaking_speed\": 25,\n\t\t\"minecraft:zombie.spawn_reinforcements\": 26,\n\t\t\"minecraft:generic.movement_speed\": 21,\n\t\t\"minecraft:generic.step_height\": 27,\n\t\t\"minecraft:player.submerged_mining_speed\": 28,\n\t\t\"minecraft:generic.flying_speed\": 11,\n\t\t\"minecraft:generic.max_absorption\": 17,\n\t\t\"minecraft:generic.scale\": 24,\n\t\t\"minecraft:generic.burning_time\": 7,\n\t\t\"minecraft:generic.movement_efficiency\": 20,\n\t\t\"minecraft:generic.safe_fall_distance\": 23,\n\t},\n}"
  },
  {
    "path": "server/registry/block.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Block = Registry{\n\tDefault: \"minecraft:air\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:command_block\": 351,\n\t\t\"minecraft:mangrove_wall_hanging_sign\": 226,\n\t\t\"minecraft:muddy_mangrove_roots\": 55,\n\t\t\"minecraft:waxed_weathered_copper_trapdoor\": 989,\n\t\t\"minecraft:attached_melon_stem\": 314,\n\t\t\"minecraft:cobweb\": 122,\n\t\t\"minecraft:dark_oak_stairs\": 459,\n\t\t\"minecraft:snow_block\": 249,\n\t\t\"minecraft:cherry_planks\": 18,\n\t\t\"minecraft:crimson_roots\": 809,\n\t\t\"minecraft:fern\": 124,\n\t\t\"minecraft:potted_poppy\": 367,\n\t\t\"minecraft:sweet_berry_bush\": 788,\n\t\t\"minecraft:beetroots\": 601,\n\t\t\"minecraft:deepslate_tile_slab\": 1034,\n\t\t\"minecraft:gray_banner\": 510,\n\t\t\"minecraft:oxidized_copper_trapdoor\": 984,\n\t\t\"minecraft:cherry_slab\": 544,\n\t\t\"minecraft:cobblestone_stairs\": 198,\n\t\t\"minecraft:purple_stained_glass_pane\": 451,\n\t\t\"minecraft:bamboo_trapdoor\": 292,\n\t\t\"minecraft:chiseled_red_sandstone\": 536,\n\t\t\"minecraft:polished_deepslate_slab\": 1030,\n\t\t\"minecraft:trial_spawner\": 1057,\n\t\t\"minecraft:infested_deepslate\": 1043,\n\t\t\"minecraft:light_blue_stained_glass_pane\": 444,\n\t\t\"minecraft:mangrove_planks\": 20,\n\t\t\"minecraft:shroomlight\": 804,\n\t\t\"minecraft:sunflower\": 497,\n\t\t\"minecraft:waxed_copper_bulb\": 1002,\n\t\t\"minecraft:crimson_door\": 826,\n\t\t\"minecraft:magenta_candle\": 872,\n\t\t\"minecraft:brown_banner\": 515,\n\t\t\"minecraft:crimson_fence_gate\": 820,\n\t\t\"minecraft:crimson_fungus\": 803,\n\t\t\"minecraft:dead_tube_coral_block\": 683,\n\t\t\"minecraft:light_blue_bed\": 106,\n\t\t\"minecraft:redstone_lamp\": 339,\n\t\t\"minecraft:barrier\": 464,\n\t\t\"minecraft:black_carpet\": 493,\n\t\t\"minecraft:warped_button\": 825,\n\t\t\"minecraft:warped_hanging_sign\": 216,\n\t\t\"minecraft:deepslate_redstone_ore\": 243,\n\t\t\"minecraft:end_stone_bricks\": 597,\n\t\t\"minecraft:potted_allium\": 369,\n\t\t\"minecraft:acacia_fence_gate\": 570,\n\t\t\"minecraft:cracked_deepslate_bricks\": 1041,\n\t\t\"minecraft:orange_carpet\": 479,\n\t\t\"minecraft:pink_concrete_powder\": 668,\n\t\t\"minecraft:player_wall_head\": 401,\n\t\t\"minecraft:polished_tuff\": 913,\n\t\t\"minecraft:dropper\": 424,\n\t\t\"minecraft:magenta_carpet\": 480,\n\t\t\"minecraft:jungle_wall_hanging_sign\": 224,\n\t\t\"minecraft:light_blue_wool\": 133,\n\t\t\"minecraft:orange_candle_cake\": 888,\n\t\t\"minecraft:spruce_wood\": 67,\n\t\t\"minecraft:bell\": 783,\n\t\t\"minecraft:chorus_flower\": 593,\n\t\t\"minecraft:oak_pressure_plate\": 233,\n\t\t\"minecraft:spore_blossom\": 1011,\n\t\t\"minecraft:copper_block\": 932,\n\t\t\"minecraft:gray_concrete_powder\": 669,\n\t\t\"minecraft:dead_fire_coral_block\": 686,\n\t\t\"minecraft:ender_chest\": 344,\n\t\t\"minecraft:light_blue_glazed_terracotta\": 633,\n\t\t\"minecraft:blue_candle\": 881,\n\t\t\"minecraft:clay\": 251,\n\t\t\"minecraft:red_candle\": 884,\n\t\t\"minecraft:structure_block\": 832,\n\t\t\"minecraft:mud_brick_stairs\": 322,\n\t\t\"minecraft:orange_candle\": 871,\n\t\t\"minecraft:red_sand\": 36,\n\t\t\"minecraft:stripped_crimson_stem\": 799,\n\t\t\"minecraft:warped_hyphae\": 791,\n\t\t\"minecraft:waxed_oxidized_cut_copper_stairs\": 966,\n\t\t\"minecraft:cyan_bed\": 112,\n\t\t\"minecraft:deepslate_lapis_ore\": 96,\n\t\t\"minecraft:lime_candle\": 875,\n\t\t\"minecraft:tnt\": 166,\n\t\t\"minecraft:torchflower_crop\": 598,\n\t\t\"minecraft:dead_fire_coral_fan\": 706,\n\t\t\"minecraft:dead_tube_coral\": 693,\n\t\t\"minecraft:dark_oak_hanging_sign\": 214,\n\t\t\"minecraft:dead_bubble_coral_block\": 685,\n\t\t\"minecraft:waxed_exposed_copper\": 960,\n\t\t\"minecraft:brown_shulker_box\": 626,\n\t\t\"minecraft:crimson_button\": 824,\n\t\t\"minecraft:sniffer_egg\": 682,\n\t\t\"minecraft:tuff_wall\": 912,\n\t\t\"minecraft:vault\": 1058,\n\t\t\"minecraft:mossy_stone_brick_slab\": 748,\n\t\t\"minecraft:pink_terracotta\": 431,\n\t\t\"minecraft:fire_coral_wall_fan\": 721,\n\t\t\"minecraft:black_shulker_box\": 629,\n\t\t\"minecraft:diorite_slab\": 758,\n\t\t\"minecraft:honeycomb_block\": 839,\n\t\t\"minecraft:mud_brick_slab\": 557,\n\t\t\"minecraft:warped_wart_block\": 795,\n\t\t\"minecraft:waxed_weathered_copper\": 959,\n\t\t\"minecraft:acacia_leaves\": 86,\n\t\t\"minecraft:gold_ore\": 39,\n\t\t\"minecraft:exposed_chiseled_copper\": 944,\n\t\t\"minecraft:cherry_trapdoor\": 289,\n\t\t\"minecraft:dark_oak_wall_hanging_sign\": 225,\n\t\t\"minecraft:deepslate_emerald_ore\": 343,\n\t\t\"minecraft:dripstone_block\": 1008,\n\t\t\"minecraft:magma_block\": 607,\n\t\t\"minecraft:spruce_log\": 47,\n\t\t\"minecraft:spruce_hanging_sign\": 209,\n\t\t\"minecraft:potted_flowering_azalea_bush\": 1049,\n\t\t\"minecraft:potted_lily_of_the_valley\": 377,\n\t\t\"minecraft:soul_torch\": 260,\n\t\t\"minecraft:bamboo_stairs\": 461,\n\t\t\"minecraft:purple_glazed_terracotta\": 640,\n\t\t\"minecraft:magenta_concrete\": 648,\n\t\t\"minecraft:rail\": 197,\n\t\t\"minecraft:bamboo_button\": 393,\n\t\t\"minecraft:lever\": 230,\n\t\t\"minecraft:horn_coral_block\": 692,\n\t\t\"minecraft:bee_nest\": 836,\n\t\t\"minecraft:frogspawn\": 1053,\n\t\t\"minecraft:cave_air\": 730,\n\t\t\"minecraft:end_stone_brick_wall\": 770,\n\t\t\"minecraft:dark_oak_fence_gate\": 572,\n\t\t\"minecraft:twisting_vines_plant\": 808,\n\t\t\"minecraft:warped_fungus\": 794,\n\t\t\"minecraft:black_concrete_powder\": 677,\n\t\t\"minecraft:cyan_stained_glass\": 277,\n\t\t\"minecraft:flowering_azalea_leaves\": 91,\n\t\t\"minecraft:smoker\": 775,\n\t\t\"minecraft:tinted_glass\": 924,\n\t\t\"minecraft:brown_candle_cake\": 899,\n\t\t\"minecraft:dispenser\": 98,\n\t\t\"minecraft:orange_shulker_box\": 615,\n\t\t\"minecraft:yellow_concrete\": 650,\n\t\t\"minecraft:kelp\": 678,\n\t\t\"minecraft:lime_wall_banner\": 524,\n\t\t\"minecraft:green_banner\": 516,\n\t\t\"minecraft:soul_wall_torch\": 261,\n\t\t\"minecraft:cherry_wall_sign\": 203,\n\t\t\"minecraft:dead_bubble_coral_wall_fan\": 715,\n\t\t\"minecraft:cyan_candle\": 879,\n\t\t\"minecraft:waxed_copper_grate\": 994,\n\t\t\"minecraft:lantern\": 784,\n\t\t\"minecraft:mangrove_sign\": 193,\n\t\t\"minecraft:mossy_stone_brick_wall\": 762,\n\t\t\"minecraft:red_wall_banner\": 533,\n\t\t\"minecraft:bamboo_planks\": 21,\n\t\t\"minecraft:dark_oak_door\": 588,\n\t\t\"minecraft:tube_coral_block\": 688,\n\t\t\"minecraft:cut_sandstone\": 101,\n\t\t\"minecraft:lily_of_the_valley\": 160,\n\t\t\"minecraft:waxed_oxidized_copper_door\": 980,\n\t\t\"minecraft:waxed_weathered_copper_bulb\": 1004,\n\t\t\"minecraft:weathered_cut_copper_stairs\": 951,\n\t\t\"minecraft:crimson_hanging_sign\": 215,\n\t\t\"minecraft:end_stone\": 337,\n\t\t\"minecraft:heavy_weighted_pressure_plate\": 413,\n\t\t\"minecraft:potted_cactus\": 382,\n\t\t\"minecraft:red_nether_brick_wall\": 768,\n\t\t\"minecraft:sculk_shrieker\": 931,\n\t\t\"minecraft:sticky_piston\": 121,\n\t\t\"minecraft:waxed_weathered_cut_copper\": 963,\n\t\t\"minecraft:acacia_wood\": 70,\n\t\t\"minecraft:budding_amethyst\": 904,\n\t\t\"minecraft:oak_fence\": 254,\n\t\t\"minecraft:red_sandstone_slab\": 560,\n\t\t\"minecraft:blue_wool\": 141,\n\t\t\"minecraft:brown_bed\": 115,\n\t\t\"minecraft:tall_grass\": 501,\n\t\t\"minecraft:deepslate_gold_ore\": 40,\n\t\t\"minecraft:light_gray_stained_glass\": 276,\n\t\t\"minecraft:pumpkin\": 311,\n\t\t\"minecraft:birch_hanging_sign\": 210,\n\t\t\"minecraft:chorus_plant\": 592,\n\t\t\"minecraft:birch_stairs\": 349,\n\t\t\"minecraft:dark_oak_button\": 391,\n\t\t\"minecraft:light_blue_candle_cake\": 890,\n\t\t\"minecraft:magenta_shulker_box\": 616,\n\t\t\"minecraft:cobbled_deepslate_slab\": 1026,\n\t\t\"minecraft:jungle_wood\": 69,\n\t\t\"minecraft:stripped_acacia_wood\": 78,\n\t\t\"minecraft:acacia_fence\": 578,\n\t\t\"minecraft:pink_petals\": 1015,\n\t\t\"minecraft:light_gray_glazed_terracotta\": 638,\n\t\t\"minecraft:spruce_stairs\": 348,\n\t\t\"minecraft:white_candle\": 870,\n\t\t\"minecraft:brick_slab\": 555,\n\t\t\"minecraft:dead_bush\": 125,\n\t\t\"minecraft:yellow_candle_cake\": 891,\n\t\t\"minecraft:light_gray_candle\": 878,\n\t\t\"minecraft:light_gray_wall_banner\": 527,\n\t\t\"minecraft:mossy_cobblestone_slab\": 750,\n\t\t\"minecraft:potted_crimson_roots\": 846,\n\t\t\"minecraft:purpur_block\": 594,\n\t\t\"minecraft:skeleton_skull\": 394,\n\t\t\"minecraft:white_concrete_powder\": 662,\n\t\t\"minecraft:dead_horn_coral_block\": 687,\n\t\t\"minecraft:packed_mud\": 297,\n\t\t\"minecraft:emerald_ore\": 342,\n\t\t\"minecraft:jungle_stairs\": 350,\n\t\t\"minecraft:lapis_ore\": 95,\n\t\t\"minecraft:large_fern\": 502,\n\t\t\"minecraft:polished_blackstone_slab\": 862,\n\t\t\"minecraft:blackstone_wall\": 851,\n\t\t\"minecraft:brown_mushroom\": 161,\n\t\t\"minecraft:sandstone_wall\": 769,\n\t\t\"minecraft:smooth_quartz_slab\": 753,\n\t\t\"minecraft:wall_torch\": 172,\n\t\t\"minecraft:waxed_exposed_copper_bulb\": 1003,\n\t\t\"minecraft:gray_candle_cake\": 894,\n\t\t\"minecraft:purpur_stairs\": 596,\n\t\t\"minecraft:amethyst_block\": 903,\n\t\t\"minecraft:nether_wart\": 328,\n\t\t\"minecraft:potted_wither_rose\": 378,\n\t\t\"minecraft:purple_wall_banner\": 529,\n\t\t\"minecraft:spruce_fence\": 575,\n\t\t\"minecraft:trapped_chest\": 411,\n\t\t\"minecraft:warped_wall_hanging_sign\": 228,\n\t\t\"minecraft:birch_pressure_plate\": 235,\n\t\t\"minecraft:ladder\": 196,\n\t\t\"minecraft:deepslate_tiles\": 1032,\n\t\t\"minecraft:polished_basalt\": 259,\n\t\t\"minecraft:waxed_cut_copper\": 965,\n\t\t\"minecraft:yellow_carpet\": 482,\n\t\t\"minecraft:acacia_log\": 50,\n\t\t\"minecraft:air\": 0,\n\t\t\"minecraft:blue_terracotta\": 436,\n\t\t\"minecraft:nether_portal\": 263,\n\t\t\"minecraft:stone_stairs\": 738,\n\t\t\"minecraft:andesite_stairs\": 742,\n\t\t\"minecraft:birch_fence_gate\": 568,\n\t\t\"minecraft:smooth_stone\": 563,\n\t\t\"minecraft:cyan_carpet\": 487,\n\t\t\"minecraft:smooth_sandstone_slab\": 752,\n\t\t\"minecraft:potted_pink_tulip\": 374,\n\t\t\"minecraft:cake\": 266,\n\t\t\"minecraft:oak_log\": 46,\n\t\t\"minecraft:granite_stairs\": 741,\n\t\t\"minecraft:nether_bricks\": 325,\n\t\t\"minecraft:polished_tuff_slab\": 914,\n\t\t\"minecraft:weathered_copper_trapdoor\": 985,\n\t\t\"minecraft:brown_stained_glass_pane\": 453,\n\t\t\"minecraft:creeper_head\": 402,\n\t\t\"minecraft:jigsaw\": 833,\n\t\t\"minecraft:large_amethyst_bud\": 906,\n\t\t\"minecraft:glowstone\": 262,\n\t\t\"minecraft:honey_block\": 838,\n\t\t\"minecraft:turtle_egg\": 681,\n\t\t\"minecraft:bubble_column\": 731,\n\t\t\"minecraft:packed_ice\": 496,\n\t\t\"minecraft:water_cauldron\": 332,\n\t\t\"minecraft:iron_trapdoor\": 466,\n\t\t\"minecraft:purple_stained_glass\": 278,\n\t\t\"minecraft:lime_candle_cake\": 892,\n\t\t\"minecraft:mangrove_wall_sign\": 206,\n\t\t\"minecraft:cracked_deepslate_tiles\": 1042,\n\t\t\"minecraft:deepslate_iron_ore\": 42,\n\t\t\"minecraft:magenta_wall_banner\": 521,\n\t\t\"minecraft:yellow_wall_banner\": 523,\n\t\t\"minecraft:birch_wall_hanging_sign\": 221,\n\t\t\"minecraft:gray_bed\": 110,\n\t\t\"minecraft:cactus\": 250,\n\t\t\"minecraft:cyan_banner\": 512,\n\t\t\"minecraft:dark_oak_trapdoor\": 290,\n\t\t\"minecraft:jungle_sapling\": 26,\n\t\t\"minecraft:waxed_oxidized_copper_bulb\": 1005,\n\t\t\"minecraft:attached_pumpkin_stem\": 313,\n\t\t\"minecraft:blue_ice\": 724,\n\t\t\"minecraft:mud_bricks\": 298,\n\t\t\"minecraft:purple_candle_cake\": 897,\n\t\t\"minecraft:brown_concrete\": 658,\n\t\t\"minecraft:ice\": 248,\n\t\t\"minecraft:lime_concrete\": 651,\n\t\t\"minecraft:lime_wool\": 135,\n\t\t\"minecraft:podzol\": 11,\n\t\t\"minecraft:sandstone_slab\": 551,\n\t\t\"minecraft:sandstone_stairs\": 341,\n\t\t\"minecraft:tuff_stairs\": 911,\n\t\t\"minecraft:weathered_copper\": 934,\n\t\t\"minecraft:green_candle_cake\": 900,\n\t\t\"minecraft:green_stained_glass_pane\": 454,\n\t\t\"minecraft:mangrove_hanging_sign\": 217,\n\t\t\"minecraft:tube_coral_fan\": 708,\n\t\t\"minecraft:dragon_egg\": 338,\n\t\t\"minecraft:gravel\": 37,\n\t\t\"minecraft:kelp_plant\": 679,\n\t\t\"minecraft:smithing_table\": 781,\n\t\t\"minecraft:cut_sandstone_slab\": 552,\n\t\t\"minecraft:gray_concrete\": 653,\n\t\t\"minecraft:potted_azalea_bush\": 1048,\n\t\t\"minecraft:spruce_fence_gate\": 567,\n\t\t\"minecraft:waxed_oxidized_copper_trapdoor\": 988,\n\t\t\"minecraft:zombie_wall_head\": 399,\n\t\t\"minecraft:blast_furnace\": 776,\n\t\t\"minecraft:cherry_button\": 390,\n\t\t\"minecraft:poppy\": 149,\n\t\t\"minecraft:cobbled_deepslate_wall\": 1027,\n\t\t\"minecraft:oak_wall_hanging_sign\": 219,\n\t\t\"minecraft:dead_brain_coral_block\": 684,\n\t\t\"minecraft:potted_bamboo\": 728,\n\t\t\"minecraft:potted_dandelion\": 366,\n\t\t\"minecraft:tall_seagrass\": 127,\n\t\t\"minecraft:blue_concrete_powder\": 673,\n\t\t\"minecraft:dark_oak_wood\": 72,\n\t\t\"minecraft:warped_stairs\": 823,\n\t\t\"minecraft:weeping_vines\": 805,\n\t\t\"minecraft:lightning_rod\": 1006,\n\t\t\"minecraft:stripped_spruce_wood\": 75,\n\t\t\"minecraft:moving_piston\": 146,\n\t\t\"minecraft:tripwire_hook\": 345,\n\t\t\"minecraft:chiseled_quartz_block\": 420,\n\t\t\"minecraft:mangrove_door\": 589,\n\t\t\"minecraft:warped_fence\": 817,\n\t\t\"minecraft:waxed_weathered_copper_door\": 981,\n\t\t\"minecraft:yellow_shulker_box\": 618,\n\t\t\"minecraft:zombie_head\": 398,\n\t\t\"minecraft:oxidized_chiseled_copper\": 942,\n\t\t\"minecraft:sea_lantern\": 476,\n\t\t\"minecraft:smooth_sandstone_stairs\": 739,\n\t\t\"minecraft:spawner\": 175,\n\t\t\"minecraft:black_stained_glass_pane\": 456,\n\t\t\"minecraft:green_glazed_terracotta\": 643,\n\t\t\"minecraft:dead_bubble_coral\": 695,\n\t\t\"minecraft:end_stone_brick_stairs\": 737,\n\t\t\"minecraft:waxed_exposed_cut_copper_slab\": 972,\n\t\t\"minecraft:weathered_cut_copper_slab\": 955,\n\t\t\"minecraft:yellow_wool\": 134,\n\t\t\"minecraft:birch_door\": 584,\n\t\t\"minecraft:cherry_sign\": 190,\n\t\t\"minecraft:polished_deepslate_wall\": 1031,\n\t\t\"minecraft:sea_pickle\": 723,\n\t\t\"minecraft:torchflower\": 148,\n\t\t\"minecraft:exposed_copper_trapdoor\": 983,\n\t\t\"minecraft:light_gray_concrete\": 654,\n\t\t\"minecraft:mangrove_wood\": 73,\n\t\t\"minecraft:obsidian\": 170,\n\t\t\"minecraft:pink_tulip\": 156,\n\t\t\"minecraft:quartz_stairs\": 422,\n\t\t\"minecraft:smooth_red_sandstone\": 566,\n\t\t\"minecraft:spruce_sapling\": 24,\n\t\t\"minecraft:dead_brain_coral_fan\": 704,\n\t\t\"minecraft:mangrove_stairs\": 460,\n\t\t\"minecraft:stripped_crimson_hyphae\": 801,\n\t\t\"minecraft:warped_roots\": 796,\n\t\t\"minecraft:cave_vines\": 1009,\n\t\t\"minecraft:crimson_nylium\": 802,\n\t\t\"minecraft:crimson_stairs\": 822,\n\t\t\"minecraft:polished_tuff_stairs\": 915,\n\t\t\"minecraft:smooth_red_sandstone_slab\": 747,\n\t\t\"minecraft:bamboo_sapling\": 726,\n\t\t\"minecraft:birch_button\": 387,\n\t\t\"minecraft:potted_red_mushroom\": 379,\n\t\t\"minecraft:purple_shulker_box\": 624,\n\t\t\"minecraft:magenta_stained_glass\": 270,\n\t\t\"minecraft:orange_glazed_terracotta\": 631,\n\t\t\"minecraft:dead_fire_coral\": 696,\n\t\t\"minecraft:nether_brick_stairs\": 327,\n\t\t\"minecraft:brown_carpet\": 490,\n\t\t\"minecraft:cobblestone\": 12,\n\t\t\"minecraft:piston\": 128,\n\t\t\"minecraft:polished_granite\": 3,\n\t\t\"minecraft:tube_coral_wall_fan\": 718,\n\t\t\"minecraft:andesite\": 6,\n\t\t\"minecraft:deepslate_brick_slab\": 1038,\n\t\t\"minecraft:oak_stairs\": 176,\n\t\t\"minecraft:yellow_stained_glass\": 272,\n\t\t\"minecraft:diamond_ore\": 179,\n\t\t\"minecraft:dragon_head\": 404,\n\t\t\"minecraft:bubble_coral\": 700,\n\t\t\"minecraft:dark_prismarine\": 469,\n\t\t\"minecraft:verdant_froglight\": 1051,\n\t\t\"minecraft:brain_coral\": 699,\n\t\t\"minecraft:brick_stairs\": 320,\n\t\t\"minecraft:purpur_slab\": 562,\n\t\t\"minecraft:red_sandstone_stairs\": 538,\n\t\t\"minecraft:flowering_azalea\": 1013,\n\t\t\"minecraft:pitcher_crop\": 599,\n\t\t\"minecraft:magenta_terracotta\": 427,\n\t\t\"minecraft:pink_concrete\": 652,\n\t\t\"minecraft:waxed_cut_copper_stairs\": 969,\n\t\t\"minecraft:jungle_log\": 49,\n\t\t\"minecraft:magenta_stained_glass_pane\": 443,\n\t\t\"minecraft:light_gray_carpet\": 486,\n\t\t\"minecraft:exposed_cut_copper_slab\": 956,\n\t\t\"minecraft:green_terracotta\": 438,\n\t\t\"minecraft:cobblestone_slab\": 554,\n\t\t\"minecraft:jungle_slab\": 542,\n\t\t\"minecraft:polished_blackstone_button\": 864,\n\t\t\"minecraft:spruce_planks\": 14,\n\t\t\"minecraft:big_dripleaf_stem\": 1018,\n\t\t\"minecraft:bubble_coral_fan\": 710,\n\t\t\"minecraft:crimson_stem\": 798,\n\t\t\"minecraft:white_stained_glass_pane\": 441,\n\t\t\"minecraft:redstone_torch\": 244,\n\t\t\"minecraft:torch\": 171,\n\t\t\"minecraft:yellow_banner\": 507,\n\t\t\"minecraft:blue_shulker_box\": 625,\n\t\t\"minecraft:purple_wool\": 140,\n\t\t\"minecraft:purple_carpet\": 488,\n\t\t\"minecraft:raw_copper_block\": 1046,\n\t\t\"minecraft:cornflower\": 158,\n\t\t\"minecraft:powder_snow\": 925,\n\t\t\"minecraft:exposed_cut_copper_stairs\": 952,\n\t\t\"minecraft:potted_orange_tulip\": 372,\n\t\t\"minecraft:prismarine_brick_stairs\": 471,\n\t\t\"minecraft:sculk_vein\": 929,\n\t\t\"minecraft:stripped_jungle_wood\": 77,\n\t\t\"minecraft:black_wall_banner\": 534,\n\t\t\"minecraft:dead_brain_coral\": 694,\n\t\t\"minecraft:detector_rail\": 120,\n\t\t\"minecraft:gray_carpet\": 485,\n\t\t\"minecraft:green_carpet\": 491,\n\t\t\"minecraft:mangrove_leaves\": 89,\n\t\t\"minecraft:quartz_pillar\": 421,\n\t\t\"minecraft:vine\": 317,\n\t\t\"minecraft:coarse_dirt\": 10,\n\t\t\"minecraft:conduit\": 725,\n\t\t\"minecraft:green_wall_banner\": 532,\n\t\t\"minecraft:oxidized_copper_door\": 976,\n\t\t\"minecraft:polished_andesite_slab\": 757,\n\t\t\"minecraft:cracked_nether_bricks\": 867,\n\t\t\"minecraft:dark_prismarine_stairs\": 472,\n\t\t\"minecraft:dead_horn_coral_wall_fan\": 717,\n\t\t\"minecraft:granite_slab\": 754,\n\t\t\"minecraft:lily_pad\": 324,\n\t\t\"minecraft:stone_pressure_plate\": 231,\n\t\t\"minecraft:tuff_bricks\": 918,\n\t\t\"minecraft:brain_coral_fan\": 709,\n\t\t\"minecraft:cyan_concrete\": 655,\n\t\t\"minecraft:diamond_block\": 181,\n\t\t\"minecraft:green_shulker_box\": 627,\n\t\t\"minecraft:stripped_birch_log\": 58,\n\t\t\"minecraft:activator_rail\": 423,\n\t\t\"minecraft:chiseled_polished_blackstone\": 856,\n\t\t\"minecraft:dark_oak_planks\": 19,\n\t\t\"minecraft:infested_cobblestone\": 300,\n\t\t\"minecraft:lime_concrete_powder\": 667,\n\t\t\"minecraft:birch_trapdoor\": 286,\n\t\t\"minecraft:bookshelf\": 167,\n\t\t\"minecraft:wither_skeleton_skull\": 396,\n\t\t\"minecraft:cyan_glazed_terracotta\": 639,\n\t\t\"minecraft:dark_oak_wall_sign\": 205,\n\t\t\"minecraft:pink_candle\": 876,\n\t\t\"minecraft:repeating_command_block\": 604,\n\t\t\"minecraft:gray_shulker_box\": 621,\n\t\t\"minecraft:void_air\": 729,\n\t\t\"minecraft:waxed_exposed_cut_copper_stairs\": 968,\n\t\t\"minecraft:white_wall_banner\": 519,\n\t\t\"minecraft:birch_sign\": 188,\n\t\t\"minecraft:black_stained_glass\": 283,\n\t\t\"minecraft:end_stone_brick_slab\": 751,\n\t\t\"minecraft:stripped_dark_oak_log\": 62,\n\t\t\"minecraft:tuff_slab\": 910,\n\t\t\"minecraft:fire_coral_block\": 691,\n\t\t\"minecraft:oxidized_copper\": 935,\n\t\t\"minecraft:netherite_block\": 840,\n\t\t\"minecraft:oak_fence_gate\": 319,\n\t\t\"minecraft:red_glazed_terracotta\": 644,\n\t\t\"minecraft:rose_bush\": 499,\n\t\t\"minecraft:waxed_exposed_cut_copper\": 964,\n\t\t\"minecraft:brown_concrete_powder\": 674,\n\t\t\"minecraft:lime_glazed_terracotta\": 635,\n\t\t\"minecraft:potted_oxeye_daisy\": 375,\n\t\t\"minecraft:warped_door\": 827,\n\t\t\"minecraft:crimson_wall_hanging_sign\": 227,\n\t\t\"minecraft:deepslate\": 1023,\n\t\t\"minecraft:oak_trapdoor\": 284,\n\t\t\"minecraft:piston_head\": 129,\n\t\t\"minecraft:quartz_block\": 419,\n\t\t\"minecraft:black_candle\": 885,\n\t\t\"minecraft:dead_tube_coral_wall_fan\": 713,\n\t\t\"minecraft:mushroom_stem\": 307,\n\t\t\"minecraft:polished_diorite_stairs\": 735,\n\t\t\"minecraft:black_glazed_terracotta\": 645,\n\t\t\"minecraft:furnace\": 185,\n\t\t\"minecraft:lime_banner\": 508,\n\t\t\"minecraft:nether_brick_fence\": 326,\n\t\t\"minecraft:raw_gold_block\": 1047,\n\t\t\"minecraft:spruce_wall_hanging_sign\": 220,\n\t\t\"minecraft:blue_banner\": 514,\n\t\t\"minecraft:crafting_table\": 182,\n\t\t\"minecraft:soul_lantern\": 785,\n\t\t\"minecraft:bubble_coral_block\": 690,\n\t\t\"minecraft:cyan_concrete_powder\": 671,\n\t\t\"minecraft:deepslate_tile_stairs\": 1033,\n\t\t\"minecraft:warped_trapdoor\": 819,\n\t\t\"minecraft:cut_copper_stairs\": 953,\n\t\t\"minecraft:nether_brick_wall\": 766,\n\t\t\"minecraft:potted_cornflower\": 376,\n\t\t\"minecraft:black_terracotta\": 440,\n\t\t\"minecraft:bricks\": 165,\n\t\t\"minecraft:sand\": 34,\n\t\t\"minecraft:spruce_leaves\": 83,\n\t\t\"minecraft:waxed_chiseled_copper\": 949,\n\t\t\"minecraft:blackstone\": 849,\n\t\t\"minecraft:quartz_bricks\": 868,\n\t\t\"minecraft:stripped_mangrove_log\": 64,\n\t\t\"minecraft:warped_planks\": 811,\n\t\t\"minecraft:oak_wood\": 66,\n\t\t\"minecraft:potted_torchflower\": 356,\n\t\t\"minecraft:nether_sprouts\": 797,\n\t\t\"minecraft:spruce_wall_sign\": 200,\n\t\t\"minecraft:chiseled_copper\": 945,\n\t\t\"minecraft:cocoa\": 340,\n\t\t\"minecraft:powered_rail\": 119,\n\t\t\"minecraft:stone_brick_stairs\": 321,\n\t\t\"minecraft:magenta_banner\": 505,\n\t\t\"minecraft:warped_wall_sign\": 831,\n\t\t\"minecraft:redstone_wire\": 178,\n\t\t\"minecraft:bamboo_wall_hanging_sign\": 229,\n\t\t\"minecraft:powder_snow_cauldron\": 334,\n\t\t\"minecraft:red_terracotta\": 439,\n\t\t\"minecraft:sculk_sensor\": 926,\n\t\t\"minecraft:brain_coral_wall_fan\": 719,\n\t\t\"minecraft:orange_terracotta\": 426,\n\t\t\"minecraft:stripped_warped_hyphae\": 792,\n\t\t\"minecraft:mossy_cobblestone_stairs\": 736,\n\t\t\"minecraft:polished_blackstone_stairs\": 861,\n\t\t\"minecraft:end_portal_frame\": 336,\n\t\t\"minecraft:jungle_hanging_sign\": 213,\n\t\t\"minecraft:orange_tulip\": 154,\n\t\t\"minecraft:pink_shulker_box\": 620,\n\t\t\"minecraft:prismarine\": 467,\n\t\t\"minecraft:reinforced_deepslate\": 1054,\n\t\t\"minecraft:white_carpet\": 478,\n\t\t\"minecraft:blue_stained_glass\": 279,\n\t\t\"minecraft:brown_mushroom_block\": 305,\n\t\t\"minecraft:dragon_wall_head\": 405,\n\t\t\"minecraft:iron_bars\": 308,\n\t\t\"minecraft:polished_andesite_stairs\": 744,\n\t\t\"minecraft:red_stained_glass_pane\": 455,\n\t\t\"minecraft:waxed_weathered_cut_copper_stairs\": 967,\n\t\t\"minecraft:ancient_debris\": 841,\n\t\t\"minecraft:bamboo_pressure_plate\": 241,\n\t\t\"minecraft:red_concrete\": 660,\n\t\t\"minecraft:warped_sign\": 829,\n\t\t\"minecraft:wither_rose\": 159,\n\t\t\"minecraft:dark_oak_slab\": 545,\n\t\t\"minecraft:infested_mossy_stone_bricks\": 302,\n\t\t\"minecraft:stone_slab\": 549,\n\t\t\"minecraft:stripped_jungle_log\": 59,\n\t\t\"minecraft:stripped_oak_log\": 63,\n\t\t\"minecraft:polished_andesite\": 7,\n\t\t\"minecraft:slime_block\": 463,\n\t\t\"minecraft:red_wool\": 144,\n\t\t\"minecraft:warped_fence_gate\": 821,\n\t\t\"minecraft:weathered_copper_door\": 977,\n\t\t\"minecraft:lime_shulker_box\": 619,\n\t\t\"minecraft:potted_mangrove_propagule\": 364,\n\t\t\"minecraft:gray_candle\": 877,\n\t\t\"minecraft:infested_stone_bricks\": 301,\n\t\t\"minecraft:waxed_cut_copper_slab\": 973,\n\t\t\"minecraft:acacia_button\": 389,\n\t\t\"minecraft:grass_block\": 8,\n\t\t\"minecraft:potted_crimson_fungus\": 844,\n\t\t\"minecraft:white_tulip\": 155,\n\t\t\"minecraft:bamboo_fence\": 582,\n\t\t\"minecraft:cyan_wool\": 139,\n\t\t\"minecraft:pink_stained_glass_pane\": 447,\n\t\t\"minecraft:pumpkin_stem\": 315,\n\t\t\"minecraft:small_amethyst_bud\": 908,\n\t\t\"minecraft:tuff_brick_stairs\": 920,\n\t\t\"minecraft:acacia_wall_sign\": 202,\n\t\t\"minecraft:light_blue_candle\": 873,\n\t\t\"minecraft:horn_coral_wall_fan\": 722,\n\t\t\"minecraft:stripped_mangrove_wood\": 81,\n\t\t\"minecraft:tuff_brick_slab\": 919,\n\t\t\"minecraft:brown_wall_banner\": 531,\n\t\t\"minecraft:lime_carpet\": 483,\n\t\t\"minecraft:white_stained_glass\": 268,\n\t\t\"minecraft:polished_blackstone_brick_wall\": 859,\n\t\t\"minecraft:yellow_terracotta\": 429,\n\t\t\"minecraft:azure_bluet\": 152,\n\t\t\"minecraft:copper_ore\": 936,\n\t\t\"minecraft:pink_wall_banner\": 525,\n\t\t\"minecraft:exposed_copper_door\": 975,\n\t\t\"minecraft:gray_wall_banner\": 526,\n\t\t\"minecraft:iron_block\": 164,\n\t\t\"minecraft:tuff\": 909,\n\t\t\"minecraft:acacia_wall_hanging_sign\": 222,\n\t\t\"minecraft:crimson_hyphae\": 800,\n\t\t\"minecraft:birch_log\": 48,\n\t\t\"minecraft:glass_pane\": 310,\n\t\t\"minecraft:waxed_exposed_copper_trapdoor\": 987,\n\t\t\"minecraft:amethyst_cluster\": 905,\n\t\t\"minecraft:cherry_door\": 587,\n\t\t\"minecraft:cracked_polished_blackstone_bricks\": 855,\n\t\t\"minecraft:dark_oak_sign\": 192,\n\t\t\"minecraft:jungle_fence\": 577,\n\t\t\"minecraft:mangrove_roots\": 54,\n\t\t\"minecraft:mangrove_slab\": 546,\n\t\t\"minecraft:red_shulker_box\": 628,\n\t\t\"minecraft:allium\": 151,\n\t\t\"minecraft:cherry_pressure_plate\": 238,\n\t\t\"minecraft:yellow_stained_glass_pane\": 445,\n\t\t\"minecraft:waxed_oxidized_copper_grate\": 997,\n\t\t\"minecraft:weeping_vines_plant\": 806,\n\t\t\"minecraft:oak_wall_sign\": 199,\n\t\t\"minecraft:polished_blackstone_brick_stairs\": 858,\n\t\t\"minecraft:potted_birch_sapling\": 359,\n\t\t\"minecraft:prismarine_wall\": 760,\n\t\t\"minecraft:waxed_exposed_chiseled_copper\": 948,\n\t\t\"minecraft:bamboo_fence_gate\": 574,\n\t\t\"minecraft:chiseled_nether_bricks\": 866,\n\t\t\"minecraft:mud\": 1022,\n\t\t\"minecraft:oak_hanging_sign\": 208,\n\t\t\"minecraft:potted_blue_orchid\": 368,\n\t\t\"minecraft:light\": 465,\n\t\t\"minecraft:magenta_bed\": 105,\n\t\t\"minecraft:fire\": 173,\n\t\t\"minecraft:gray_stained_glass\": 275,\n\t\t\"minecraft:horn_coral_fan\": 712,\n\t\t\"minecraft:moss_carpet\": 1014,\n\t\t\"minecraft:black_concrete\": 661,\n\t\t\"minecraft:deepslate_copper_ore\": 937,\n\t\t\"minecraft:potted_azure_bluet\": 370,\n\t\t\"minecraft:raw_iron_block\": 1045,\n\t\t\"minecraft:red_stained_glass\": 282,\n\t\t\"minecraft:yellow_bed\": 107,\n\t\t\"minecraft:cherry_sapling\": 28,\n\t\t\"minecraft:dirt\": 9,\n\t\t\"minecraft:mossy_stone_brick_stairs\": 734,\n\t\t\"minecraft:polished_diorite\": 5,\n\t\t\"minecraft:white_terracotta\": 425,\n\t\t\"minecraft:blue_bed\": 114,\n\t\t\"minecraft:melon\": 312,\n\t\t\"minecraft:lime_stained_glass\": 273,\n\t\t\"minecraft:pink_banner\": 509,\n\t\t\"minecraft:acacia_planks\": 17,\n\t\t\"minecraft:light_weighted_pressure_plate\": 412,\n\t\t\"minecraft:damaged_anvil\": 410,\n\t\t\"minecraft:brick_wall\": 759,\n\t\t\"minecraft:cherry_fence\": 579,\n\t\t\"minecraft:light_gray_bed\": 111,\n\t\t\"minecraft:composter\": 834,\n\t\t\"minecraft:exposed_copper\": 933,\n\t\t\"minecraft:polished_diorite_slab\": 749,\n\t\t\"minecraft:red_nether_brick_slab\": 756,\n\t\t\"minecraft:weathered_copper_bulb\": 1000,\n\t\t\"minecraft:netherrack\": 255,\n\t\t\"minecraft:orange_banner\": 504,\n\t\t\"minecraft:shulker_box\": 613,\n\t\t\"minecraft:suspicious_sand\": 35,\n\t\t\"minecraft:blue_stained_glass_pane\": 452,\n\t\t\"minecraft:brewing_stand\": 330,\n\t\t\"minecraft:green_bed\": 116,\n\t\t\"minecraft:jungle_trapdoor\": 287,\n\t\t\"minecraft:waxed_oxidized_copper\": 961,\n\t\t\"minecraft:black_wool\": 145,\n\t\t\"minecraft:dead_brain_coral_wall_fan\": 714,\n\t\t\"minecraft:light_gray_stained_glass_pane\": 449,\n\t\t\"minecraft:candle_cake\": 886,\n\t\t\"minecraft:emerald_block\": 347,\n\t\t\"minecraft:black_banner\": 518,\n\t\t\"minecraft:potted_dead_bush\": 381,\n\t\t\"minecraft:loom\": 773,\n\t\t\"minecraft:potted_warped_fungus\": 845,\n\t\t\"minecraft:brown_stained_glass\": 280,\n\t\t\"minecraft:brown_terracotta\": 437,\n\t\t\"minecraft:brown_glazed_terracotta\": 642,\n\t\t\"minecraft:cyan_shulker_box\": 623,\n\t\t\"minecraft:deepslate_coal_ore\": 44,\n\t\t\"minecraft:mossy_stone_bricks\": 294,\n\t\t\"minecraft:prismarine_brick_slab\": 474,\n\t\t\"minecraft:soul_campfire\": 787,\n\t\t\"minecraft:acacia_slab\": 543,\n\t\t\"minecraft:acacia_stairs\": 457,\n\t\t\"minecraft:lime_bed\": 108,\n\t\t\"minecraft:nether_quartz_ore\": 417,\n\t\t\"minecraft:note_block\": 102,\n\t\t\"minecraft:white_wool\": 130,\n\t\t\"minecraft:yellow_concrete_powder\": 666,\n\t\t\"minecraft:yellow_glazed_terracotta\": 634,\n\t\t\"minecraft:candle\": 869,\n\t\t\"minecraft:cherry_leaves\": 87,\n\t\t\"minecraft:cyan_wall_banner\": 528,\n\t\t\"minecraft:short_grass\": 123,\n\t\t\"minecraft:sponge\": 92,\n\t\t\"minecraft:brown_candle\": 882,\n\t\t\"minecraft:comparator\": 414,\n\t\t\"minecraft:scaffolding\": 772,\n\t\t\"minecraft:player_head\": 400,\n\t\t\"minecraft:polished_blackstone_pressure_plate\": 863,\n\t\t\"minecraft:stripped_spruce_log\": 57,\n\t\t\"minecraft:warped_stem\": 789,\n\t\t\"minecraft:weathered_chiseled_copper\": 943,\n\t\t\"minecraft:cyan_terracotta\": 434,\n\t\t\"minecraft:red_tulip\": 153,\n\t\t\"minecraft:light_gray_wool\": 138,\n\t\t\"minecraft:pearlescent_froglight\": 1052,\n\t\t\"minecraft:potted_dark_oak_sapling\": 363,\n\t\t\"minecraft:calibrated_sculk_sensor\": 927,\n\t\t\"minecraft:dark_oak_log\": 52,\n\t\t\"minecraft:coal_ore\": 43,\n\t\t\"minecraft:purple_terracotta\": 435,\n\t\t\"minecraft:waxed_copper_door\": 978,\n\t\t\"minecraft:waxed_weathered_copper_grate\": 996,\n\t\t\"minecraft:bamboo\": 727,\n\t\t\"minecraft:blackstone_stairs\": 850,\n\t\t\"minecraft:infested_cracked_stone_bricks\": 303,\n\t\t\"minecraft:oak_button\": 385,\n\t\t\"minecraft:birch_sapling\": 25,\n\t\t\"minecraft:cave_vines_plant\": 1010,\n\t\t\"minecraft:stripped_warped_stem\": 790,\n\t\t\"minecraft:iron_door\": 232,\n\t\t\"minecraft:mangrove_fence\": 581,\n\t\t\"minecraft:moss_block\": 1016,\n\t\t\"minecraft:skeleton_wall_skull\": 395,\n\t\t\"minecraft:bamboo_block\": 56,\n\t\t\"minecraft:green_candle\": 883,\n\t\t\"minecraft:azalea\": 1012,\n\t\t\"minecraft:jungle_planks\": 16,\n\t\t\"minecraft:lilac\": 498,\n\t\t\"minecraft:polished_granite_slab\": 746,\n\t\t\"minecraft:potted_white_tulip\": 373,\n\t\t\"minecraft:purple_banner\": 513,\n\t\t\"minecraft:weathered_copper_grate\": 992,\n\t\t\"minecraft:bamboo_mosaic_stairs\": 462,\n\t\t\"minecraft:heavy_core\": 1059,\n\t\t\"minecraft:mangrove_button\": 392,\n\t\t\"minecraft:pink_candle_cake\": 893,\n\t\t\"minecraft:respawn_anchor\": 843,\n\t\t\"minecraft:soul_sand\": 256,\n\t\t\"minecraft:yellow_candle\": 874,\n\t\t\"minecraft:enchanting_table\": 329,\n\t\t\"minecraft:light_gray_terracotta\": 433,\n\t\t\"minecraft:brown_wool\": 142,\n\t\t\"minecraft:cherry_fence_gate\": 571,\n\t\t\"minecraft:crimson_slab\": 812,\n\t\t\"minecraft:waxed_copper_trapdoor\": 986,\n\t\t\"minecraft:white_candle_cake\": 887,\n\t\t\"minecraft:acacia_hanging_sign\": 211,\n\t\t\"minecraft:andesite_slab\": 755,\n\t\t\"minecraft:potted_jungle_sapling\": 360,\n\t\t\"minecraft:stripped_cherry_wood\": 79,\n\t\t\"minecraft:green_wool\": 143,\n\t\t\"minecraft:infested_stone\": 299,\n\t\t\"minecraft:acacia_pressure_plate\": 237,\n\t\t\"minecraft:cartography_table\": 777,\n\t\t\"minecraft:fire_coral_fan\": 711,\n\t\t\"minecraft:chain\": 309,\n\t\t\"minecraft:cherry_stairs\": 458,\n\t\t\"minecraft:campfire\": 786,\n\t\t\"minecraft:white_banner\": 503,\n\t\t\"minecraft:birch_slab\": 541,\n\t\t\"minecraft:bubble_coral_wall_fan\": 720,\n\t\t\"minecraft:light_blue_carpet\": 481,\n\t\t\"minecraft:observer\": 612,\n\t\t\"minecraft:cherry_wall_hanging_sign\": 223,\n\t\t\"minecraft:deepslate_diamond_ore\": 180,\n\t\t\"minecraft:green_stained_glass\": 281,\n\t\t\"minecraft:hay_block\": 477,\n\t\t\"minecraft:jungle_door\": 585,\n\t\t\"minecraft:jungle_sign\": 191,\n\t\t\"minecraft:potted_brown_mushroom\": 380,\n\t\t\"minecraft:calcite\": 923,\n\t\t\"minecraft:deepslate_brick_wall\": 1039,\n\t\t\"minecraft:stone_button\": 246,\n\t\t\"minecraft:purpur_pillar\": 595,\n\t\t\"minecraft:soul_soil\": 257,\n\t\t\"minecraft:smooth_red_sandstone_stairs\": 733,\n\t\t\"minecraft:white_bed\": 103,\n\t\t\"minecraft:glow_lichen\": 318,\n\t\t\"minecraft:polished_blackstone\": 853,\n\t\t\"minecraft:daylight_detector\": 415,\n\t\t\"minecraft:mossy_cobblestone_wall\": 354,\n\t\t\"minecraft:red_nether_bricks\": 609,\n\t\t\"minecraft:smooth_sandstone\": 564,\n\t\t\"minecraft:stripped_dark_oak_wood\": 80,\n\t\t\"minecraft:bamboo_sign\": 194,\n\t\t\"minecraft:cut_copper_slab\": 957,\n\t\t\"minecraft:exposed_copper_grate\": 991,\n\t\t\"minecraft:sculk\": 928,\n\t\t\"minecraft:black_bed\": 118,\n\t\t\"minecraft:crimson_pressure_plate\": 814,\n\t\t\"minecraft:deepslate_tile_wall\": 1035,\n\t\t\"minecraft:hanging_roots\": 1020,\n\t\t\"minecraft:polished_tuff_wall\": 916,\n\t\t\"minecraft:barrel\": 774,\n\t\t\"minecraft:cyan_stained_glass_pane\": 450,\n\t\t\"minecraft:mangrove_log\": 53,\n\t\t\"minecraft:potatoes\": 384,\n\t\t\"minecraft:prismarine_bricks\": 468,\n\t\t\"minecraft:cauldron\": 331,\n\t\t\"minecraft:grindstone\": 779,\n\t\t\"minecraft:mossy_cobblestone\": 169,\n\t\t\"minecraft:nether_wart_block\": 608,\n\t\t\"minecraft:twisting_vines\": 807,\n\t\t\"minecraft:blue_carpet\": 489,\n\t\t\"minecraft:jukebox\": 253,\n\t\t\"minecraft:waxed_exposed_copper_door\": 979,\n\t\t\"minecraft:waxed_weathered_chiseled_copper\": 947,\n\t\t\"minecraft:jungle_fence_gate\": 569,\n\t\t\"minecraft:nether_brick_slab\": 558,\n\t\t\"minecraft:smooth_basalt\": 1044,\n\t\t\"minecraft:acacia_sign\": 189,\n\t\t\"minecraft:small_dripleaf\": 1019,\n\t\t\"minecraft:exposed_cut_copper\": 940,\n\t\t\"minecraft:flower_pot\": 355,\n\t\t\"minecraft:waxed_oxidized_cut_copper\": 962,\n\t\t\"minecraft:chain_command_block\": 605,\n\t\t\"minecraft:cut_red_sandstone_slab\": 561,\n\t\t\"minecraft:light_gray_banner\": 511,\n\t\t\"minecraft:coal_block\": 495,\n\t\t\"minecraft:light_blue_stained_glass\": 271,\n\t\t\"minecraft:snow\": 247,\n\t\t\"minecraft:soul_fire\": 174,\n\t\t\"minecraft:deepslate_brick_stairs\": 1037,\n\t\t\"minecraft:red_concrete_powder\": 676,\n\t\t\"minecraft:magenta_glazed_terracotta\": 632,\n\t\t\"minecraft:polished_granite_stairs\": 732,\n\t\t\"minecraft:dried_kelp_block\": 680,\n\t\t\"minecraft:farmland\": 184,\n\t\t\"minecraft:hopper\": 418,\n\t\t\"minecraft:orange_wall_banner\": 520,\n\t\t\"minecraft:smooth_stone_slab\": 550,\n\t\t\"minecraft:tuff_brick_wall\": 921,\n\t\t\"minecraft:gray_stained_glass_pane\": 448,\n\t\t\"minecraft:magenta_concrete_powder\": 664,\n\t\t\"minecraft:jungle_leaves\": 85,\n\t\t\"minecraft:light_blue_concrete\": 649,\n\t\t\"minecraft:light_blue_wall_banner\": 522,\n\t\t\"minecraft:mangrove_fence_gate\": 573,\n\t\t\"minecraft:potted_spruce_sapling\": 358,\n\t\t\"minecraft:diorite_stairs\": 745,\n\t\t\"minecraft:diorite_wall\": 771,\n\t\t\"minecraft:cherry_wood\": 71,\n\t\t\"minecraft:crafter\": 1056,\n\t\t\"minecraft:dark_oak_pressure_plate\": 239,\n\t\t\"minecraft:purple_concrete\": 656,\n\t\t\"minecraft:carved_pumpkin\": 264,\n\t\t\"minecraft:cherry_hanging_sign\": 212,\n\t\t\"minecraft:nether_gold_ore\": 45,\n\t\t\"minecraft:orange_bed\": 104,\n\t\t\"minecraft:spruce_sign\": 187,\n\t\t\"minecraft:terracotta\": 494,\n\t\t\"minecraft:gilded_blackstone\": 860,\n\t\t\"minecraft:gray_wool\": 137,\n\t\t\"minecraft:end_rod\": 591,\n\t\t\"minecraft:lapis_block\": 97,\n\t\t\"minecraft:spruce_trapdoor\": 285,\n\t\t\"minecraft:blue_orchid\": 150,\n\t\t\"minecraft:dark_prismarine_slab\": 475,\n\t\t\"minecraft:waxed_oxidized_chiseled_copper\": 946,\n\t\t\"minecraft:medium_amethyst_bud\": 907,\n\t\t\"minecraft:stripped_acacia_log\": 60,\n\t\t\"minecraft:horn_coral\": 702,\n\t\t\"minecraft:red_sandstone_wall\": 761,\n\t\t\"minecraft:birch_planks\": 15,\n\t\t\"minecraft:chiseled_tuff\": 917,\n\t\t\"minecraft:polished_deepslate_stairs\": 1029,\n\t\t\"minecraft:stone_bricks\": 293,\n\t\t\"minecraft:beacon\": 352,\n\t\t\"minecraft:big_dripleaf\": 1017,\n\t\t\"minecraft:light_blue_concrete_powder\": 665,\n\t\t\"minecraft:light_gray_shulker_box\": 622,\n\t\t\"minecraft:pink_bed\": 109,\n\t\t\"minecraft:red_sandstone\": 535,\n\t\t\"minecraft:sculk_catalyst\": 930,\n\t\t\"minecraft:stripped_bamboo_block\": 65,\n\t\t\"minecraft:lava\": 33,\n\t\t\"minecraft:oxidized_copper_grate\": 993,\n\t\t\"minecraft:orange_stained_glass\": 269,\n\t\t\"minecraft:peony\": 500,\n\t\t\"minecraft:red_mushroom\": 162,\n\t\t\"minecraft:rooted_dirt\": 1021,\n\t\t\"minecraft:bamboo_hanging_sign\": 218,\n\t\t\"minecraft:blue_wall_banner\": 530,\n\t\t\"minecraft:red_banner\": 517,\n\t\t\"minecraft:weathered_cut_copper\": 939,\n\t\t\"minecraft:black_candle_cake\": 902,\n\t\t\"minecraft:iron_ore\": 41,\n\t\t\"minecraft:redstone_ore\": 242,\n\t\t\"minecraft:water\": 32,\n\t\t\"minecraft:glass\": 94,\n\t\t\"minecraft:green_concrete_powder\": 675,\n\t\t\"minecraft:pink_glazed_terracotta\": 636,\n\t\t\"minecraft:stone_brick_slab\": 556,\n\t\t\"minecraft:bone_block\": 610,\n\t\t\"minecraft:dead_bubble_coral_fan\": 705,\n\t\t\"minecraft:spruce_slab\": 540,\n\t\t\"minecraft:oak_sign\": 186,\n\t\t\"minecraft:quartz_slab\": 559,\n\t\t\"minecraft:oxidized_cut_copper_stairs\": 950,\n\t\t\"minecraft:sandstone\": 99,\n\t\t\"minecraft:warped_pressure_plate\": 815,\n\t\t\"minecraft:frosted_ice\": 606,\n\t\t\"minecraft:light_blue_shulker_box\": 617,\n\t\t\"minecraft:oak_sapling\": 23,\n\t\t\"minecraft:piglin_wall_head\": 407,\n\t\t\"minecraft:smooth_quartz\": 565,\n\t\t\"minecraft:bamboo_slab\": 547,\n\t\t\"minecraft:beehive\": 837,\n\t\t\"minecraft:end_gateway\": 603,\n\t\t\"minecraft:spruce_button\": 386,\n\t\t\"minecraft:mangrove_trapdoor\": 291,\n\t\t\"minecraft:bamboo_mosaic\": 22,\n\t\t\"minecraft:lectern\": 780,\n\t\t\"minecraft:red_carpet\": 492,\n\t\t\"minecraft:stripped_cherry_log\": 61,\n\t\t\"minecraft:dark_oak_sapling\": 29,\n\t\t\"minecraft:jungle_wall_sign\": 204,\n\t\t\"minecraft:crimson_wall_sign\": 830,\n\t\t\"minecraft:azalea_leaves\": 90,\n\t\t\"minecraft:chiseled_bookshelf\": 168,\n\t\t\"minecraft:stripped_birch_wood\": 76,\n\t\t\"minecraft:waxed_exposed_copper_grate\": 995,\n\t\t\"minecraft:blue_glazed_terracotta\": 641,\n\t\t\"minecraft:crimson_sign\": 828,\n\t\t\"minecraft:warped_nylium\": 793,\n\t\t\"minecraft:chipped_anvil\": 409,\n\t\t\"minecraft:melon_stem\": 316,\n\t\t\"minecraft:dirt_path\": 602,\n\t\t\"minecraft:fire_coral\": 701,\n\t\t\"minecraft:granite\": 2,\n\t\t\"minecraft:waxed_copper_block\": 958,\n\t\t\"minecraft:dark_oak_leaves\": 88,\n\t\t\"minecraft:gold_block\": 163,\n\t\t\"minecraft:magenta_wool\": 132,\n\t\t\"minecraft:ochre_froglight\": 1050,\n\t\t\"minecraft:orange_stained_glass_pane\": 442,\n\t\t\"minecraft:spruce_door\": 583,\n\t\t\"minecraft:tripwire\": 346,\n\t\t\"minecraft:wither_skeleton_wall_skull\": 397,\n\t\t\"minecraft:acacia_door\": 586,\n\t\t\"minecraft:chiseled_deepslate\": 1040,\n\t\t\"minecraft:purple_candle\": 880,\n\t\t\"minecraft:red_mushroom_block\": 306,\n\t\t\"minecraft:stone\": 1,\n\t\t\"minecraft:cut_copper\": 941,\n\t\t\"minecraft:polished_blackstone_wall\": 865,\n\t\t\"minecraft:blue_candle_cake\": 898,\n\t\t\"minecraft:red_bed\": 117,\n\t\t\"minecraft:orange_concrete\": 647,\n\t\t\"minecraft:pink_stained_glass\": 274,\n\t\t\"minecraft:polished_deepslate\": 1028,\n\t\t\"minecraft:redstone_wall_torch\": 245,\n\t\t\"minecraft:lava_cauldron\": 333,\n\t\t\"minecraft:light_blue_banner\": 506,\n\t\t\"minecraft:light_gray_candle_cake\": 895,\n\t\t\"minecraft:cherry_log\": 51,\n\t\t\"minecraft:end_portal\": 335,\n\t\t\"minecraft:dead_fire_coral_wall_fan\": 716,\n\t\t\"minecraft:polished_blackstone_brick_slab\": 857,\n\t\t\"minecraft:magenta_candle_cake\": 889,\n\t\t\"minecraft:oak_leaves\": 82,\n\t\t\"minecraft:repeater\": 267,\n\t\t\"minecraft:structure_void\": 611,\n\t\t\"minecraft:warped_slab\": 813,\n\t\t\"minecraft:copper_trapdoor\": 982,\n\t\t\"minecraft:dead_horn_coral\": 697,\n\t\t\"minecraft:tube_coral\": 698,\n\t\t\"minecraft:prismarine_slab\": 473,\n\t\t\"minecraft:purple_concrete_powder\": 672,\n\t\t\"minecraft:jungle_pressure_plate\": 236,\n\t\t\"minecraft:oak_door\": 195,\n\t\t\"minecraft:pitcher_plant\": 600,\n\t\t\"minecraft:stonecutter\": 782,\n\t\t\"minecraft:basalt\": 258,\n\t\t\"minecraft:dark_oak_fence\": 580,\n\t\t\"minecraft:oxidized_cut_copper_slab\": 954,\n\t\t\"minecraft:pointed_dripstone\": 1007,\n\t\t\"minecraft:sugar_cane\": 252,\n\t\t\"minecraft:bamboo_wall_sign\": 207,\n\t\t\"minecraft:jungle_button\": 388,\n\t\t\"minecraft:lime_terracotta\": 430,\n\t\t\"minecraft:bamboo_mosaic_slab\": 548,\n\t\t\"minecraft:gray_terracotta\": 432,\n\t\t\"minecraft:diorite\": 4,\n\t\t\"minecraft:gray_glazed_terracotta\": 637,\n\t\t\"minecraft:potted_oak_sapling\": 357,\n\t\t\"minecraft:white_glazed_terracotta\": 630,\n\t\t\"minecraft:andesite_wall\": 767,\n\t\t\"minecraft:crimson_fence\": 816,\n\t\t\"minecraft:oxeye_daisy\": 157,\n\t\t\"minecraft:blue_concrete\": 657,\n\t\t\"minecraft:orange_wool\": 131,\n\t\t\"minecraft:mud_brick_wall\": 765,\n\t\t\"minecraft:wheat\": 183,\n\t\t\"minecraft:decorated_pot\": 1055,\n\t\t\"minecraft:deepslate_bricks\": 1036,\n\t\t\"minecraft:potted_red_tulip\": 371,\n\t\t\"minecraft:purple_bed\": 113,\n\t\t\"minecraft:birch_wood\": 68,\n\t\t\"minecraft:stripped_oak_wood\": 74,\n\t\t\"minecraft:copper_grate\": 990,\n\t\t\"minecraft:jack_o_lantern\": 265,\n\t\t\"minecraft:potted_acacia_sapling\": 361,\n\t\t\"minecraft:birch_fence\": 576,\n\t\t\"minecraft:birch_wall_sign\": 201,\n\t\t\"minecraft:dandelion\": 147,\n\t\t\"minecraft:light_gray_concrete_powder\": 670,\n\t\t\"minecraft:acacia_sapling\": 27,\n\t\t\"minecraft:crying_obsidian\": 842,\n\t\t\"minecraft:red_candle_cake\": 901,\n\t\t\"minecraft:exposed_copper_bulb\": 999,\n\t\t\"minecraft:granite_wall\": 763,\n\t\t\"minecraft:bamboo_door\": 590,\n\t\t\"minecraft:red_nether_brick_stairs\": 743,\n\t\t\"minecraft:crimson_trapdoor\": 818,\n\t\t\"minecraft:prismarine_stairs\": 470,\n\t\t\"minecraft:pink_carpet\": 484,\n\t\t\"minecraft:potted_cherry_sapling\": 362,\n\t\t\"minecraft:dead_horn_coral_fan\": 707,\n\t\t\"minecraft:oxidized_copper_bulb\": 1001,\n\t\t\"minecraft:anvil\": 408,\n\t\t\"minecraft:orange_concrete_powder\": 663,\n\t\t\"minecraft:lime_stained_glass_pane\": 446,\n\t\t\"minecraft:mangrove_propagule\": 30,\n\t\t\"minecraft:chiseled_tuff_bricks\": 922,\n\t\t\"minecraft:crimson_planks\": 810,\n\t\t\"minecraft:oxidized_cut_copper\": 938,\n\t\t\"minecraft:bedrock\": 31,\n\t\t\"minecraft:carrots\": 383,\n\t\t\"minecraft:creeper_wall_head\": 403,\n\t\t\"minecraft:cut_red_sandstone\": 537,\n\t\t\"minecraft:waxed_oxidized_cut_copper_slab\": 970,\n\t\t\"minecraft:wet_sponge\": 93,\n\t\t\"minecraft:green_concrete\": 659,\n\t\t\"minecraft:suspicious_gravel\": 38,\n\t\t\"minecraft:chiseled_stone_bricks\": 296,\n\t\t\"minecraft:cyan_candle_cake\": 896,\n\t\t\"minecraft:fletching_table\": 778,\n\t\t\"minecraft:birch_leaves\": 84,\n\t\t\"minecraft:chest\": 177,\n\t\t\"minecraft:potted_warped_roots\": 847,\n\t\t\"minecraft:waxed_weathered_cut_copper_slab\": 971,\n\t\t\"minecraft:cracked_stone_bricks\": 295,\n\t\t\"minecraft:infested_chiseled_stone_bricks\": 304,\n\t\t\"minecraft:piglin_head\": 406,\n\t\t\"minecraft:white_shulker_box\": 614,\n\t\t\"minecraft:chiseled_sandstone\": 100,\n\t\t\"minecraft:copper_bulb\": 998,\n\t\t\"minecraft:mycelium\": 323,\n\t\t\"minecraft:redstone_block\": 416,\n\t\t\"minecraft:cobblestone_wall\": 353,\n\t\t\"minecraft:dead_tube_coral_fan\": 703,\n\t\t\"minecraft:spruce_pressure_plate\": 234,\n\t\t\"minecraft:acacia_trapdoor\": 288,\n\t\t\"minecraft:brain_coral_block\": 689,\n\t\t\"minecraft:lodestone\": 848,\n\t\t\"minecraft:oak_slab\": 539,\n\t\t\"minecraft:smooth_quartz_stairs\": 740,\n\t\t\"minecraft:cobbled_deepslate\": 1024,\n\t\t\"minecraft:light_blue_terracotta\": 428,\n\t\t\"minecraft:stone_brick_wall\": 764,\n\t\t\"minecraft:target\": 835,\n\t\t\"minecraft:white_concrete\": 646,\n\t\t\"minecraft:oak_planks\": 13,\n\t\t\"minecraft:pink_wool\": 136,\n\t\t\"minecraft:polished_blackstone_bricks\": 854,\n\t\t\"minecraft:potted_fern\": 365,\n\t\t\"minecraft:cobbled_deepslate_stairs\": 1025,\n\t\t\"minecraft:petrified_oak_slab\": 553,\n\t\t\"minecraft:seagrass\": 126,\n\t\t\"minecraft:copper_door\": 974,\n\t\t\"minecraft:mangrove_pressure_plate\": 240,\n\t\t\"minecraft:blackstone_slab\": 852,\n\t},\n}"
  },
  {
    "path": "server/registry/block_entity_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar BlockEntityType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:banner\": 19,\n\t\t\"minecraft:campfire\": 32,\n\t\t\"minecraft:sign\": 7,\n\t\t\"minecraft:beehive\": 33,\n\t\t\"minecraft:calibrated_sculk_sensor\": 35,\n\t\t\"minecraft:jukebox\": 4,\n\t\t\"minecraft:comparator\": 18,\n\t\t\"minecraft:daylight_detector\": 16,\n\t\t\"minecraft:dispenser\": 5,\n\t\t\"minecraft:ender_chest\": 3,\n\t\t\"minecraft:sculk_shrieker\": 37,\n\t\t\"minecraft:trapped_chest\": 2,\n\t\t\"minecraft:chest\": 1,\n\t\t\"minecraft:command_block\": 22,\n\t\t\"minecraft:piston\": 10,\n\t\t\"minecraft:crafter\": 41,\n\t\t\"minecraft:hopper\": 17,\n\t\t\"minecraft:jigsaw\": 31,\n\t\t\"minecraft:lectern\": 29,\n\t\t\"minecraft:sculk_sensor\": 34,\n\t\t\"minecraft:skull\": 15,\n\t\t\"minecraft:smoker\": 27,\n\t\t\"minecraft:structure_block\": 20,\n\t\t\"minecraft:beacon\": 14,\n\t\t\"minecraft:blast_furnace\": 28,\n\t\t\"minecraft:end_portal\": 13,\n\t\t\"minecraft:mob_spawner\": 9,\n\t\t\"minecraft:trial_spawner\": 42,\n\t\t\"minecraft:barrel\": 26,\n\t\t\"minecraft:conduit\": 25,\n\t\t\"minecraft:enchanting_table\": 12,\n\t\t\"minecraft:end_gateway\": 21,\n\t\t\"minecraft:vault\": 43,\n\t\t\"minecraft:bed\": 24,\n\t\t\"minecraft:bell\": 30,\n\t\t\"minecraft:brewing_stand\": 11,\n\t\t\"minecraft:brushable_block\": 39,\n\t\t\"minecraft:chiseled_bookshelf\": 38,\n\t\t\"minecraft:decorated_pot\": 40,\n\t\t\"minecraft:dropper\": 6,\n\t\t\"minecraft:furnace\": 0,\n\t\t\"minecraft:hanging_sign\": 8,\n\t\t\"minecraft:sculk_catalyst\": 36,\n\t\t\"minecraft:shulker_box\": 23,\n\t},\n}"
  },
  {
    "path": "server/registry/block_predicate_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar BlockPredicateType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:replaceable\": 5,\n\t\t\"minecraft:true\": 11,\n\t\t\"minecraft:unobstructed\": 12,\n\t\t\"minecraft:all_of\": 9,\n\t\t\"minecraft:any_of\": 8,\n\t\t\"minecraft:has_sturdy_face\": 3,\n\t\t\"minecraft:inside_world_bounds\": 7,\n\t\t\"minecraft:matching_block_tag\": 1,\n\t\t\"minecraft:matching_blocks\": 0,\n\t\t\"minecraft:matching_fluids\": 2,\n\t\t\"minecraft:not\": 10,\n\t\t\"minecraft:solid\": 4,\n\t\t\"minecraft:would_survive\": 6,\n\t},\n}"
  },
  {
    "path": "server/registry/block_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar BlockType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:budding_amethyst\": 26,\n\t\t\"minecraft:sapling\": 164,\n\t\t\"minecraft:mangrove_propagule\": 125,\n\t\t\"minecraft:moss\": 127,\n\t\t\"minecraft:vine\": 216,\n\t\t\"minecraft:wall_skull\": 220,\n\t\t\"minecraft:amethyst\": 2,\n\t\t\"minecraft:base_coral_fan\": 12,\n\t\t\"minecraft:cartography_table\": 36,\n\t\t\"minecraft:frogspawn\": 88,\n\t\t\"minecraft:waterlogged_transparent\": 224,\n\t\t\"minecraft:weathering_copper_bulb\": 225,\n\t\t\"minecraft:crafter\": 60,\n\t\t\"minecraft:glazed_terracotta\": 92,\n\t\t\"minecraft:sculk_sensor\": 168,\n\t\t\"minecraft:wall_torch\": 221,\n\t\t\"minecraft:big_dripleaf\": 20,\n\t\t\"minecraft:leaves\": 116,\n\t\t\"minecraft:observer\": 138,\n\t\t\"minecraft:wither_rose\": 237,\n\t\t\"minecraft:chest\": 44,\n\t\t\"minecraft:redstone_ore\": 155,\n\t\t\"minecraft:redstone_wire\": 158,\n\t\t\"minecraft:rotated_pillar\": 163,\n\t\t\"minecraft:end_portal\": 78,\n\t\t\"minecraft:furnace\": 91,\n\t\t\"minecraft:powered\": 149,\n\t\t\"minecraft:wither_wall_skull\": 239,\n\t\t\"minecraft:wither_skull\": 238,\n\t\t\"minecraft:candle\": 33,\n\t\t\"minecraft:smithing_table\": 178,\n\t\t\"minecraft:stained_glass_pane\": 188,\n\t\t\"minecraft:stonecutter\": 193,\n\t\t\"minecraft:small_dripleaf\": 177,\n\t\t\"minecraft:target\": 201,\n\t\t\"minecraft:respawn_anchor\": 160,\n\t\t\"minecraft:big_dripleaf_stem\": 21,\n\t\t\"minecraft:jukebox\": 109,\n\t\t\"minecraft:liquid\": 121,\n\t\t\"minecraft:magma\": 123,\n\t\t\"minecraft:sweet_berry_bush\": 197,\n\t\t\"minecraft:wall_hanging_sign\": 218,\n\t\t\"minecraft:honey\": 100,\n\t\t\"minecraft:lava_cauldron\": 114,\n\t\t\"minecraft:powder_snow\": 148,\n\t\t\"minecraft:scaffolding\": 165,\n\t\t\"minecraft:attached_stem\": 5,\n\t\t\"minecraft:concrete_powder\": 53,\n\t\t\"minecraft:kelp_plant\": 111,\n\t\t\"minecraft:sugar_cane\": 196,\n\t\t\"minecraft:fence\": 82,\n\t\t\"minecraft:weathering_copper_stair\": 230,\n\t\t\"minecraft:cauldron\": 38,\n\t\t\"minecraft:mushroom\": 130,\n\t\t\"minecraft:slime\": 176,\n\t\t\"minecraft:enchantment_table\": 75,\n\t\t\"minecraft:piston_base\": 141,\n\t\t\"minecraft:weathering_copper_full\": 227,\n\t\t\"minecraft:chorus_flower\": 46,\n\t\t\"minecraft:composter\": 52,\n\t\t\"minecraft:daylight_detector\": 64,\n\t\t\"minecraft:dirt_path\": 68,\n\t\t\"minecraft:rooted_dirt\": 161,\n\t\t\"minecraft:cake\": 29,\n\t\t\"minecraft:flower\": 86,\n\t\t\"minecraft:nether_wart\": 135,\n\t\t\"minecraft:pointed_dripstone\": 146,\n\t\t\"minecraft:grass\": 94,\n\t\t\"minecraft:pink_petals\": 140,\n\t\t\"minecraft:transparent\": 206,\n\t\t\"minecraft:jack_o_lantern\": 107,\n\t\t\"minecraft:mangrove_leaves\": 124,\n\t\t\"minecraft:vault\": 215,\n\t\t\"minecraft:light\": 119,\n\t\t\"minecraft:soul_fire\": 183,\n\t\t\"minecraft:carrot\": 35,\n\t\t\"minecraft:smoker\": 179,\n\t\t\"minecraft:tnt\": 203,\n\t\t\"minecraft:cave_vines\": 39,\n\t\t\"minecraft:dispenser\": 69,\n\t\t\"minecraft:heavy_core\": 99,\n\t\t\"minecraft:layered_cauldron\": 115,\n\t\t\"minecraft:hopper\": 101,\n\t\t\"minecraft:weathering_copper_grate\": 228,\n\t\t\"minecraft:chain\": 42,\n\t\t\"minecraft:cocoa\": 48,\n\t\t\"minecraft:coral_wall_fan\": 59,\n\t\t\"minecraft:barrel\": 10,\n\t\t\"minecraft:chiseled_book_shelf\": 45,\n\t\t\"minecraft:loom\": 122,\n\t\t\"minecraft:turtle_egg\": 212,\n\t\t\"minecraft:chorus_plant\": 47,\n\t\t\"minecraft:end_gateway\": 77,\n\t\t\"minecraft:pressure_plate\": 151,\n\t\t\"minecraft:torchflower_crop\": 204,\n\t\t\"minecraft:amethyst_cluster\": 3,\n\t\t\"minecraft:bamboo_sapling\": 7,\n\t\t\"minecraft:button\": 27,\n\t\t\"minecraft:tall_seagrass\": 200,\n\t\t\"minecraft:sponge\": 186,\n\t\t\"minecraft:trial_spawner\": 209,\n\t\t\"minecraft:twisting_vines\": 214,\n\t\t\"minecraft:wall_banner\": 217,\n\t\t\"minecraft:azalea\": 6,\n\t\t\"minecraft:block\": 0,\n\t\t\"minecraft:lectern\": 117,\n\t\t\"minecraft:sniffer_egg\": 180,\n\t\t\"minecraft:redstone_lamp\": 154,\n\t\t\"minecraft:weathering_copper_slab\": 229,\n\t\t\"minecraft:brewing_stand\": 23,\n\t\t\"minecraft:bubble_column\": 25,\n\t\t\"minecraft:calibrated_sculk_sensor\": 30,\n\t\t\"minecraft:hay\": 98,\n\t\t\"minecraft:carved_pumpkin\": 37,\n\t\t\"minecraft:jigsaw\": 108,\n\t\t\"minecraft:slab\": 175,\n\t\t\"minecraft:trapdoor\": 207,\n\t\t\"minecraft:end_portal_frame\": 79,\n\t\t\"minecraft:iron_bars\": 106,\n\t\t\"minecraft:twisting_vines_plant\": 213,\n\t\t\"minecraft:sculk_catalyst\": 166,\n\t\t\"minecraft:bell\": 19,\n\t\t\"minecraft:drop_experience\": 73,\n\t\t\"minecraft:piston_head\": 142,\n\t\t\"minecraft:repeater\": 159,\n\t\t\"minecraft:decorated_pot\": 66,\n\t\t\"minecraft:nylium\": 137,\n\t\t\"minecraft:roots\": 162,\n\t\t\"minecraft:trip_wire_hook\": 210,\n\t\t\"minecraft:tall_flower\": 198,\n\t\t\"minecraft:weeping_vines_plant\": 233,\n\t\t\"minecraft:campfire\": 31,\n\t\t\"minecraft:coral_plant\": 58,\n\t\t\"minecraft:detector_rail\": 67,\n\t\t\"minecraft:spore_blossom\": 187,\n\t\t\"minecraft:piglinwallskull\": 139,\n\t\t\"minecraft:player_head\": 144,\n\t\t\"minecraft:powered_rail\": 150,\n\t\t\"minecraft:trapped_chest\": 208,\n\t\t\"minecraft:weeping_vines\": 234,\n\t\t\"minecraft:candle_cake\": 32,\n\t\t\"minecraft:infested\": 104,\n\t\t\"minecraft:redstone_wall_torch\": 157,\n\t\t\"minecraft:sculk\": 167,\n\t\t\"minecraft:snowy_dirt\": 182,\n\t\t\"minecraft:spawner\": 185,\n\t\t\"minecraft:structure\": 194,\n\t\t\"minecraft:tall_grass\": 199,\n\t\t\"minecraft:banner\": 9,\n\t\t\"minecraft:coral\": 56,\n\t\t\"minecraft:farm\": 81,\n\t\t\"minecraft:kelp\": 110,\n\t\t\"minecraft:weighted_pressure_plate\": 235,\n\t\t\"minecraft:netherrack\": 133,\n\t\t\"minecraft:frosted_ice\": 89,\n\t\t\"minecraft:tinted_glass\": 202,\n\t\t\"minecraft:weathering_copper_door\": 226,\n\t\t\"minecraft:carpet\": 34,\n\t\t\"minecraft:dropper\": 74,\n\t\t\"minecraft:end_rod\": 80,\n\t\t\"minecraft:nether_sprouts\": 134,\n\t\t\"minecraft:mud\": 129,\n\t\t\"minecraft:player_wall_head\": 145,\n\t\t\"minecraft:sculk_shrieker\": 169,\n\t\t\"minecraft:waterlily\": 223,\n\t\t\"minecraft:beetroot\": 18,\n\t\t\"minecraft:double_plant\": 71,\n\t\t\"minecraft:grindstone\": 95,\n\t\t\"minecraft:mycelium\": 131,\n\t\t\"minecraft:torch\": 205,\n\t\t\"minecraft:weathering_copper_trap_door\": 231,\n\t\t\"minecraft:beehive\": 17,\n\t\t\"minecraft:copper_bulb_block\": 55,\n\t\t\"minecraft:dragon_egg\": 72,\n\t\t\"minecraft:pumpkin\": 152,\n\t\t\"minecraft:air\": 1,\n\t\t\"minecraft:barrier\": 11,\n\t\t\"minecraft:fletching_table\": 85,\n\t\t\"minecraft:wall_sign\": 219,\n\t\t\"minecraft:conduit\": 54,\n\t\t\"minecraft:tripwire\": 211,\n\t\t\"minecraft:wall\": 222,\n\t\t\"minecraft:ceiling_hanging_sign\": 41,\n\t\t\"minecraft:command\": 50,\n\t\t\"minecraft:sea_pickle\": 172,\n\t\t\"minecraft:stained_glass\": 189,\n\t\t\"minecraft:door\": 70,\n\t\t\"minecraft:rail\": 153,\n\t\t\"minecraft:mangrove_roots\": 126,\n\t\t\"minecraft:nether_portal\": 132,\n\t\t\"minecraft:seagrass\": 171,\n\t\t\"minecraft:pitcher_crop\": 143,\n\t\t\"minecraft:structure_void\": 195,\n\t\t\"minecraft:cactus\": 28,\n\t\t\"minecraft:glow_lichen\": 93,\n\t\t\"minecraft:infested_rotated_pillar\": 105,\n\t\t\"minecraft:lightning_rod\": 120,\n\t\t\"minecraft:fungus\": 90,\n\t\t\"minecraft:lever\": 118,\n\t\t\"minecraft:standing_sign\": 191,\n\t\t\"minecraft:brushable\": 24,\n\t\t\"minecraft:fire\": 84,\n\t\t\"minecraft:wool_carpet\": 240,\n\t\t\"minecraft:web\": 232,\n\t\t\"minecraft:comparator\": 51,\n\t\t\"minecraft:crop\": 62,\n\t\t\"minecraft:flower_pot\": 87,\n\t\t\"minecraft:hanging_roots\": 97,\n\t\t\"minecraft:cave_vines_plant\": 40,\n\t\t\"minecraft:lantern\": 113,\n\t\t\"minecraft:skull\": 174,\n\t\t\"minecraft:bamboo_stalk\": 8,\n\t\t\"minecraft:bed\": 16,\n\t\t\"minecraft:colored_falling\": 49,\n\t\t\"minecraft:half_transparent\": 96,\n\t\t\"minecraft:cherry_leaves\": 43,\n\t\t\"minecraft:crafting_table\": 61,\n\t\t\"minecraft:stair\": 190,\n\t\t\"minecraft:wet_sponge\": 236,\n\t\t\"minecraft:base_coral_wall_fan\": 14,\n\t\t\"minecraft:potato\": 147,\n\t\t\"minecraft:shulker_box\": 173,\n\t\t\"minecraft:soul_sand\": 184,\n\t\t\"minecraft:beacon\": 15,\n\t\t\"minecraft:coral_fan\": 57,\n\t\t\"minecraft:dead_bush\": 65,\n\t\t\"minecraft:moving_piston\": 128,\n\t\t\"minecraft:ladder\": 112,\n\t\t\"minecraft:redstone_torch\": 156,\n\t\t\"minecraft:snow_layer\": 181,\n\t\t\"minecraft:anvil\": 4,\n\t\t\"minecraft:crying_obsidian\": 63,\n\t\t\"minecraft:ender_chest\": 76,\n\t\t\"minecraft:fence_gate\": 83,\n\t\t\"minecraft:note\": 136,\n\t\t\"minecraft:sculk_vein\": 170,\n\t\t\"minecraft:stem\": 192,\n\t\t\"minecraft:base_coral_plant\": 13,\n\t\t\"minecraft:blast_furnace\": 22,\n\t\t\"minecraft:huge_mushroom\": 102,\n\t\t\"minecraft:ice\": 103,\n\t},\n}"
  },
  {
    "path": "server/registry/cat_variant.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar CatVariant = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:all_black\": 10,\n\t\t\"minecraft:black\": 1,\n\t\t\"minecraft:calico\": 5,\n\t\t\"minecraft:jellie\": 9,\n\t\t\"minecraft:persian\": 6,\n\t\t\"minecraft:siamese\": 3,\n\t\t\"minecraft:british_shorthair\": 4,\n\t\t\"minecraft:ragdoll\": 7,\n\t\t\"minecraft:red\": 2,\n\t\t\"minecraft:tabby\": 0,\n\t\t\"minecraft:white\": 8,\n\t},\n}"
  },
  {
    "path": "server/registry/chunk_status.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar ChunkStatus = Registry{\n\tDefault: \"minecraft:empty\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:noise\": 4,\n\t\t\"minecraft:structure_starts\": 1,\n\t\t\"minecraft:surface\": 5,\n\t\t\"minecraft:biomes\": 3,\n\t\t\"minecraft:empty\": 0,\n\t\t\"minecraft:full\": 11,\n\t\t\"minecraft:light\": 9,\n\t\t\"minecraft:spawn\": 10,\n\t\t\"minecraft:structure_references\": 2,\n\t\t\"minecraft:carvers\": 6,\n\t\t\"minecraft:features\": 7,\n\t\t\"minecraft:initialize_light\": 8,\n\t},\n}"
  },
  {
    "path": "server/registry/command_argument_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar CommandArgumentType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:particle\":            26,\n\t\t\"minecraft:nbt_path\":            22,\n\t\t\"minecraft:gamemode\":            41,\n\t\t\"minecraft:resource_or_tag\":     43,\n\t\t\"minecraft:angle\":               27,\n\t\t\"minecraft:float_range\":         39,\n\t\t\"minecraft:template_mirror\":     47,\n\t\t\"minecraft:nbt_compound_tag\":    20,\n\t\t\"minecraft:scoreboard_slot\":     29,\n\t\t\"minecraft:column_pos\":          9,\n\t\t\"minecraft:entity_anchor\":       37,\n\t\t\"minecraft:loot_modifier\":       52,\n\t\t\"minecraft:function\":            36,\n\t\t\"minecraft:resource\":            45,\n\t\t\"brigadier:string\":              5,\n\t\t\"minecraft:component\":           17,\n\t\t\"minecraft:loot_predicate\":      51,\n\t\t\"minecraft:objective\":           23,\n\t\t\"brigadier:bool\":                0,\n\t\t\"brigadier:double\":              2,\n\t\t\"minecraft:block_predicate\":     13,\n\t\t\"minecraft:state\":               6,\n\t\t\"minecraft:item_slots\":          34,\n\t\t\"minecraft:objective_criteria\":  24,\n\t\t\"brigadier:long\":                4,\n\t\t\"minecraft:block_state\":         12,\n\t\t\"minecraft:heightmap\":           49,\n\t\t\"minecraft:template_rotation\":   48,\n\t\t\"minecraft:uuid\":                53,\n\t\t\"minecraft:block_pos\":           8,\n\t\t\"minecraft:operation\":           25,\n\t\t\"minecraft:int_range\":           38,\n\t\t\"minecraft:rotation\":            28,\n\t\t\"minecraft:swizzle\":             31,\n\t\t\"minecraft:game_profile\":        7,\n\t\t\"minecraft:nbt_tag\":             21,\n\t\t\"minecraft:message\":             19,\n\t\t\"minecraft:dimension\":           40,\n\t\t\"minecraft:item_stack\":          14,\n\t\t\"minecraft:resource_or_tag_key\": 44,\n\t\t\"brigadier:integer\":             3,\n\t\t\"minecraft:item_predicate\":      15,\n\t\t\"minecraft:style\":               18,\n\t\t\"minecraft:time\":                42,\n\t\t\"brigadier:float\":               1,\n\t\t\"minecraft:item_slot\":           33,\n\t\t\"minecraft:loot_table\":          50,\n\t\t\"minecraft:team\":                32,\n\t\t\"minecraft:color\":               16,\n\t\t\"minecraft:resource_key\":        46,\n\t\t\"minecraft:resource_location\":   35,\n\t\t\"minecraft:score_holder\":        30,\n\t\t\"minecraft:vec2\":                11,\n\t\t\"minecraft:vec3\":                10,\n\t},\n}\n"
  },
  {
    "path": "server/registry/creative_mode_tab.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar CreativeModeTab = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:natural_blocks\": 2,\n\t\t\"minecraft:redstone_blocks\": 4,\n\t\t\"minecraft:tools_and_utilities\": 7,\n\t\t\"minecraft:building_blocks\": 0,\n\t\t\"minecraft:hotbar\": 5,\n\t\t\"minecraft:ingredients\": 10,\n\t\t\"minecraft:inventory\": 13,\n\t\t\"minecraft:colored_blocks\": 1,\n\t\t\"minecraft:combat\": 8,\n\t\t\"minecraft:functional_blocks\": 3,\n\t\t\"minecraft:op_blocks\": 12,\n\t\t\"minecraft:food_and_drinks\": 9,\n\t\t\"minecraft:search\": 6,\n\t\t\"minecraft:spawn_eggs\": 11,\n\t},\n}"
  },
  {
    "path": "server/registry/custom_stat.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar CustomStat = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:climb_one_cm\": 11,\n\t\t\"minecraft:raid_trigger\": 69,\n\t\t\"minecraft:play_record\": 54,\n\t\t\"minecraft:walk_on_water_one_cm\": 9,\n\t\t\"minecraft:interact_with_crafting_table\": 56,\n\t\t\"minecraft:interact_with_loom\": 66,\n\t\t\"minecraft:play_noteblock\": 48,\n\t\t\"minecraft:damage_resisted\": 29,\n\t\t\"minecraft:interact_with_stonecutter\": 67,\n\t\t\"minecraft:fly_one_cm\": 12,\n\t\t\"minecraft:trigger_trapped_chest\": 51,\n\t\t\"minecraft:interact_with_brewingstand\": 43,\n\t\t\"minecraft:damage_dealt_resisted\": 25,\n\t\t\"minecraft:damage_taken\": 26,\n\t\t\"minecraft:drop\": 22,\n\t\t\"minecraft:enchant_item\": 53,\n\t\t\"minecraft:horse_one_cm\": 17,\n\t\t\"minecraft:sprint_one_cm\": 8,\n\t\t\"minecraft:interact_with_smoker\": 62,\n\t\t\"minecraft:swim_one_cm\": 19,\n\t\t\"minecraft:interact_with_beacon\": 44,\n\t\t\"minecraft:interact_with_grindstone\": 72,\n\t\t\"minecraft:interact_with_smithing_table\": 74,\n\t\t\"minecraft:clean_banner\": 41,\n\t\t\"minecraft:damage_absorbed\": 28,\n\t\t\"minecraft:damage_dealt_absorbed\": 24,\n\t\t\"minecraft:interact_with_cartography_table\": 65,\n\t\t\"minecraft:open_enderchest\": 52,\n\t\t\"minecraft:animals_bred\": 32,\n\t\t\"minecraft:aviate_one_cm\": 18,\n\t\t\"minecraft:clean_armor\": 40,\n\t\t\"minecraft:walk_one_cm\": 6,\n\t\t\"minecraft:target_hit\": 73,\n\t\t\"minecraft:traded_with_villager\": 36,\n\t\t\"minecraft:use_cauldron\": 39,\n\t\t\"minecraft:inspect_dropper\": 45,\n\t\t\"minecraft:interact_with_lectern\": 63,\n\t\t\"minecraft:open_shulker_box\": 59,\n\t\t\"minecraft:open_chest\": 57,\n\t\t\"minecraft:pot_flower\": 50,\n\t\t\"minecraft:damage_dealt\": 23,\n\t\t\"minecraft:fall_one_cm\": 10,\n\t\t\"minecraft:mob_kills\": 31,\n\t\t\"minecraft:damage_blocked_by_shield\": 27,\n\t\t\"minecraft:eat_cake_slice\": 37,\n\t\t\"minecraft:interact_with_anvil\": 71,\n\t\t\"minecraft:open_barrel\": 60,\n\t\t\"minecraft:tune_noteblock\": 49,\n\t\t\"minecraft:bell_ring\": 68,\n\t\t\"minecraft:boat_one_cm\": 15,\n\t\t\"minecraft:clean_shulker_box\": 42,\n\t\t\"minecraft:raid_win\": 70,\n\t\t\"minecraft:time_since_death\": 3,\n\t\t\"minecraft:fill_cauldron\": 38,\n\t\t\"minecraft:inspect_hopper\": 46,\n\t\t\"minecraft:pig_one_cm\": 16,\n\t\t\"minecraft:sneak_time\": 5,\n\t\t\"minecraft:fish_caught\": 34,\n\t\t\"minecraft:inspect_dispenser\": 47,\n\t\t\"minecraft:play_time\": 1,\n\t\t\"minecraft:strider_one_cm\": 20,\n\t\t\"minecraft:deaths\": 30,\n\t\t\"minecraft:interact_with_campfire\": 64,\n\t\t\"minecraft:minecart_one_cm\": 14,\n\t\t\"minecraft:walk_under_water_one_cm\": 13,\n\t\t\"minecraft:interact_with_blast_furnace\": 61,\n\t\t\"minecraft:interact_with_furnace\": 55,\n\t\t\"minecraft:sleep_in_bed\": 58,\n\t\t\"minecraft:player_kills\": 33,\n\t\t\"minecraft:talked_to_villager\": 35,\n\t\t\"minecraft:time_since_rest\": 4,\n\t\t\"minecraft:total_world_time\": 2,\n\t\t\"minecraft:crouch_one_cm\": 7,\n\t\t\"minecraft:jump\": 21,\n\t\t\"minecraft:leave_game\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/data_component_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar DataComponentType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:writable_book_content\": 33,\n\t\t\"minecraft:custom_data\": 0,\n\t\t\"minecraft:container_loot\": 56,\n\t\t\"minecraft:damage\": 3,\n\t\t\"minecraft:hide_tooltip\": 15,\n\t\t\"minecraft:container\": 52,\n\t\t\"minecraft:enchantment_glint_override\": 18,\n\t\t\"minecraft:tool\": 22,\n\t\t\"minecraft:instrument\": 40,\n\t\t\"minecraft:max_damage\": 2,\n\t\t\"minecraft:stored_enchantments\": 23,\n\t\t\"minecraft:base_color\": 50,\n\t\t\"minecraft:bucket_entity_data\": 38,\n\t\t\"minecraft:debug_stick_state\": 36,\n\t\t\"minecraft:dyed_color\": 24,\n\t\t\"minecraft:banner_patterns\": 49,\n\t\t\"minecraft:block_entity_data\": 39,\n\t\t\"minecraft:bundle_contents\": 30,\n\t\t\"minecraft:can_break\": 11,\n\t\t\"minecraft:rarity\": 8,\n\t\t\"minecraft:creative_slot_lock\": 17,\n\t\t\"minecraft:food\": 20,\n\t\t\"minecraft:firework_explosion\": 45,\n\t\t\"minecraft:attribute_modifiers\": 12,\n\t\t\"minecraft:block_state\": 53,\n\t\t\"minecraft:charged_projectiles\": 29,\n\t\t\"minecraft:custom_name\": 5,\n\t\t\"minecraft:pot_decorations\": 51,\n\t\t\"minecraft:bees\": 54,\n\t\t\"minecraft:hide_additional_tooltip\": 14,\n\t\t\"minecraft:item_name\": 6,\n\t\t\"minecraft:map_id\": 26,\n\t\t\"minecraft:can_place_on\": 10,\n\t\t\"minecraft:lock\": 55,\n\t\t\"minecraft:map_color\": 25,\n\t\t\"minecraft:max_stack_size\": 1,\n\t\t\"minecraft:suspicious_stew_effects\": 32,\n\t\t\"minecraft:custom_model_data\": 13,\n\t\t\"minecraft:fire_resistant\": 21,\n\t\t\"minecraft:lodestone_tracker\": 44,\n\t\t\"minecraft:map_post_processing\": 28,\n\t\t\"minecraft:written_book_content\": 34,\n\t\t\"minecraft:lore\": 7,\n\t\t\"minecraft:ominous_bottle_amplifier\": 41,\n\t\t\"minecraft:profile\": 47,\n\t\t\"minecraft:repair_cost\": 16,\n\t\t\"minecraft:fireworks\": 46,\n\t\t\"minecraft:intangible_projectile\": 19,\n\t\t\"minecraft:jukebox_playable\": 42,\n\t\t\"minecraft:note_block_sound\": 48,\n\t\t\"minecraft:enchantments\": 9,\n\t\t\"minecraft:trim\": 35,\n\t\t\"minecraft:unbreakable\": 4,\n\t\t\"minecraft:potion_contents\": 31,\n\t\t\"minecraft:recipes\": 43,\n\t\t\"minecraft:entity_data\": 37,\n\t\t\"minecraft:map_decorations\": 27,\n\t},\n}"
  },
  {
    "path": "server/registry/decorated_pot_pattern.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar DecoratedPotPattern = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:heart\": 11,\n\t\t\"minecraft:sheaf\": 19,\n\t\t\"minecraft:archer\": 1,\n\t\t\"minecraft:brewer\": 4,\n\t\t\"minecraft:explorer\": 7,\n\t\t\"minecraft:friend\": 9,\n\t\t\"minecraft:guster\": 10,\n\t\t\"minecraft:shelter\": 20,\n\t\t\"minecraft:danger\": 6,\n\t\t\"minecraft:heartbreak\": 12,\n\t\t\"minecraft:miner\": 14,\n\t\t\"minecraft:prize\": 17,\n\t\t\"minecraft:scrape\": 18,\n\t\t\"minecraft:howl\": 13,\n\t\t\"minecraft:mourner\": 15,\n\t\t\"minecraft:plenty\": 16,\n\t\t\"minecraft:arms_up\": 2,\n\t\t\"minecraft:blade\": 3,\n\t\t\"minecraft:blank\": 23,\n\t\t\"minecraft:burn\": 5,\n\t\t\"minecraft:flow\": 8,\n\t\t\"minecraft:angler\": 0,\n\t\t\"minecraft:skull\": 21,\n\t\t\"minecraft:snort\": 22,\n\t},\n}"
  },
  {
    "path": "server/registry/enchantment_effect_component_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentEffectComponentType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:post_attack\": 6,\n\t\t\"minecraft:projectile_spread\": 16,\n\t\t\"minecraft:equipment_drops\": 10,\n\t\t\"minecraft:fishing_time_reduction\": 19,\n\t\t\"minecraft:projectile_spawned\": 15,\n\t\t\"minecraft:trident_spin_attack_strength\": 29,\n\t\t\"minecraft:trident_sound\": 26,\n\t\t\"minecraft:damage\": 2,\n\t\t\"minecraft:damage_protection\": 0,\n\t\t\"minecraft:location_changed\": 11,\n\t\t\"minecraft:prevent_armor_change\": 28,\n\t\t\"minecraft:projectile_count\": 17,\n\t\t\"minecraft:armor_effectiveness\": 5,\n\t\t\"minecraft:hit_block\": 7,\n\t\t\"minecraft:item_damage\": 8,\n\t\t\"minecraft:prevent_equipment_drop\": 27,\n\t\t\"minecraft:damage_immunity\": 1,\n\t\t\"minecraft:ammo_use\": 13,\n\t\t\"minecraft:repair_with_xp\": 23,\n\t\t\"minecraft:smash_damage_per_fallen_block\": 3,\n\t\t\"minecraft:trident_return_acceleration\": 18,\n\t\t\"minecraft:attributes\": 9,\n\t\t\"minecraft:crossbow_charge_time\": 24,\n\t\t\"minecraft:crossbow_charging_sounds\": 25,\n\t\t\"minecraft:mob_experience\": 22,\n\t\t\"minecraft:projectile_piercing\": 14,\n\t\t\"minecraft:block_experience\": 21,\n\t\t\"minecraft:fishing_luck_bonus\": 20,\n\t\t\"minecraft:knockback\": 4,\n\t\t\"minecraft:tick\": 12,\n\t},\n}"
  },
  {
    "path": "server/registry/enchantment_entity_effect_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentEntityEffectType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:spawn_particles\": 11,\n\t\t\"minecraft:summon_entity\": 12,\n\t\t\"minecraft:all_of\": 0,\n\t\t\"minecraft:damage_entity\": 2,\n\t\t\"minecraft:explode\": 4,\n\t\t\"minecraft:play_sound\": 6,\n\t\t\"minecraft:replace_block\": 7,\n\t\t\"minecraft:replace_disk\": 8,\n\t\t\"minecraft:apply_mob_effect\": 1,\n\t\t\"minecraft:damage_item\": 3,\n\t\t\"minecraft:ignite\": 5,\n\t\t\"minecraft:run_function\": 9,\n\t\t\"minecraft:set_block_properties\": 10,\n\t},\n}"
  },
  {
    "path": "server/registry/enchantment_level_based_value_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentLevelBasedValueType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:clamped\": 0,\n\t\t\"minecraft:fraction\": 1,\n\t\t\"minecraft:levels_squared\": 2,\n\t\t\"minecraft:linear\": 3,\n\t\t\"minecraft:lookup\": 4,\n\t},\n}"
  },
  {
    "path": "server/registry/enchantment_location_based_effect_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentLocationBasedEffectType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:play_sound\": 7,\n\t\t\"minecraft:summon_entity\": 13,\n\t\t\"minecraft:all_of\": 0,\n\t\t\"minecraft:damage_item\": 4,\n\t\t\"minecraft:replace_block\": 8,\n\t\t\"minecraft:run_function\": 10,\n\t\t\"minecraft:attribute\": 2,\n\t\t\"minecraft:ignite\": 6,\n\t\t\"minecraft:replace_disk\": 9,\n\t\t\"minecraft:spawn_particles\": 12,\n\t\t\"minecraft:apply_mob_effect\": 1,\n\t\t\"minecraft:damage_entity\": 3,\n\t\t\"minecraft:explode\": 5,\n\t\t\"minecraft:set_block_properties\": 11,\n\t},\n}"
  },
  {
    "path": "server/registry/enchantment_provider_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentProviderType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:by_cost\": 0,\n\t\t\"minecraft:by_cost_with_difficulty\": 1,\n\t\t\"minecraft:single\": 2,\n\t},\n}"
  },
  {
    "path": "server/registry/enchantment_value_effect_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EnchantmentValueEffectType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:remove_binomial\": 3,\n\t\t\"minecraft:set\": 4,\n\t\t\"minecraft:add\": 0,\n\t\t\"minecraft:all_of\": 1,\n\t\t\"minecraft:multiply\": 2,\n\t},\n}"
  },
  {
    "path": "server/registry/entity_sub_predicate_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EntitySubPredicateType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:parrot\": 13,\n\t\t\"minecraft:rabbit\": 9,\n\t\t\"minecraft:wolf\": 18,\n\t\t\"minecraft:axolotl\": 5,\n\t\t\"minecraft:fox\": 7,\n\t\t\"minecraft:mooshroom\": 8,\n\t\t\"minecraft:painting\": 15,\n\t\t\"minecraft:player\": 2,\n\t\t\"minecraft:raider\": 4,\n\t\t\"minecraft:boat\": 6,\n\t\t\"minecraft:horse\": 10,\n\t\t\"minecraft:llama\": 11,\n\t\t\"minecraft:slime\": 3,\n\t\t\"minecraft:cat\": 16,\n\t\t\"minecraft:fishing_hook\": 1,\n\t\t\"minecraft:frog\": 17,\n\t\t\"minecraft:lightning\": 0,\n\t\t\"minecraft:tropical_fish\": 14,\n\t\t\"minecraft:villager\": 12,\n\t},\n}"
  },
  {
    "path": "server/registry/entity_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar EntityType = Registry{\n\tDefault: \"minecraft:pig\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:panda\": 74,\n\t\t\"minecraft:skeleton_horse\": 92,\n\t\t\"minecraft:spider\": 100,\n\t\t\"minecraft:cod\": 20,\n\t\t\"minecraft:firework_rocket\": 41,\n\t\t\"minecraft:ghast\": 45,\n\t\t\"minecraft:iron_golem\": 57,\n\t\t\"minecraft:donkey\": 25,\n\t\t\"minecraft:cow\": 22,\n\t\t\"minecraft:falling_block\": 40,\n\t\t\"minecraft:pillager\": 80,\n\t\t\"minecraft:vex\": 112,\n\t\t\"minecraft:creeper\": 23,\n\t\t\"minecraft:husk\": 54,\n\t\t\"minecraft:tadpole\": 104,\n\t\t\"minecraft:wither\": 119,\n\t\t\"minecraft:allay\": 0,\n\t\t\"minecraft:glow_squid\": 48,\n\t\t\"minecraft:text_display\": 105,\n\t\t\"minecraft:zombie_horse\": 125,\n\t\t\"minecraft:axolotl\": 5,\n\t\t\"minecraft:chicken\": 19,\n\t\t\"minecraft:evoker\": 35,\n\t\t\"minecraft:piglin\": 78,\n\t\t\"minecraft:shulker\": 88,\n\t\t\"minecraft:command_block_minecart\": 21,\n\t\t\"minecraft:glow_item_frame\": 47,\n\t\t\"minecraft:horse\": 53,\n\t\t\"minecraft:mule\": 71,\n\t\t\"minecraft:magma_cube\": 67,\n\t\t\"minecraft:ominous_item_spawner\": 61,\n\t\t\"minecraft:bogged\": 11,\n\t\t\"minecraft:fishing_bobber\": 129,\n\t\t\"minecraft:item\": 58,\n\t\t\"minecraft:leash_knot\": 63,\n\t\t\"minecraft:zombie\": 124,\n\t\t\"minecraft:zombie_villager\": 126,\n\t\t\"minecraft:elder_guardian\": 29,\n\t\t\"minecraft:furnace_minecart\": 44,\n\t\t\"minecraft:silverfish\": 90,\n\t\t\"minecraft:wandering_trader\": 115,\n\t\t\"minecraft:hoglin\": 51,\n\t\t\"minecraft:player\": 128,\n\t\t\"minecraft:wind_charge\": 117,\n\t\t\"minecraft:bat\": 6,\n\t\t\"minecraft:camel\": 14,\n\t\t\"minecraft:vindicator\": 114,\n\t\t\"minecraft:egg\": 28,\n\t\t\"minecraft:illusioner\": 55,\n\t\t\"minecraft:item_display\": 59,\n\t\t\"minecraft:piglin_brute\": 79,\n\t\t\"minecraft:warden\": 116,\n\t\t\"minecraft:mooshroom\": 70,\n\t\t\"minecraft:ocelot\": 72,\n\t\t\"minecraft:painting\": 73,\n\t\t\"minecraft:stray\": 102,\n\t\t\"minecraft:chest_minecart\": 18,\n\t\t\"minecraft:llama\": 65,\n\t\t\"minecraft:wolf\": 122,\n\t\t\"minecraft:dolphin\": 24,\n\t\t\"minecraft:ravager\": 85,\n\t\t\"minecraft:strider\": 103,\n\t\t\"minecraft:trader_llama\": 108,\n\t\t\"minecraft:goat\": 49,\n\t\t\"minecraft:interaction\": 56,\n\t\t\"minecraft:potion\": 82,\n\t\t\"minecraft:slime\": 93,\n\t\t\"minecraft:rabbit\": 84,\n\t\t\"minecraft:parrot\": 75,\n\t\t\"minecraft:shulker_bullet\": 89,\n\t\t\"minecraft:trident\": 109,\n\t\t\"minecraft:wither_skull\": 121,\n\t\t\"minecraft:tropical_fish\": 110,\n\t\t\"minecraft:zombified_piglin\": 127,\n\t\t\"minecraft:evoker_fangs\": 36,\n\t\t\"minecraft:item_frame\": 60,\n\t\t\"minecraft:lightning_bolt\": 64,\n\t\t\"minecraft:sniffer\": 95,\n\t\t\"minecraft:arrow\": 4,\n\t\t\"minecraft:drowned\": 27,\n\t\t\"minecraft:spawner_minecart\": 98,\n\t\t\"minecraft:tnt_minecart\": 107,\n\t\t\"minecraft:cave_spider\": 16,\n\t\t\"minecraft:ender_dragon\": 31,\n\t\t\"minecraft:experience_orb\": 38,\n\t\t\"minecraft:tnt\": 106,\n\t\t\"minecraft:endermite\": 34,\n\t\t\"minecraft:experience_bottle\": 37,\n\t\t\"minecraft:area_effect_cloud\": 1,\n\t\t\"minecraft:block_display\": 9,\n\t\t\"minecraft:end_crystal\": 30,\n\t\t\"minecraft:ender_pearl\": 32,\n\t\t\"minecraft:dragon_fireball\": 26,\n\t\t\"minecraft:polar_bear\": 81,\n\t\t\"minecraft:turtle\": 111,\n\t\t\"minecraft:cat\": 15,\n\t\t\"minecraft:minecart\": 69,\n\t\t\"minecraft:villager\": 113,\n\t\t\"minecraft:bee\": 7,\n\t\t\"minecraft:small_fireball\": 94,\n\t\t\"minecraft:snowball\": 97,\n\t\t\"minecraft:breeze_wind_charge\": 13,\n\t\t\"minecraft:sheep\": 87,\n\t\t\"minecraft:wither_skeleton\": 120,\n\t\t\"minecraft:zoglin\": 123,\n\t\t\"minecraft:witch\": 118,\n\t\t\"minecraft:boat\": 10,\n\t\t\"minecraft:eye_of_ender\": 39,\n\t\t\"minecraft:giant\": 46,\n\t\t\"minecraft:guardian\": 50,\n\t\t\"minecraft:squid\": 101,\n\t\t\"minecraft:chest_boat\": 17,\n\t\t\"minecraft:enderman\": 33,\n\t\t\"minecraft:pig\": 77,\n\t\t\"minecraft:snow_golem\": 96,\n\t\t\"minecraft:skeleton\": 91,\n\t\t\"minecraft:armor_stand\": 3,\n\t\t\"minecraft:blaze\": 8,\n\t\t\"minecraft:hopper_minecart\": 52,\n\t\t\"minecraft:marker\": 68,\n\t\t\"minecraft:fox\": 42,\n\t\t\"minecraft:pufferfish\": 83,\n\t\t\"minecraft:spectral_arrow\": 99,\n\t\t\"minecraft:fireball\": 62,\n\t\t\"minecraft:phantom\": 76,\n\t\t\"minecraft:salmon\": 86,\n\t\t\"minecraft:armadillo\": 2,\n\t\t\"minecraft:breeze\": 12,\n\t\t\"minecraft:frog\": 43,\n\t\t\"minecraft:llama_spit\": 66,\n\t},\n}"
  },
  {
    "path": "server/registry/float_provider_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar FloatProviderType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:clamped_normal\": 2,\n\t\t\"minecraft:constant\": 0,\n\t\t\"minecraft:trapezoid\": 3,\n\t\t\"minecraft:uniform\": 1,\n\t},\n}"
  },
  {
    "path": "server/registry/fluid.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Fluid = Registry{\n\tDefault: \"minecraft:empty\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:empty\": 0,\n\t\t\"minecraft:flowing_lava\": 3,\n\t\t\"minecraft:flowing_water\": 1,\n\t\t\"minecraft:lava\": 4,\n\t\t\"minecraft:water\": 2,\n\t},\n}"
  },
  {
    "path": "server/registry/frog_variant.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar FrogVariant = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:warm\": 1,\n\t\t\"minecraft:cold\": 2,\n\t\t\"minecraft:temperate\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/game_event.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar GameEvent = Registry{\n\tDefault: \"minecraft:step\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:item_interact_finish\": 28,\n\t\t\"minecraft:prime_fuse\": 34,\n\t\t\"minecraft:sculk_sensor_tendrils_clicking\": 37,\n\t\t\"minecraft:shear\": 38,\n\t\t\"minecraft:drink\": 11,\n\t\t\"minecraft:entity_dismount\": 16,\n\t\t\"minecraft:resonate_10\": 54,\n\t\t\"minecraft:resonate_2\": 46,\n\t\t\"minecraft:splash\": 40,\n\t\t\"minecraft:block_detach\": 6,\n\t\t\"minecraft:eat\": 12,\n\t\t\"minecraft:equip\": 21,\n\t\t\"minecraft:resonate_11\": 55,\n\t\t\"minecraft:resonate_5\": 49,\n\t\t\"minecraft:jukebox_play\": 30,\n\t\t\"minecraft:resonate_7\": 51,\n\t\t\"minecraft:step\": 41,\n\t\t\"minecraft:block_activate\": 0,\n\t\t\"minecraft:block_close\": 3,\n\t\t\"minecraft:block_deactivate\": 4,\n\t\t\"minecraft:entity_interact\": 17,\n\t\t\"minecraft:resonate_6\": 50,\n\t\t\"minecraft:resonate_15\": 59,\n\t\t\"minecraft:shriek\": 39,\n\t\t\"minecraft:block_destroy\": 5,\n\t\t\"minecraft:block_place\": 8,\n\t\t\"minecraft:entity_damage\": 14,\n\t\t\"minecraft:entity_mount\": 18,\n\t\t\"minecraft:explode\": 22,\n\t\t\"minecraft:hit_ground\": 26,\n\t\t\"minecraft:container_open\": 10,\n\t\t\"minecraft:note_block_play\": 33,\n\t\t\"minecraft:resonate_12\": 56,\n\t\t\"minecraft:resonate_14\": 58,\n\t\t\"minecraft:resonate_3\": 47,\n\t\t\"minecraft:fluid_place\": 25,\n\t\t\"minecraft:resonate_9\": 53,\n\t\t\"minecraft:teleport\": 43,\n\t\t\"minecraft:block_attach\": 1,\n\t\t\"minecraft:entity_die\": 15,\n\t\t\"minecraft:projectile_land\": 35,\n\t\t\"minecraft:swim\": 42,\n\t\t\"minecraft:unequip\": 44,\n\t\t\"minecraft:container_close\": 9,\n\t\t\"minecraft:entity_place\": 19,\n\t\t\"minecraft:elytra_glide\": 13,\n\t\t\"minecraft:instrument_play\": 27,\n\t\t\"minecraft:item_interact_start\": 29,\n\t\t\"minecraft:projectile_shoot\": 36,\n\t\t\"minecraft:resonate_1\": 45,\n\t\t\"minecraft:fluid_pickup\": 24,\n\t\t\"minecraft:jukebox_stop_play\": 31,\n\t\t\"minecraft:lightning_strike\": 32,\n\t\t\"minecraft:block_change\": 2,\n\t\t\"minecraft:block_open\": 7,\n\t\t\"minecraft:flap\": 23,\n\t\t\"minecraft:resonate_13\": 57,\n\t\t\"minecraft:resonate_4\": 48,\n\t\t\"minecraft:resonate_8\": 52,\n\t\t\"minecraft:entity_action\": 20,\n\t},\n}"
  },
  {
    "path": "server/registry/height_provider_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar HeightProviderType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:biased_to_bottom\": 2,\n\t\t\"minecraft:constant\": 0,\n\t\t\"minecraft:trapezoid\": 4,\n\t\t\"minecraft:uniform\": 1,\n\t\t\"minecraft:very_biased_to_bottom\": 3,\n\t\t\"minecraft:weighted_list\": 5,\n\t},\n}"
  },
  {
    "path": "server/registry/instrument.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Instrument = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:sing_goat_horn\": 1,\n\t\t\"minecraft:yearn_goat_horn\": 6,\n\t\t\"minecraft:admire_goat_horn\": 4,\n\t\t\"minecraft:call_goat_horn\": 5,\n\t\t\"minecraft:dream_goat_horn\": 7,\n\t\t\"minecraft:feel_goat_horn\": 3,\n\t\t\"minecraft:ponder_goat_horn\": 0,\n\t\t\"minecraft:seek_goat_horn\": 2,\n\t},\n}"
  },
  {
    "path": "server/registry/int_provider_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar IntProviderType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:weighted_list\": 4,\n\t\t\"minecraft:biased_to_bottom\": 2,\n\t\t\"minecraft:clamped\": 3,\n\t\t\"minecraft:clamped_normal\": 5,\n\t\t\"minecraft:constant\": 0,\n\t\t\"minecraft:uniform\": 1,\n\t},\n}"
  },
  {
    "path": "server/registry/item.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Item = Registry{\n\tDefault: \"minecraft:air\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:diamond_axe\": 841,\n\t\t\"minecraft:polished_blackstone_stairs\": 1234,\n\t\t\"minecraft:snow\": 305,\n\t\t\"minecraft:stone_bricks\": 340,\n\t\t\"minecraft:wind_charge\": 1090,\n\t\t\"minecraft:brown_stained_glass\": 483,\n\t\t\"minecraft:crimson_button\": 693,\n\t\t\"minecraft:pointed_dripstone\": 1262,\n\t\t\"minecraft:red_sandstone_slab\": 275,\n\t\t\"minecraft:respawn_anchor\": 1240,\n\t\t\"minecraft:snow_block\": 307,\n\t\t\"minecraft:sugar_cane\": 243,\n\t\t\"minecraft:bamboo_mosaic_stairs\": 392,\n\t\t\"minecraft:danger_pottery_sherd\": 1294,\n\t\t\"minecraft:candle\": 1241,\n\t\t\"minecraft:composter\": 1204,\n\t\t\"minecraft:orange_bed\": 965,\n\t\t\"minecraft:polished_andesite_slab\": 650,\n\t\t\"minecraft:slime_spawn_egg\": 1063,\n\t\t\"minecraft:warped_fence\": 321,\n\t\t\"minecraft:bamboo_mosaic_slab\": 261,\n\t\t\"minecraft:blade_pottery_sherd\": 1291,\n\t\t\"minecraft:mushroom_stem\": 354,\n\t\t\"minecraft:mutton\": 1131,\n\t\t\"minecraft:cherry_door\": 716,\n\t\t\"minecraft:fermented_spider_eye\": 1001,\n\t\t\"minecraft:diamond_horse_armor\": 1126,\n\t\t\"minecraft:enchanted_golden_apple\": 885,\n\t\t\"minecraft:ender_chest\": 381,\n\t\t\"minecraft:eye_armor_trim_smithing_template\": 1275,\n\t\t\"minecraft:golden_apple\": 884,\n\t\t\"minecraft:nether_sprouts\": 240,\n\t\t\"minecraft:cherry_log\": 137,\n\t\t\"minecraft:diamond_hoe\": 842,\n\t\t\"minecraft:stone_hoe\": 827,\n\t\t\"minecraft:turtle_spawn_egg\": 1073,\n\t\t\"minecraft:wooden_sword\": 818,\n\t\t\"minecraft:obsidian\": 290,\n\t\t\"minecraft:quartz_block\": 423,\n\t\t\"minecraft:creeper_banner_pattern\": 1196,\n\t\t\"minecraft:warped_fungus\": 237,\n\t\t\"minecraft:tripwire_hook\": 677,\n\t\t\"minecraft:waxed_weathered_chiseled_copper\": 118,\n\t\t\"minecraft:blackstone_stairs\": 1230,\n\t\t\"minecraft:light_blue_banner\": 1136,\n\t\t\"minecraft:red_wool\": 216,\n\t\t\"minecraft:weathered_cut_copper_stairs\": 106,\n\t\t\"minecraft:black_banner\": 1148,\n\t\t\"minecraft:music_disc_5\": 1184,\n\t\t\"minecraft:exposed_chiseled_copper\": 97,\n\t\t\"minecraft:waxed_exposed_cut_copper_stairs\": 125,\n\t\t\"minecraft:raiser_armor_trim_smithing_template\": 1284,\n\t\t\"minecraft:redstone_block\": 659,\n\t\t\"minecraft:cookie\": 980,\n\t\t\"minecraft:quartz_bricks\": 424,\n\t\t\"minecraft:green_stained_glass_pane\": 500,\n\t\t\"minecraft:polished_blackstone_button\": 683,\n\t\t\"minecraft:quartz\": 808,\n\t\t\"minecraft:red_concrete_powder\": 585,\n\t\t\"minecraft:bedrock\": 56,\n\t\t\"minecraft:chiseled_stone_bricks\": 343,\n\t\t\"minecraft:salmon_spawn_egg\": 1057,\n\t\t\"minecraft:tuff_brick_wall\": 24,\n\t\t\"minecraft:cut_copper_stairs\": 104,\n\t\t\"minecraft:infested_deepslate\": 339,\n\t\t\"minecraft:netherite_pickaxe\": 845,\n\t\t\"minecraft:red_banner\": 1147,\n\t\t\"minecraft:bone\": 961,\n\t\t\"minecraft:lime_candle\": 1247,\n\t\t\"minecraft:dark_oak_wood\": 172,\n\t\t\"minecraft:music_disc_creator\": 1172,\n\t\t\"minecraft:acacia_slab\": 256,\n\t\t\"minecraft:cartography_table\": 1208,\n\t\t\"minecraft:cracked_deepslate_bricks\": 347,\n\t\t\"minecraft:spruce_wood\": 167,\n\t\t\"minecraft:bundle\": 930,\n\t\t\"minecraft:cobblestone_wall\": 397,\n\t\t\"minecraft:light_gray_carpet\": 454,\n\t\t\"minecraft:polished_deepslate\": 10,\n\t\t\"minecraft:big_dripleaf\": 249,\n\t\t\"minecraft:light_blue_shulker_box\": 526,\n\t\t\"minecraft:mangrove_hanging_sign\": 904,\n\t\t\"minecraft:ominous_trial_key\": 1329,\n\t\t\"minecraft:brick_slab\": 270,\n\t\t\"minecraft:glow_squid_spawn_egg\": 1034,\n\t\t\"minecraft:weathered_copper_grate\": 1313,\n\t\t\"minecraft:acacia_button\": 688,\n\t\t\"minecraft:black_stained_glass_pane\": 502,\n\t\t\"minecraft:light_gray_shulker_box\": 531,\n\t\t\"minecraft:wither_rose\": 230,\n\t\t\"minecraft:cherry_fence\": 316,\n\t\t\"minecraft:heavy_core\": 85,\n\t\t\"minecraft:ender_dragon_spawn_egg\": 1027,\n\t\t\"minecraft:rabbit_foot\": 1121,\n\t\t\"minecraft:wither_spawn_egg\": 1080,\n\t\t\"minecraft:archer_pottery_sherd\": 1289,\n\t\t\"minecraft:camel_spawn_egg\": 1017,\n\t\t\"minecraft:blue_shulker_box\": 534,\n\t\t\"minecraft:dark_oak_leaves\": 182,\n\t\t\"minecraft:pufferfish_spawn_egg\": 1054,\n\t\t\"minecraft:allium\": 221,\n\t\t\"minecraft:black_shulker_box\": 538,\n\t\t\"minecraft:nether_star\": 1110,\n\t\t\"minecraft:raw_copper\": 812,\n\t\t\"minecraft:blaze_powder\": 1002,\n\t\t\"minecraft:dead_bush\": 199,\n\t\t\"minecraft:music_disc_creator_music_box\": 1173,\n\t\t\"minecraft:skull_banner_pattern\": 1197,\n\t\t\"minecraft:waxed_weathered_cut_copper\": 122,\n\t\t\"minecraft:diamond\": 805,\n\t\t\"minecraft:mud_bricks\": 345,\n\t\t\"minecraft:bubble_coral\": 601,\n\t\t\"minecraft:crying_obsidian\": 1227,\n\t\t\"minecraft:drowned_spawn_egg\": 1025,\n\t\t\"minecraft:stripped_bamboo_block\": 165,\n\t\t\"minecraft:acacia_boat\": 782,\n\t\t\"minecraft:activator_rail\": 764,\n\t\t\"minecraft:hay_block\": 445,\n\t\t\"minecraft:mossy_stone_brick_slab\": 641,\n\t\t\"minecraft:prize_pottery_sherd\": 1305,\n\t\t\"minecraft:turtle_helmet\": 794,\n\t\t\"minecraft:golden_sword\": 828,\n\t\t\"minecraft:gray_glazed_terracotta\": 546,\n\t\t\"minecraft:smooth_red_sandstone_slab\": 640,\n\t\t\"minecraft:dead_tube_coral_fan\": 614,\n\t\t\"minecraft:iron_horse_armor\": 1124,\n\t\t\"minecraft:bread\": 855,\n\t\t\"minecraft:waxed_oxidized_cut_copper_stairs\": 127,\n\t\t\"minecraft:yellow_stained_glass_pane\": 491,\n\t\t\"minecraft:large_amethyst_bud\": 1260,\n\t\t\"minecraft:white_dye\": 944,\n\t\t\"minecraft:horn_coral_fan\": 613,\n\t\t\"minecraft:phantom_spawn_egg\": 1048,\n\t\t\"minecraft:small_amethyst_bud\": 1258,\n\t\t\"minecraft:tuff_wall\": 15,\n\t\t\"minecraft:white_terracotta\": 427,\n\t\t\"minecraft:acacia_fence_gate\": 754,\n\t\t\"minecraft:brown_bed\": 976,\n\t\t\"minecraft:flow_banner_pattern\": 1201,\n\t\t\"minecraft:goat_horn\": 1203,\n\t\t\"minecraft:conduit\": 620,\n\t\t\"minecraft:elder_guardian_spawn_egg\": 1026,\n\t\t\"minecraft:mangrove_roots\": 140,\n\t\t\"minecraft:music_disc_relic\": 1183,\n\t\t\"minecraft:paper\": 924,\n\t\t\"minecraft:chiseled_quartz_block\": 422,\n\t\t\"minecraft:clay\": 309,\n\t\t\"minecraft:light_blue_bed\": 967,\n\t\t\"minecraft:warped_stem\": 143,\n\t\t\"minecraft:bamboo_door\": 719,\n\t\t\"minecraft:cherry_chest_boat\": 785,\n\t\t\"minecraft:warped_fence_gate\": 760,\n\t\t\"minecraft:cobbled_deepslate_wall\": 415,\n\t\t\"minecraft:dead_horn_coral_block\": 593,\n\t\t\"minecraft:stone_slab\": 264,\n\t\t\"minecraft:polished_basalt\": 329,\n\t\t\"minecraft:rooted_dirt\": 31,\n\t\t\"minecraft:bricks\": 285,\n\t\t\"minecraft:brown_shulker_box\": 535,\n\t\t\"minecraft:crimson_fence\": 320,\n\t\t\"minecraft:dead_fire_coral\": 606,\n\t\t\"minecraft:globe_banner_pattern\": 1199,\n\t\t\"minecraft:mule_spawn_egg\": 1044,\n\t\t\"minecraft:bamboo_trapdoor\": 739,\n\t\t\"minecraft:black_glazed_terracotta\": 554,\n\t\t\"minecraft:white_shulker_box\": 523,\n\t\t\"minecraft:grass_block\": 27,\n\t\t\"minecraft:pink_petals\": 246,\n\t\t\"minecraft:poppy\": 219,\n\t\t\"minecraft:glass_pane\": 357,\n\t\t\"minecraft:glow_item_frame\": 1095,\n\t\t\"minecraft:oak_pressure_plate\": 699,\n\t\t\"minecraft:prismarine_bricks\": 504,\n\t\t\"minecraft:waxed_weathered_copper_trapdoor\": 748,\n\t\t\"minecraft:green_concrete\": 568,\n\t\t\"minecraft:ladder\": 303,\n\t\t\"minecraft:brown_mushroom_block\": 352,\n\t\t\"minecraft:smooth_sandstone_stairs\": 628,\n\t\t\"minecraft:trial_spawner\": 1327,\n\t\t\"minecraft:cyan_stained_glass_pane\": 496,\n\t\t\"minecraft:iron_helmet\": 864,\n\t\t\"minecraft:cobweb\": 194,\n\t\t\"minecraft:iron_ingot\": 811,\n\t\t\"minecraft:tropical_fish\": 937,\n\t\t\"minecraft:blue_stained_glass_pane\": 498,\n\t\t\"minecraft:chain\": 356,\n\t\t\"minecraft:light\": 444,\n\t\t\"minecraft:tuff\": 12,\n\t\t\"minecraft:gray_dye\": 951,\n\t\t\"minecraft:oxeye_daisy\": 227,\n\t\t\"minecraft:pink_bed\": 970,\n\t\t\"minecraft:stripped_oak_log\": 145,\n\t\t\"minecraft:bamboo_block\": 144,\n\t\t\"minecraft:dark_oak_chest_boat\": 787,\n\t\t\"minecraft:cherry_stairs\": 388,\n\t\t\"minecraft:iron_bars\": 355,\n\t\t\"minecraft:polished_tuff\": 17,\n\t\t\"minecraft:vault\": 1330,\n\t\t\"minecraft:brick_wall\": 399,\n\t\t\"minecraft:dark_oak_button\": 690,\n\t\t\"minecraft:diamond_pickaxe\": 840,\n\t\t\"minecraft:salmon_bucket\": 916,\n\t\t\"minecraft:tuff_slab\": 13,\n\t\t\"minecraft:birch_chest_boat\": 779,\n\t\t\"minecraft:blackstone\": 1228,\n\t\t\"minecraft:beacon\": 396,\n\t\t\"minecraft:blue_ice\": 619,\n\t\t\"minecraft:campfire\": 1218,\n\t\t\"minecraft:diamond_helmet\": 868,\n\t\t\"minecraft:netherrack\": 325,\n\t\t\"minecraft:purple_candle\": 1252,\n\t\t\"minecraft:acacia_pressure_plate\": 703,\n\t\t\"minecraft:acacia_stairs\": 387,\n\t\t\"minecraft:white_bed\": 964,\n\t\t\"minecraft:wither_skeleton_spawn_egg\": 1081,\n\t\t\"minecraft:red_glazed_terracotta\": 553,\n\t\t\"minecraft:spruce_sapling\": 49,\n\t\t\"minecraft:hanging_roots\": 248,\n\t\t\"minecraft:wolf_armor\": 797,\n\t\t\"minecraft:bamboo_slab\": 260,\n\t\t\"minecraft:beef\": 988,\n\t\t\"minecraft:cyan_carpet\": 455,\n\t\t\"minecraft:gray_candle\": 1249,\n\t\t\"minecraft:iron_shovel\": 834,\n\t\t\"minecraft:lilac\": 466,\n\t\t\"minecraft:lime_wool\": 207,\n\t\t\"minecraft:orange_tulip\": 224,\n\t\t\"minecraft:bee_nest\": 1222,\n\t\t\"minecraft:carrot_on_a_stick\": 771,\n\t\t\"minecraft:totem_of_undying\": 1163,\n\t\t\"minecraft:warped_stairs\": 394,\n\t\t\"minecraft:coarse_dirt\": 29,\n\t\t\"minecraft:diamond_leggings\": 870,\n\t\t\"minecraft:smooth_quartz_stairs\": 629,\n\t\t\"minecraft:bamboo_raft\": 790,\n\t\t\"minecraft:barrel\": 1205,\n\t\t\"minecraft:smooth_quartz_slab\": 646,\n\t\t\"minecraft:stray_spawn_egg\": 1068,\n\t\t\"minecraft:twisting_vines\": 242,\n\t\t\"minecraft:coal_ore\": 62,\n\t\t\"minecraft:oak_sign\": 886,\n\t\t\"minecraft:mourner_pottery_sherd\": 1303,\n\t\t\"minecraft:seagrass\": 200,\n\t\t\"minecraft:stripped_crimson_stem\": 153,\n\t\t\"minecraft:end_stone\": 377,\n\t\t\"minecraft:howl_pottery_sherd\": 1301,\n\t\t\"minecraft:tube_coral\": 599,\n\t\t\"minecraft:black_carpet\": 461,\n\t\t\"minecraft:nether_wart_block\": 517,\n\t\t\"minecraft:bow\": 801,\n\t\t\"minecraft:end_rod\": 292,\n\t\t\"minecraft:smooth_sandstone\": 283,\n\t\t\"minecraft:bamboo_planks\": 44,\n\t\t\"minecraft:birch_button\": 686,\n\t\t\"minecraft:golden_axe\": 831,\n\t\t\"minecraft:red_carpet\": 460,\n\t\t\"minecraft:stripped_acacia_log\": 149,\n\t\t\"minecraft:azure_bluet\": 222,\n\t\t\"minecraft:birch_fence_gate\": 752,\n\t\t\"minecraft:mangrove_pressure_plate\": 706,\n\t\t\"minecraft:oak_trapdoor\": 731,\n\t\t\"minecraft:red_tulip\": 223,\n\t\t\"minecraft:splash_potion\": 1158,\n\t\t\"minecraft:black_terracotta\": 442,\n\t\t\"minecraft:iron_nugget\": 1165,\n\t\t\"minecraft:azalea_leaves\": 184,\n\t\t\"minecraft:gray_stained_glass\": 478,\n\t\t\"minecraft:mycelium\": 364,\n\t\t\"minecraft:orange_wool\": 203,\n\t\t\"minecraft:pumpkin_seeds\": 986,\n\t\t\"minecraft:purple_wool\": 212,\n\t\t\"minecraft:exposed_cut_copper_slab\": 109,\n\t\t\"minecraft:guardian_spawn_egg\": 1036,\n\t\t\"minecraft:item_frame\": 1094,\n\t\t\"minecraft:jungle_fence_gate\": 753,\n\t\t\"minecraft:jungle_sapling\": 51,\n\t\t\"minecraft:ocelot_spawn_egg\": 1045,\n\t\t\"minecraft:rib_armor_trim_smithing_template\": 1279,\n\t\t\"minecraft:wooden_shovel\": 819,\n\t\t\"minecraft:flint\": 880,\n\t\t\"minecraft:iron_axe\": 836,\n\t\t\"minecraft:sand\": 57,\n\t\t\"minecraft:tuff_brick_slab\": 22,\n\t\t\"minecraft:magenta_wool\": 204,\n\t\t\"minecraft:raw_copper_block\": 83,\n\t\t\"minecraft:gray_bed\": 971,\n\t\t\"minecraft:sheaf_pottery_sherd\": 1307,\n\t\t\"minecraft:stone_pickaxe\": 825,\n\t\t\"minecraft:acacia_wood\": 170,\n\t\t\"minecraft:diamond_sword\": 838,\n\t\t\"minecraft:crimson_planks\": 45,\n\t\t\"minecraft:cut_red_sandstone_slab\": 276,\n\t\t\"minecraft:spruce_log\": 133,\n\t\t\"minecraft:waxed_exposed_chiseled_copper\": 117,\n\t\t\"minecraft:brown_banner\": 1145,\n\t\t\"minecraft:chiseled_red_sandstone\": 511,\n\t\t\"minecraft:guster_pottery_sherd\": 1298,\n\t\t\"minecraft:knowledge_book\": 1166,\n\t\t\"minecraft:lime_shulker_box\": 528,\n\t\t\"minecraft:mossy_stone_bricks\": 341,\n\t\t\"minecraft:structure_block\": 792,\n\t\t\"minecraft:witch_spawn_egg\": 1079,\n\t\t\"minecraft:cyan_wool\": 211,\n\t\t\"minecraft:firework_star\": 1113,\n\t\t\"minecraft:waxed_oxidized_copper_grate\": 1318,\n\t\t\"minecraft:dolphin_spawn_egg\": 1023,\n\t\t\"minecraft:heart_pottery_sherd\": 1299,\n\t\t\"minecraft:golden_carrot\": 1102,\n\t\t\"minecraft:magenta_terracotta\": 429,\n\t\t\"minecraft:melon_slice\": 984,\n\t\t\"minecraft:red_sandstone_wall\": 401,\n\t\t\"minecraft:sculk_vein\": 372,\n\t\t\"minecraft:trapped_chest\": 678,\n\t\t\"minecraft:breeze_spawn_egg\": 1015,\n\t\t\"minecraft:copper_trapdoor\": 742,\n\t\t\"minecraft:warped_nylium\": 34,\n\t\t\"minecraft:piglin_brute_spawn_egg\": 1051,\n\t\t\"minecraft:yellow_candle\": 1246,\n\t\t\"minecraft:cut_sandstone\": 193,\n\t\t\"minecraft:gray_concrete\": 562,\n\t\t\"minecraft:orange_concrete\": 556,\n\t\t\"minecraft:nether_brick_wall\": 406,\n\t\t\"minecraft:suspicious_gravel\": 59,\n\t\t\"minecraft:mossy_cobblestone_stairs\": 625,\n\t\t\"minecraft:acacia_sapling\": 52,\n\t\t\"minecraft:end_stone_brick_stairs\": 626,\n\t\t\"minecraft:panda_spawn_egg\": 1046,\n\t\t\"minecraft:polished_blackstone_bricks\": 1236,\n\t\t\"minecraft:polished_deepslate_wall\": 416,\n\t\t\"minecraft:birch_log\": 134,\n\t\t\"minecraft:hopper_minecart\": 770,\n\t\t\"minecraft:cherry_boat\": 784,\n\t\t\"minecraft:glow_ink_sac\": 942,\n\t\t\"minecraft:miner_pottery_sherd\": 1302,\n\t\t\"minecraft:scaffolding\": 656,\n\t\t\"minecraft:stone\": 1,\n\t\t\"minecraft:brown_carpet\": 458,\n\t\t\"minecraft:cave_spider_spawn_egg\": 1018,\n\t\t\"minecraft:jungle_boat\": 780,\n\t\t\"minecraft:mossy_cobblestone\": 289,\n\t\t\"minecraft:music_disc_13\": 1168,\n\t\t\"minecraft:polished_deepslate_slab\": 653,\n\t\t\"minecraft:stone_axe\": 826,\n\t\t\"minecraft:waxed_weathered_copper_grate\": 1317,\n\t\t\"minecraft:chicken_spawn_egg\": 1019,\n\t\t\"minecraft:clock\": 932,\n\t\t\"minecraft:cherry_hanging_sign\": 902,\n\t\t\"minecraft:dead_bubble_coral\": 605,\n\t\t\"minecraft:fern\": 196,\n\t\t\"minecraft:repeating_command_block\": 514,\n\t\t\"minecraft:armadillo_spawn_egg\": 1008,\n\t\t\"minecraft:bone_meal\": 960,\n\t\t\"minecraft:waxed_oxidized_copper_bulb\": 1326,\n\t\t\"minecraft:dark_oak_stairs\": 389,\n\t\t\"minecraft:golden_horse_armor\": 1125,\n\t\t\"minecraft:purple_carpet\": 456,\n\t\t\"minecraft:lingering_potion\": 1161,\n\t\t\"minecraft:yellow_bed\": 968,\n\t\t\"minecraft:beehive\": 1223,\n\t\t\"minecraft:dark_oak_hanging_sign\": 903,\n\t\t\"minecraft:cyan_terracotta\": 436,\n\t\t\"minecraft:frog_spawn_egg\": 1032,\n\t\t\"minecraft:prismarine_shard\": 1116,\n\t\t\"minecraft:redstone_ore\": 70,\n\t\t\"minecraft:white_tulip\": 225,\n\t\t\"minecraft:acacia_sign\": 890,\n\t\t\"minecraft:blue_concrete_powder\": 582,\n\t\t\"minecraft:mossy_cobblestone_wall\": 398,\n\t\t\"minecraft:nether_wart\": 997,\n\t\t\"minecraft:petrified_oak_slab\": 268,\n\t\t\"minecraft:anvil\": 419,\n\t\t\"minecraft:goat_spawn_egg\": 1035,\n\t\t\"minecraft:gray_wool\": 209,\n\t\t\"minecraft:pufferfish_bucket\": 915,\n\t\t\"minecraft:white_candle\": 1242,\n\t\t\"minecraft:experience_bottle\": 1088,\n\t\t\"minecraft:gray_concrete_powder\": 578,\n\t\t\"minecraft:silence_armor_trim_smithing_template\": 1283,\n\t\t\"minecraft:stripped_spruce_wood\": 156,\n\t\t\"minecraft:tropical_fish_bucket\": 918,\n\t\t\"minecraft:andesite_slab\": 648,\n\t\t\"minecraft:donkey_spawn_egg\": 1024,\n\t\t\"minecraft:gravel\": 61,\n\t\t\"minecraft:horn_coral\": 603,\n\t\t\"minecraft:oak_wood\": 166,\n\t\t\"minecraft:warped_hyphae\": 175,\n\t\t\"minecraft:wooden_hoe\": 822,\n\t\t\"minecraft:crimson_fungus\": 236,\n\t\t\"minecraft:enchanting_table\": 375,\n\t\t\"minecraft:crimson_fence_gate\": 759,\n\t\t\"minecraft:cyan_bed\": 973,\n\t\t\"minecraft:cyan_concrete_powder\": 580,\n\t\t\"minecraft:heavy_weighted_pressure_plate\": 698,\n\t\t\"minecraft:light_gray_concrete_powder\": 579,\n\t\t\"minecraft:raw_iron\": 810,\n\t\t\"minecraft:brown_terracotta\": 439,\n\t\t\"minecraft:cocoa_beans\": 943,\n\t\t\"minecraft:green_terracotta\": 440,\n\t\t\"minecraft:zombie_head\": 1106,\n\t\t\"minecraft:end_stone_brick_slab\": 644,\n\t\t\"minecraft:evoker_spawn_egg\": 1030,\n\t\t\"minecraft:light_gray_banner\": 1141,\n\t\t\"minecraft:packed_ice\": 463,\n\t\t\"minecraft:piglin_head\": 1109,\n\t\t\"minecraft:player_head\": 1105,\n\t\t\"minecraft:polished_granite_stairs\": 621,\n\t\t\"minecraft:spruce_stairs\": 384,\n\t\t\"minecraft:bamboo_sign\": 894,\n\t\t\"minecraft:calcite\": 11,\n\t\t\"minecraft:infested_chiseled_stone_bricks\": 338,\n\t\t\"minecraft:netherite_axe\": 846,\n\t\t\"minecraft:red_terracotta\": 441,\n\t\t\"minecraft:bamboo_chest_raft\": 791,\n\t\t\"minecraft:debug_stick\": 1167,\n\t\t\"minecraft:jungle_planks\": 39,\n\t\t\"minecraft:music_disc_chirp\": 1171,\n\t\t\"minecraft:music_disc_mellohi\": 1176,\n\t\t\"minecraft:oak_fence_gate\": 750,\n\t\t\"minecraft:oxidized_cut_copper_slab\": 111,\n\t\t\"minecraft:warped_sign\": 896,\n\t\t\"minecraft:chainmail_boots\": 863,\n\t\t\"minecraft:endermite_spawn_egg\": 1029,\n\t\t\"minecraft:diorite_wall\": 411,\n\t\t\"minecraft:flint_and_steel\": 798,\n\t\t\"minecraft:golden_helmet\": 872,\n\t\t\"minecraft:ochre_froglight\": 1263,\n\t\t\"minecraft:orange_concrete_powder\": 572,\n\t\t\"minecraft:pink_candle\": 1248,\n\t\t\"minecraft:cooked_salmon\": 940,\n\t\t\"minecraft:deepslate_tile_stairs\": 638,\n\t\t\"minecraft:trader_llama_spawn_egg\": 1071,\n\t\t\"minecraft:rose_bush\": 467,\n\t\t\"minecraft:spruce_pressure_plate\": 700,\n\t\t\"minecraft:phantom_membrane\": 1189,\n\t\t\"minecraft:red_stained_glass_pane\": 501,\n\t\t\"minecraft:spruce_sign\": 887,\n\t\t\"minecraft:deepslate_lapis_ore\": 75,\n\t\t\"minecraft:iron_block\": 88,\n\t\t\"minecraft:dirt\": 28,\n\t\t\"minecraft:lava_bucket\": 910,\n\t\t\"minecraft:polished_diorite_slab\": 642,\n\t\t\"minecraft:cyan_banner\": 1142,\n\t\t\"minecraft:diamond_chestplate\": 869,\n\t\t\"minecraft:potion\": 998,\n\t\t\"minecraft:deepslate_iron_ore\": 65,\n\t\t\"minecraft:pink_tulip\": 226,\n\t\t\"minecraft:dark_oak_sapling\": 54,\n\t\t\"minecraft:feather\": 851,\n\t\t\"minecraft:jungle_slab\": 255,\n\t\t\"minecraft:pink_stained_glass_pane\": 493,\n\t\t\"minecraft:red_concrete\": 569,\n\t\t\"minecraft:cactus\": 308,\n\t\t\"minecraft:cherry_button\": 689,\n\t\t\"minecraft:sheep_spawn_egg\": 1058,\n\t\t\"minecraft:sniffer_spawn_egg\": 1064,\n\t\t\"minecraft:blue_concrete\": 566,\n\t\t\"minecraft:oxidized_copper_grate\": 1314,\n\t\t\"minecraft:chest_minecart\": 767,\n\t\t\"minecraft:copper_bulb\": 1319,\n\t\t\"minecraft:ghast_spawn_egg\": 1033,\n\t\t\"minecraft:glass_bottle\": 999,\n\t\t\"minecraft:green_carpet\": 459,\n\t\t\"minecraft:husk_spawn_egg\": 1039,\n\t\t\"minecraft:brown_wool\": 214,\n\t\t\"minecraft:cauldron\": 1005,\n\t\t\"minecraft:rabbit\": 1118,\n\t\t\"minecraft:structure_void\": 521,\n\t\t\"minecraft:suspicious_stew\": 1193,\n\t\t\"minecraft:warped_planks\": 46,\n\t\t\"minecraft:jack_o_lantern\": 324,\n\t\t\"minecraft:oak_door\": 711,\n\t\t\"minecraft:crimson_stem\": 142,\n\t\t\"minecraft:dandelion\": 218,\n\t\t\"minecraft:heart_of_the_sea\": 1191,\n\t\t\"minecraft:orange_terracotta\": 428,\n\t\t\"minecraft:redstone_lamp\": 680,\n\t\t\"minecraft:rotten_flesh\": 992,\n\t\t\"minecraft:bamboo_button\": 692,\n\t\t\"minecraft:bubble_coral_fan\": 611,\n\t\t\"minecraft:shulker_spawn_egg\": 1059,\n\t\t\"minecraft:weathered_copper\": 94,\n\t\t\"minecraft:raw_gold\": 814,\n\t\t\"minecraft:stripped_dark_oak_wood\": 161,\n\t\t\"minecraft:deepslate_gold_ore\": 69,\n\t\t\"minecraft:mangrove_propagule\": 55,\n\t\t\"minecraft:mossy_stone_brick_stairs\": 623,\n\t\t\"minecraft:command_block_minecart\": 1130,\n\t\t\"minecraft:fishing_rod\": 931,\n\t\t\"minecraft:potato\": 1098,\n\t\t\"minecraft:red_nether_brick_wall\": 408,\n\t\t\"minecraft:blue_orchid\": 220,\n\t\t\"minecraft:crimson_nylium\": 33,\n\t\t\"minecraft:beetroot\": 1154,\n\t\t\"minecraft:dead_horn_coral\": 607,\n\t\t\"minecraft:deepslate_copper_ore\": 67,\n\t\t\"minecraft:sentry_armor_trim_smithing_template\": 1270,\n\t\t\"minecraft:amethyst_block\": 86,\n\t\t\"minecraft:bamboo_mosaic\": 47,\n\t\t\"minecraft:magenta_carpet\": 448,\n\t\t\"minecraft:blue_terracotta\": 438,\n\t\t\"minecraft:hopper\": 667,\n\t\t\"minecraft:light_gray_wool\": 210,\n\t\t\"minecraft:lightning_rod\": 673,\n\t\t\"minecraft:shaper_armor_trim_smithing_template\": 1282,\n\t\t\"minecraft:tnt\": 679,\n\t\t\"minecraft:tuff_stairs\": 14,\n\t\t\"minecraft:turtle_egg\": 587,\n\t\t\"minecraft:chiseled_nether_bricks\": 368,\n\t\t\"minecraft:deepslate_brick_slab\": 654,\n\t\t\"minecraft:orange_glazed_terracotta\": 540,\n\t\t\"minecraft:oxidized_copper_trapdoor\": 745,\n\t\t\"minecraft:stone_stairs\": 627,\n\t\t\"minecraft:yellow_shulker_box\": 527,\n\t\t\"minecraft:zombie_horse_spawn_egg\": 1085,\n\t\t\"minecraft:budding_amethyst\": 87,\n\t\t\"minecraft:iron_ore\": 64,\n\t\t\"minecraft:honeycomb\": 1221,\n\t\t\"minecraft:mangrove_stairs\": 390,\n\t\t\"minecraft:snort_pottery_sherd\": 1310,\n\t\t\"minecraft:spider_spawn_egg\": 1066,\n\t\t\"minecraft:stone_button\": 682,\n\t\t\"minecraft:waxed_exposed_cut_copper\": 121,\n\t\t\"minecraft:crimson_sign\": 895,\n\t\t\"minecraft:granite\": 2,\n\t\t\"minecraft:iron_boots\": 867,\n\t\t\"minecraft:mud_brick_stairs\": 363,\n\t\t\"minecraft:netherite_ingot\": 816,\n\t\t\"minecraft:carrot\": 1097,\n\t\t\"minecraft:deepslate\": 8,\n\t\t\"minecraft:ender_pearl\": 993,\n\t\t\"minecraft:fire_coral_fan\": 612,\n\t\t\"minecraft:netherite_helmet\": 876,\n\t\t\"minecraft:birch_trapdoor\": 733,\n\t\t\"minecraft:cooked_mutton\": 1132,\n\t\t\"minecraft:exposed_copper_door\": 723,\n\t\t\"minecraft:polished_deepslate_stairs\": 636,\n\t\t\"minecraft:prismarine_crystals\": 1117,\n\t\t\"minecraft:sea_pickle\": 201,\n\t\t\"minecraft:stripped_cherry_wood\": 160,\n\t\t\"minecraft:tropical_fish_spawn_egg\": 1072,\n\t\t\"minecraft:chiseled_copper\": 96,\n\t\t\"minecraft:dark_prismarine\": 505,\n\t\t\"minecraft:fletching_table\": 1209,\n\t\t\"minecraft:iron_chestplate\": 865,\n\t\t\"minecraft:bubble_coral_block\": 596,\n\t\t\"minecraft:exposed_copper_trapdoor\": 743,\n\t\t\"minecraft:chainmail_helmet\": 860,\n\t\t\"minecraft:copper_block\": 89,\n\t\t\"minecraft:iron_hoe\": 837,\n\t\t\"minecraft:mangrove_slab\": 259,\n\t\t\"minecraft:moss_block\": 247,\n\t\t\"minecraft:observer\": 666,\n\t\t\"minecraft:birch_wood\": 168,\n\t\t\"minecraft:bowl\": 799,\n\t\t\"minecraft:redstone\": 657,\n\t\t\"minecraft:stripped_birch_wood\": 157,\n\t\t\"minecraft:purpur_stairs\": 297,\n\t\t\"minecraft:rabbit_hide\": 1122,\n\t\t\"minecraft:soul_lantern\": 1215,\n\t\t\"minecraft:birch_fence\": 313,\n\t\t\"minecraft:dark_oak_fence_gate\": 756,\n\t\t\"minecraft:infested_stone_bricks\": 335,\n\t\t\"minecraft:red_mushroom_block\": 353,\n\t\t\"minecraft:bamboo_fence_gate\": 758,\n\t\t\"minecraft:birch_sapling\": 50,\n\t\t\"minecraft:brown_stained_glass_pane\": 499,\n\t\t\"minecraft:dark_oak_fence\": 317,\n\t\t\"minecraft:leather\": 913,\n\t\t\"minecraft:music_disc_precipice\": 1186,\n\t\t\"minecraft:netherite_leggings\": 878,\n\t\t\"minecraft:red_shulker_box\": 537,\n\t\t\"minecraft:acacia_trapdoor\": 735,\n\t\t\"minecraft:blaze_spawn_egg\": 1013,\n\t\t\"minecraft:spruce_fence\": 312,\n\t\t\"minecraft:chorus_plant\": 293,\n\t\t\"minecraft:lime_glazed_terracotta\": 544,\n\t\t\"minecraft:spore_blossom\": 233,\n\t\t\"minecraft:mossy_cobblestone_slab\": 643,\n\t\t\"minecraft:music_disc_mall\": 1175,\n\t\t\"minecraft:decorated_pot\": 288,\n\t\t\"minecraft:dripstone_block\": 26,\n\t\t\"minecraft:echo_shard\": 1267,\n\t\t\"minecraft:kelp\": 244,\n\t\t\"minecraft:magma_cube_spawn_egg\": 1042,\n\t\t\"minecraft:soul_soil\": 327,\n\t\t\"minecraft:black_candle\": 1257,\n\t\t\"minecraft:command_block\": 395,\n\t\t\"minecraft:stone_pressure_plate\": 695,\n\t\t\"minecraft:dead_fire_coral_fan\": 617,\n\t\t\"minecraft:flow_armor_trim_smithing_template\": 1286,\n\t\t\"minecraft:pink_concrete\": 561,\n\t\t\"minecraft:polished_granite_slab\": 639,\n\t\t\"minecraft:red_nether_bricks\": 519,\n\t\t\"minecraft:ward_armor_trim_smithing_template\": 1274,\n\t\t\"minecraft:birch_leaves\": 178,\n\t\t\"minecraft:cobblestone_stairs\": 304,\n\t\t\"minecraft:cooked_cod\": 939,\n\t\t\"minecraft:flow_pottery_sherd\": 1296,\n\t\t\"minecraft:pink_dye\": 950,\n\t\t\"minecraft:sticky_piston\": 663,\n\t\t\"minecraft:trial_key\": 1328,\n\t\t\"minecraft:white_stained_glass\": 471,\n\t\t\"minecraft:book\": 925,\n\t\t\"minecraft:chorus_flower\": 294,\n\t\t\"minecraft:crafter\": 981,\n\t\t\"minecraft:green_candle\": 1255,\n\t\t\"minecraft:pitcher_pod\": 1153,\n\t\t\"minecraft:blue_carpet\": 457,\n\t\t\"minecraft:blue_stained_glass\": 482,\n\t\t\"minecraft:lime_concrete\": 560,\n\t\t\"minecraft:shroomlight\": 1220,\n\t\t\"minecraft:tnt_minecart\": 769,\n\t\t\"minecraft:torchflower\": 231,\n\t\t\"minecraft:cyan_dye\": 953,\n\t\t\"minecraft:dead_bubble_coral_fan\": 616,\n\t\t\"minecraft:diorite_stairs\": 634,\n\t\t\"minecraft:iron_pickaxe\": 835,\n\t\t\"minecraft:magenta_stained_glass\": 473,\n\t\t\"minecraft:mangrove_planks\": 43,\n\t\t\"minecraft:bolt_armor_trim_smithing_template\": 1287,\n\t\t\"minecraft:chicken\": 990,\n\t\t\"minecraft:mangrove_fence_gate\": 757,\n\t\t\"minecraft:stripped_crimson_hyphae\": 163,\n\t\t\"minecraft:basalt\": 328,\n\t\t\"minecraft:fire_coral_block\": 597,\n\t\t\"minecraft:crimson_trapdoor\": 740,\n\t\t\"minecraft:mossy_stone_brick_wall\": 402,\n\t\t\"minecraft:netherite_upgrade_smithing_template\": 1269,\n\t\t\"minecraft:shelter_pottery_sherd\": 1308,\n\t\t\"minecraft:terracotta\": 462,\n\t\t\"minecraft:acacia_hanging_sign\": 901,\n\t\t\"minecraft:crimson_slab\": 262,\n\t\t\"minecraft:repeater\": 660,\n\t\t\"minecraft:yellow_wool\": 206,\n\t\t\"minecraft:infested_mossy_stone_bricks\": 336,\n\t\t\"minecraft:light_gray_terracotta\": 435,\n\t\t\"minecraft:oxidized_copper_door\": 725,\n\t\t\"minecraft:pink_shulker_box\": 529,\n\t\t\"minecraft:popped_chorus_fruit\": 1151,\n\t\t\"minecraft:redstone_torch\": 658,\n\t\t\"minecraft:flowering_azalea\": 198,\n\t\t\"minecraft:hoglin_spawn_egg\": 1037,\n\t\t\"minecraft:salmon\": 936,\n\t\t\"minecraft:melon\": 358,\n\t\t\"minecraft:ominous_bottle\": 1331,\n\t\t\"minecraft:gray_terracotta\": 434,\n\t\t\"minecraft:jungle_fence\": 314,\n\t\t\"minecraft:honey_bottle\": 1224,\n\t\t\"minecraft:name_tag\": 1129,\n\t\t\"minecraft:nether_gold_ore\": 78,\n\t\t\"minecraft:oxidized_cut_copper_stairs\": 107,\n\t\t\"minecraft:cherry_trapdoor\": 736,\n\t\t\"minecraft:diamond_boots\": 871,\n\t\t\"minecraft:purple_stained_glass_pane\": 497,\n\t\t\"minecraft:red_candle\": 1256,\n\t\t\"minecraft:stone_brick_stairs\": 362,\n\t\t\"minecraft:weeping_vines\": 241,\n\t\t\"minecraft:wheat_seeds\": 853,\n\t\t\"minecraft:white_banner\": 1133,\n\t\t\"minecraft:dead_horn_coral_fan\": 618,\n\t\t\"minecraft:pink_carpet\": 452,\n\t\t\"minecraft:squid_spawn_egg\": 1067,\n\t\t\"minecraft:waxed_copper_trapdoor\": 746,\n\t\t\"minecraft:yellow_glazed_terracotta\": 543,\n\t\t\"minecraft:amethyst_shard\": 809,\n\t\t\"minecraft:pink_wool\": 208,\n\t\t\"minecraft:lime_carpet\": 451,\n\t\t\"minecraft:oak_sapling\": 48,\n\t\t\"minecraft:polished_blackstone_brick_slab\": 1237,\n\t\t\"minecraft:shulker_box\": 522,\n\t\t\"minecraft:stone_sword\": 823,\n\t\t\"minecraft:tadpole_spawn_egg\": 1070,\n\t\t\"minecraft:bookshelf\": 286,\n\t\t\"minecraft:jungle_log\": 135,\n\t\t\"minecraft:waxed_weathered_copper_bulb\": 1325,\n\t\t\"minecraft:ink_sac\": 941,\n\t\t\"minecraft:painting\": 883,\n\t\t\"minecraft:clay_ball\": 922,\n\t\t\"minecraft:diorite_slab\": 651,\n\t\t\"minecraft:glistering_melon_slice\": 1007,\n\t\t\"minecraft:lapis_lazuli\": 807,\n\t\t\"minecraft:light_blue_candle\": 1245,\n\t\t\"minecraft:lime_terracotta\": 432,\n\t\t\"minecraft:orange_shulker_box\": 524,\n\t\t\"minecraft:pufferfish\": 938,\n\t\t\"minecraft:blue_wool\": 213,\n\t\t\"minecraft:brain_coral_fan\": 610,\n\t\t\"minecraft:quartz_slab\": 274,\n\t\t\"minecraft:magenta_dye\": 946,\n\t\t\"minecraft:spectral_arrow\": 1159,\n\t\t\"minecraft:gray_banner\": 1140,\n\t\t\"minecraft:leather_horse_armor\": 1127,\n\t\t\"minecraft:music_disc_otherside\": 1182,\n\t\t\"minecraft:torch\": 291,\n\t\t\"minecraft:jungle_stairs\": 386,\n\t\t\"minecraft:polished_tuff_wall\": 20,\n\t\t\"minecraft:warped_roots\": 239,\n\t\t\"minecraft:chiseled_sandstone\": 192,\n\t\t\"minecraft:dead_tube_coral\": 608,\n\t\t\"minecraft:writable_book\": 1091,\n\t\t\"minecraft:cobblestone_slab\": 269,\n\t\t\"minecraft:gold_ore\": 68,\n\t\t\"minecraft:shulker_shell\": 1164,\n\t\t\"minecraft:stripped_birch_log\": 147,\n\t\t\"minecraft:stripped_jungle_log\": 148,\n\t\t\"minecraft:tuff_brick_stairs\": 23,\n\t\t\"minecraft:cracked_deepslate_tiles\": 349,\n\t\t\"minecraft:green_bed\": 977,\n\t\t\"minecraft:green_glazed_terracotta\": 552,\n\t\t\"minecraft:light_blue_concrete_powder\": 574,\n\t\t\"minecraft:mud_brick_wall\": 405,\n\t\t\"minecraft:pitcher_plant\": 232,\n\t\t\"minecraft:bamboo_fence\": 319,\n\t\t\"minecraft:end_crystal\": 1149,\n\t\t\"minecraft:gold_nugget\": 996,\n\t\t\"minecraft:mangrove_wood\": 173,\n\t\t\"minecraft:stripped_mangrove_wood\": 162,\n\t\t\"minecraft:white_carpet\": 446,\n\t\t\"minecraft:cracked_stone_bricks\": 342,\n\t\t\"minecraft:deepslate_coal_ore\": 63,\n\t\t\"minecraft:orange_candle\": 1243,\n\t\t\"minecraft:spire_armor_trim_smithing_template\": 1280,\n\t\t\"minecraft:stripped_jungle_wood\": 158,\n\t\t\"minecraft:waxed_cut_copper_stairs\": 124,\n\t\t\"minecraft:horn_coral_block\": 598,\n\t\t\"minecraft:magenta_banner\": 1135,\n\t\t\"minecraft:magenta_bed\": 966,\n\t\t\"minecraft:waxed_copper_door\": 726,\n\t\t\"minecraft:gray_shulker_box\": 530,\n\t\t\"minecraft:leather_boots\": 859,\n\t\t\"minecraft:netherite_block\": 92,\n\t\t\"minecraft:oxidized_copper_bulb\": 1322,\n\t\t\"minecraft:purpur_pillar\": 296,\n\t\t\"minecraft:dark_oak_log\": 138,\n\t\t\"minecraft:emerald_block\": 382,\n\t\t\"minecraft:raw_iron_block\": 82,\n\t\t\"minecraft:skeleton_spawn_egg\": 1061,\n\t\t\"minecraft:waxed_copper_bulb\": 1323,\n\t\t\"minecraft:comparator\": 661,\n\t\t\"minecraft:cooked_porkchop\": 882,\n\t\t\"minecraft:granite_wall\": 403,\n\t\t\"minecraft:piglin_banner_pattern\": 1200,\n\t\t\"minecraft:blue_glazed_terracotta\": 550,\n\t\t\"minecraft:copper_ore\": 66,\n\t\t\"minecraft:glass\": 188,\n\t\t\"minecraft:red_mushroom\": 235,\n\t\t\"minecraft:spruce_chest_boat\": 777,\n\t\t\"minecraft:stonecutter\": 1212,\n\t\t\"minecraft:waxed_exposed_copper_bulb\": 1324,\n\t\t\"minecraft:crafting_table\": 300,\n\t\t\"minecraft:detector_rail\": 762,\n\t\t\"minecraft:netherite_sword\": 843,\n\t\t\"minecraft:blackstone_wall\": 412,\n\t\t\"minecraft:mangrove_fence\": 318,\n\t\t\"minecraft:cobblestone\": 35,\n\t\t\"minecraft:leather_leggings\": 858,\n\t\t\"minecraft:oak_log\": 132,\n\t\t\"minecraft:polished_blackstone_wall\": 413,\n\t\t\"minecraft:stripped_dark_oak_log\": 151,\n\t\t\"minecraft:sugar\": 962,\n\t\t\"minecraft:cracked_polished_blackstone_bricks\": 1239,\n\t\t\"minecraft:deepslate_brick_wall\": 417,\n\t\t\"minecraft:plenty_pottery_sherd\": 1304,\n\t\t\"minecraft:stripped_acacia_wood\": 159,\n\t\t\"minecraft:warped_door\": 721,\n\t\t\"minecraft:emerald\": 806,\n\t\t\"minecraft:oak_button\": 684,\n\t\t\"minecraft:nether_brick_stairs\": 370,\n\t\t\"minecraft:brown_concrete_powder\": 583,\n\t\t\"minecraft:lime_bed\": 969,\n\t\t\"minecraft:deepslate_bricks\": 346,\n\t\t\"minecraft:exposed_copper\": 93,\n\t\t\"minecraft:bell\": 1213,\n\t\t\"minecraft:black_dye\": 959,\n\t\t\"minecraft:light_gray_dye\": 952,\n\t\t\"minecraft:light_weighted_pressure_plate\": 697,\n\t\t\"minecraft:mangrove_log\": 139,\n\t\t\"minecraft:short_grass\": 195,\n\t\t\"minecraft:exposed_copper_bulb\": 1320,\n\t\t\"minecraft:granite_stairs\": 630,\n\t\t\"minecraft:prismarine_wall\": 400,\n\t\t\"minecraft:quartz_pillar\": 425,\n\t\t\"minecraft:red_stained_glass\": 485,\n\t\t\"minecraft:black_bed\": 979,\n\t\t\"minecraft:cherry_sign\": 891,\n\t\t\"minecraft:mangrove_sign\": 893,\n\t\t\"minecraft:reinforced_deepslate\": 351,\n\t\t\"minecraft:brush\": 1268,\n\t\t\"minecraft:cyan_shulker_box\": 532,\n\t\t\"minecraft:dead_tube_coral_block\": 589,\n\t\t\"minecraft:pink_terracotta\": 433,\n\t\t\"minecraft:shield\": 1162,\n\t\t\"minecraft:target\": 671,\n\t\t\"minecraft:waxed_weathered_cut_copper_stairs\": 126,\n\t\t\"minecraft:acacia_door\": 715,\n\t\t\"minecraft:copper_ingot\": 813,\n\t\t\"minecraft:light_blue_stained_glass\": 474,\n\t\t\"minecraft:mooshroom_spawn_egg\": 1043,\n\t\t\"minecraft:podzol\": 30,\n\t\t\"minecraft:spruce_slab\": 253,\n\t\t\"minecraft:stick\": 848,\n\t\t\"minecraft:written_book\": 1092,\n\t\t\"minecraft:birch_door\": 713,\n\t\t\"minecraft:blue_dye\": 955,\n\t\t\"minecraft:iron_golem_spawn_egg\": 1040,\n\t\t\"minecraft:lime_stained_glass\": 476,\n\t\t\"minecraft:turtle_scute\": 795,\n\t\t\"minecraft:wayfinder_armor_trim_smithing_template\": 1281,\n\t\t\"minecraft:bee_spawn_egg\": 1012,\n\t\t\"minecraft:crossbow\": 1192,\n\t\t\"minecraft:iron_sword\": 833,\n\t\t\"minecraft:lily_pad\": 365,\n\t\t\"minecraft:magma_block\": 516,\n\t\t\"minecraft:tinted_glass\": 189,\n\t\t\"minecraft:black_concrete\": 570,\n\t\t\"minecraft:cracked_nether_bricks\": 367,\n\t\t\"minecraft:infested_cracked_stone_bricks\": 337,\n\t\t\"minecraft:oak_stairs\": 383,\n\t\t\"minecraft:spruce_boat\": 776,\n\t\t\"minecraft:yellow_carpet\": 450,\n\t\t\"minecraft:birch_sign\": 888,\n\t\t\"minecraft:golden_pickaxe\": 830,\n\t\t\"minecraft:smoker\": 1206,\n\t\t\"minecraft:coal\": 803,\n\t\t\"minecraft:exposed_copper_grate\": 1312,\n\t\t\"minecraft:golden_chestplate\": 873,\n\t\t\"minecraft:lime_banner\": 1138,\n\t\t\"minecraft:pink_glazed_terracotta\": 545,\n\t\t\"minecraft:dried_kelp\": 985,\n\t\t\"minecraft:filled_map\": 982,\n\t\t\"minecraft:oak_fence\": 311,\n\t\t\"minecraft:saddle\": 765,\n\t\t\"minecraft:crimson_door\": 720,\n\t\t\"minecraft:jungle_leaves\": 179,\n\t\t\"minecraft:cyan_stained_glass\": 480,\n\t\t\"minecraft:farmland\": 301,\n\t\t\"minecraft:golden_boots\": 875,\n\t\t\"minecraft:leather_chestplate\": 857,\n\t\t\"minecraft:mangrove_leaves\": 183,\n\t\t\"minecraft:music_disc_blocks\": 1170,\n\t\t\"minecraft:birch_pressure_plate\": 701,\n\t\t\"minecraft:creeper_head\": 1107,\n\t\t\"minecraft:nether_quartz_ore\": 79,\n\t\t\"minecraft:warped_fungus_on_a_stick\": 772,\n\t\t\"minecraft:flowering_azalea_leaves\": 185,\n\t\t\"minecraft:lily_of_the_valley\": 229,\n\t\t\"minecraft:andesite_wall\": 407,\n\t\t\"minecraft:copper_door\": 722,\n\t\t\"minecraft:pillager_spawn_egg\": 1052,\n\t\t\"minecraft:porkchop\": 881,\n\t\t\"minecraft:stone_brick_wall\": 404,\n\t\t\"minecraft:warped_pressure_plate\": 709,\n\t\t\"minecraft:waxed_oxidized_chiseled_copper\": 119,\n\t\t\"minecraft:waxed_oxidized_cut_copper_slab\": 131,\n\t\t\"minecraft:disc_fragment_5\": 1187,\n\t\t\"minecraft:ender_eye\": 1006,\n\t\t\"minecraft:deepslate_tile_slab\": 655,\n\t\t\"minecraft:exposed_cut_copper\": 101,\n\t\t\"minecraft:prismarine_brick_slab\": 279,\n\t\t\"minecraft:purple_banner\": 1143,\n\t\t\"minecraft:slime_ball\": 926,\n\t\t\"minecraft:spawner\": 298,\n\t\t\"minecraft:birch_slab\": 254,\n\t\t\"minecraft:brown_dye\": 956,\n\t\t\"minecraft:lime_stained_glass_pane\": 492,\n\t\t\"minecraft:pink_concrete_powder\": 577,\n\t\t\"minecraft:yellow_stained_glass\": 475,\n\t\t\"minecraft:furnace_minecart\": 768,\n\t\t\"minecraft:jungle_trapdoor\": 734,\n\t\t\"minecraft:spyglass\": 933,\n\t\t\"minecraft:tipped_arrow\": 1160,\n\t\t\"minecraft:vex_spawn_egg\": 1074,\n\t\t\"minecraft:wither_skeleton_skull\": 1104,\n\t\t\"minecraft:elytra\": 773,\n\t\t\"minecraft:iron_leggings\": 866,\n\t\t\"minecraft:dragon_breath\": 1157,\n\t\t\"minecraft:horse_spawn_egg\": 1038,\n\t\t\"minecraft:lever\": 672,\n\t\t\"minecraft:orange_stained_glass\": 472,\n\t\t\"minecraft:waxed_cut_copper\": 120,\n\t\t\"minecraft:chainmail_leggings\": 862,\n\t\t\"minecraft:coast_armor_trim_smithing_template\": 1272,\n\t\t\"minecraft:dead_brain_coral_block\": 590,\n\t\t\"minecraft:green_banner\": 1146,\n\t\t\"minecraft:skeleton_skull\": 1103,\n\t\t\"minecraft:warped_wart_block\": 518,\n\t\t\"minecraft:waxed_exposed_copper\": 113,\n\t\t\"minecraft:andesite\": 6,\n\t\t\"minecraft:bone_block\": 520,\n\t\t\"minecraft:red_sand\": 60,\n\t\t\"minecraft:andesite_stairs\": 631,\n\t\t\"minecraft:music_disc_cat\": 1169,\n\t\t\"minecraft:chiseled_tuff\": 16,\n\t\t\"minecraft:dark_oak_trapdoor\": 737,\n\t\t\"minecraft:glow_berries\": 1217,\n\t\t\"minecraft:iron_door\": 710,\n\t\t\"minecraft:polished_tuff_stairs\": 19,\n\t\t\"minecraft:air\": 0,\n\t\t\"minecraft:blue_candle\": 1253,\n\t\t\"minecraft:jungle_hanging_sign\": 900,\n\t\t\"minecraft:sculk_shrieker\": 374,\n\t\t\"minecraft:damaged_anvil\": 421,\n\t\t\"minecraft:red_dye\": 958,\n\t\t\"minecraft:waxed_weathered_cut_copper_slab\": 130,\n\t\t\"minecraft:bat_spawn_egg\": 1011,\n\t\t\"minecraft:crimson_hyphae\": 174,\n\t\t\"minecraft:torchflower_seeds\": 1152,\n\t\t\"minecraft:acacia_fence\": 315,\n\t\t\"minecraft:gray_stained_glass_pane\": 494,\n\t\t\"minecraft:golden_shovel\": 829,\n\t\t\"minecraft:honey_block\": 665,\n\t\t\"minecraft:raw_gold_block\": 84,\n\t\t\"minecraft:red_bed\": 978,\n\t\t\"minecraft:spider_eye\": 1000,\n\t\t\"minecraft:yellow_banner\": 1137,\n\t\t\"minecraft:black_stained_glass\": 486,\n\t\t\"minecraft:gold_ingot\": 815,\n\t\t\"minecraft:lime_concrete_powder\": 576,\n\t\t\"minecraft:purple_glazed_terracotta\": 549,\n\t\t\"minecraft:purple_stained_glass\": 481,\n\t\t\"minecraft:red_nether_brick_slab\": 649,\n\t\t\"minecraft:waxed_copper_grate\": 1315,\n\t\t\"minecraft:zombie_villager_spawn_egg\": 1086,\n\t\t\"minecraft:cake\": 963,\n\t\t\"minecraft:enchanted_book\": 1114,\n\t\t\"minecraft:yellow_concrete_powder\": 575,\n\t\t\"minecraft:brewer_pottery_sherd\": 1292,\n\t\t\"minecraft:powder_snow_bucket\": 911,\n\t\t\"minecraft:tube_coral_block\": 594,\n\t\t\"minecraft:deepslate_diamond_ore\": 77,\n\t\t\"minecraft:snout_armor_trim_smithing_template\": 1278,\n\t\t\"minecraft:red_sandstone_stairs\": 513,\n\t\t\"minecraft:stripped_mangrove_log\": 152,\n\t\t\"minecraft:yellow_dye\": 948,\n\t\t\"minecraft:beetroot_soup\": 1156,\n\t\t\"minecraft:golden_leggings\": 874,\n\t\t\"minecraft:bamboo_stairs\": 391,\n\t\t\"minecraft:exposed_cut_copper_stairs\": 105,\n\t\t\"minecraft:diamond_shovel\": 839,\n\t\t\"minecraft:magenta_concrete_powder\": 573,\n\t\t\"minecraft:packed_mud\": 344,\n\t\t\"minecraft:peony\": 468,\n\t\t\"minecraft:cooked_beef\": 989,\n\t\t\"minecraft:diamond_block\": 91,\n\t\t\"minecraft:sunflower\": 465,\n\t\t\"minecraft:note_block\": 681,\n\t\t\"minecraft:polished_blackstone_brick_stairs\": 1238,\n\t\t\"minecraft:soul_torch\": 331,\n\t\t\"minecraft:weathered_copper_trapdoor\": 744,\n\t\t\"minecraft:yellow_concrete\": 559,\n\t\t\"minecraft:green_wool\": 215,\n\t\t\"minecraft:skeleton_horse_spawn_egg\": 1062,\n\t\t\"minecraft:magenta_shulker_box\": 525,\n\t\t\"minecraft:polished_tuff_slab\": 18,\n\t\t\"minecraft:sea_lantern\": 509,\n\t\t\"minecraft:zombified_piglin_spawn_egg\": 1087,\n\t\t\"minecraft:dark_oak_boat\": 786,\n\t\t\"minecraft:flower_banner_pattern\": 1195,\n\t\t\"minecraft:light_blue_carpet\": 449,\n\t\t\"minecraft:mangrove_trapdoor\": 738,\n\t\t\"minecraft:blaze_rod\": 994,\n\t\t\"minecraft:deepslate_redstone_ore\": 71,\n\t\t\"minecraft:diamond_ore\": 76,\n\t\t\"minecraft:fox_spawn_egg\": 1031,\n\t\t\"minecraft:gunpowder\": 852,\n\t\t\"minecraft:prismarine_brick_stairs\": 507,\n\t\t\"minecraft:cherry_leaves\": 181,\n\t\t\"minecraft:cut_copper\": 100,\n\t\t\"minecraft:pumpkin_pie\": 1111,\n\t\t\"minecraft:allay_spawn_egg\": 1009,\n\t\t\"minecraft:pearlescent_froglight\": 1265,\n\t\t\"minecraft:cherry_wood\": 171,\n\t\t\"minecraft:muddy_mangrove_roots\": 141,\n\t\t\"minecraft:music_disc_wait\": 1181,\n\t\t\"minecraft:acacia_log\": 136,\n\t\t\"minecraft:axolotl_bucket\": 919,\n\t\t\"minecraft:light_gray_stained_glass\": 479,\n\t\t\"minecraft:waxed_oxidized_copper\": 115,\n\t\t\"minecraft:emerald_ore\": 72,\n\t\t\"minecraft:light_blue_glazed_terracotta\": 542,\n\t\t\"minecraft:heartbreak_pottery_sherd\": 1300,\n\t\t\"minecraft:jungle_button\": 687,\n\t\t\"minecraft:mojang_banner_pattern\": 1198,\n\t\t\"minecraft:waxed_oxidized_copper_trapdoor\": 749,\n\t\t\"minecraft:white_concrete_powder\": 571,\n\t\t\"minecraft:crimson_pressure_plate\": 708,\n\t\t\"minecraft:cut_red_sandstone\": 512,\n\t\t\"minecraft:dragon_egg\": 379,\n\t\t\"minecraft:glowstone_dust\": 934,\n\t\t\"minecraft:music_disc_strad\": 1178,\n\t\t\"minecraft:warped_hanging_sign\": 907,\n\t\t\"minecraft:waxed_chiseled_copper\": 116,\n\t\t\"minecraft:weathered_chiseled_copper\": 98,\n\t\t\"minecraft:armadillo_scute\": 796,\n\t\t\"minecraft:baked_potato\": 1099,\n\t\t\"minecraft:yellow_terracotta\": 431,\n\t\t\"minecraft:slime_block\": 664,\n\t\t\"minecraft:jungle_chest_boat\": 781,\n\t\t\"minecraft:piston\": 662,\n\t\t\"minecraft:light_blue_dye\": 947,\n\t\t\"minecraft:nether_brick\": 1115,\n\t\t\"minecraft:netherite_shovel\": 844,\n\t\t\"minecraft:purple_concrete_powder\": 581,\n\t\t\"minecraft:smooth_quartz\": 281,\n\t\t\"minecraft:frogspawn\": 1266,\n\t\t\"minecraft:ice\": 306,\n\t\t\"minecraft:brown_concrete\": 567,\n\t\t\"minecraft:chipped_anvil\": 420,\n\t\t\"minecraft:green_shulker_box\": 536,\n\t\t\"minecraft:prismarine\": 503,\n\t\t\"minecraft:stripped_spruce_log\": 146,\n\t\t\"minecraft:weathered_cut_copper_slab\": 110,\n\t\t\"minecraft:birch_planks\": 38,\n\t\t\"minecraft:blast_furnace\": 1207,\n\t\t\"minecraft:friend_pottery_sherd\": 1297,\n\t\t\"minecraft:map\": 1101,\n\t\t\"minecraft:polished_blackstone\": 1232,\n\t\t\"minecraft:sandstone\": 191,\n\t\t\"minecraft:waxed_copper_block\": 112,\n\t\t\"minecraft:wolf_spawn_egg\": 1082,\n\t\t\"minecraft:brown_candle\": 1254,\n\t\t\"minecraft:cat_spawn_egg\": 1016,\n\t\t\"minecraft:lime_dye\": 949,\n\t\t\"minecraft:polished_andesite_stairs\": 633,\n\t\t\"minecraft:polished_granite\": 3,\n\t\t\"minecraft:stripped_cherry_log\": 150,\n\t\t\"minecraft:tall_grass\": 469,\n\t\t\"minecraft:chest\": 299,\n\t\t\"minecraft:dead_brain_coral_fan\": 615,\n\t\t\"minecraft:oak_leaves\": 176,\n\t\t\"minecraft:ravager_spawn_egg\": 1056,\n\t\t\"minecraft:spruce_door\": 712,\n\t\t\"minecraft:string\": 850,\n\t\t\"minecraft:stripped_warped_stem\": 154,\n\t\t\"minecraft:waxed_exposed_copper_trapdoor\": 747,\n\t\t\"minecraft:deepslate_brick_stairs\": 637,\n\t\t\"minecraft:lapis_ore\": 74,\n\t\t\"minecraft:sandstone_slab\": 266,\n\t\t\"minecraft:tuff_bricks\": 21,\n\t\t\"minecraft:warped_trapdoor\": 741,\n\t\t\"minecraft:dragon_head\": 1108,\n\t\t\"minecraft:orange_carpet\": 447,\n\t\t\"minecraft:gray_carpet\": 453,\n\t\t\"minecraft:red_sandstone\": 510,\n\t\t\"minecraft:verdant_froglight\": 1264,\n\t\t\"minecraft:brown_mushroom\": 234,\n\t\t\"minecraft:chiseled_polished_blackstone\": 1235,\n\t\t\"minecraft:spruce_hanging_sign\": 898,\n\t\t\"minecraft:spruce_planks\": 37,\n\t\t\"minecraft:azalea\": 197,\n\t\t\"minecraft:ghast_tear\": 995,\n\t\t\"minecraft:bucket\": 908,\n\t\t\"minecraft:diorite\": 4,\n\t\t\"minecraft:oxidized_cut_copper\": 103,\n\t\t\"minecraft:waxed_weathered_copper\": 114,\n\t\t\"minecraft:armor_stand\": 1123,\n\t\t\"minecraft:black_wool\": 217,\n\t\t\"minecraft:deepslate_tile_wall\": 418,\n\t\t\"minecraft:dispenser\": 668,\n\t\t\"minecraft:smithing_table\": 1211,\n\t\t\"minecraft:stone_shovel\": 824,\n\t\t\"minecraft:white_concrete\": 555,\n\t\t\"minecraft:cobbled_deepslate_slab\": 652,\n\t\t\"minecraft:cornflower\": 228,\n\t\t\"minecraft:purpur_slab\": 277,\n\t\t\"minecraft:prismarine_stairs\": 506,\n\t\t\"minecraft:purple_dye\": 954,\n\t\t\"minecraft:purple_bed\": 974,\n\t\t\"minecraft:purple_terracotta\": 437,\n\t\t\"minecraft:creeper_spawn_egg\": 1022,\n\t\t\"minecraft:grindstone\": 1210,\n\t\t\"minecraft:end_stone_brick_wall\": 410,\n\t\t\"minecraft:light_blue_wool\": 205,\n\t\t\"minecraft:stripped_warped_hyphae\": 164,\n\t\t\"minecraft:dark_oak_slab\": 258,\n\t\t\"minecraft:fire_coral\": 602,\n\t\t\"minecraft:lantern\": 1214,\n\t\t\"minecraft:magenta_candle\": 1244,\n\t\t\"minecraft:orange_banner\": 1134,\n\t\t\"minecraft:rabbit_stew\": 1120,\n\t\t\"minecraft:smooth_red_sandstone\": 282,\n\t\t\"minecraft:sniffer_egg\": 588,\n\t\t\"minecraft:birch_stairs\": 385,\n\t\t\"minecraft:jukebox\": 310,\n\t\t\"minecraft:wild_armor_trim_smithing_template\": 1273,\n\t\t\"minecraft:glow_lichen\": 360,\n\t\t\"minecraft:white_glazed_terracotta\": 539,\n\t\t\"minecraft:blackstone_slab\": 1229,\n\t\t\"minecraft:crimson_hanging_sign\": 906,\n\t\t\"minecraft:zoglin_spawn_egg\": 1083,\n\t\t\"minecraft:rabbit_spawn_egg\": 1055,\n\t\t\"minecraft:vindicator_spawn_egg\": 1076,\n\t\t\"minecraft:quartz_stairs\": 426,\n\t\t\"minecraft:warden_spawn_egg\": 1078,\n\t\t\"minecraft:weathered_cut_copper\": 102,\n\t\t\"minecraft:deepslate_emerald_ore\": 73,\n\t\t\"minecraft:dropper\": 669,\n\t\t\"minecraft:light_gray_bed\": 972,\n\t\t\"minecraft:scrape_pottery_sherd\": 1306,\n\t\t\"minecraft:music_disc_ward\": 1179,\n\t\t\"minecraft:red_nether_brick_stairs\": 632,\n\t\t\"minecraft:soul_campfire\": 1219,\n\t\t\"minecraft:jungle_door\": 714,\n\t\t\"minecraft:oak_chest_boat\": 775,\n\t\t\"minecraft:mud\": 32,\n\t\t\"minecraft:polished_blackstone_pressure_plate\": 696,\n\t\t\"minecraft:acacia_chest_boat\": 783,\n\t\t\"minecraft:cut_copper_slab\": 108,\n\t\t\"minecraft:oak_hanging_sign\": 897,\n\t\t\"minecraft:soul_sand\": 326,\n\t\t\"minecraft:wet_sponge\": 187,\n\t\t\"minecraft:wooden_axe\": 821,\n\t\t\"minecraft:amethyst_cluster\": 1261,\n\t\t\"minecraft:light_gray_glazed_terracotta\": 547,\n\t\t\"minecraft:green_dye\": 957,\n\t\t\"minecraft:spruce_button\": 685,\n\t\t\"minecraft:weathered_copper_bulb\": 1321,\n\t\t\"minecraft:lead\": 1128,\n\t\t\"minecraft:mangrove_door\": 718,\n\t\t\"minecraft:dead_bubble_coral_block\": 591,\n\t\t\"minecraft:dune_armor_trim_smithing_template\": 1271,\n\t\t\"minecraft:explorer_pottery_sherd\": 1295,\n\t\t\"minecraft:honeycomb_block\": 1225,\n\t\t\"minecraft:music_disc_far\": 1174,\n\t\t\"minecraft:netherite_hoe\": 847,\n\t\t\"minecraft:cod_spawn_egg\": 1020,\n\t\t\"minecraft:crimson_roots\": 238,\n\t\t\"minecraft:stone_brick_slab\": 271,\n\t\t\"minecraft:rail\": 763,\n\t\t\"minecraft:small_dripleaf\": 250,\n\t\t\"minecraft:silverfish_spawn_egg\": 1060,\n\t\t\"minecraft:llama_spawn_egg\": 1041,\n\t\t\"minecraft:oxidized_chiseled_copper\": 99,\n\t\t\"minecraft:cobbled_deepslate_stairs\": 635,\n\t\t\"minecraft:cod\": 935,\n\t\t\"minecraft:sculk_catalyst\": 373,\n\t\t\"minecraft:sculk_sensor\": 675,\n\t\t\"minecraft:warped_slab\": 263,\n\t\t\"minecraft:light_blue_concrete\": 558,\n\t\t\"minecraft:moss_carpet\": 245,\n\t\t\"minecraft:oxidized_copper\": 95,\n\t\t\"minecraft:prismarine_slab\": 278,\n\t\t\"minecraft:apple\": 800,\n\t\t\"minecraft:green_stained_glass\": 484,\n\t\t\"minecraft:lapis_block\": 190,\n\t\t\"minecraft:purple_shulker_box\": 533,\n\t\t\"minecraft:snow_golem_spawn_egg\": 1065,\n\t\t\"minecraft:villager_spawn_egg\": 1075,\n\t\t\"minecraft:blue_bed\": 975,\n\t\t\"minecraft:infested_cobblestone\": 334,\n\t\t\"minecraft:arms_up_pottery_sherd\": 1290,\n\t\t\"minecraft:music_disc_stal\": 1177,\n\t\t\"minecraft:oak_boat\": 774,\n\t\t\"minecraft:spruce_trapdoor\": 732,\n\t\t\"minecraft:cooked_rabbit\": 1119,\n\t\t\"minecraft:light_gray_concrete\": 563,\n\t\t\"minecraft:daylight_detector\": 674,\n\t\t\"minecraft:beetroot_seeds\": 1155,\n\t\t\"minecraft:black_concrete_powder\": 586,\n\t\t\"minecraft:water_bucket\": 909,\n\t\t\"minecraft:milk_bucket\": 914,\n\t\t\"minecraft:smooth_stone\": 284,\n\t\t\"minecraft:brewing_stand\": 1004,\n\t\t\"minecraft:light_gray_candle\": 1250,\n\t\t\"minecraft:mace\": 1093,\n\t\t\"minecraft:magenta_concrete\": 557,\n\t\t\"minecraft:nether_brick_slab\": 273,\n\t\t\"minecraft:bamboo\": 251,\n\t\t\"minecraft:brain_coral\": 600,\n\t\t\"minecraft:cherry_pressure_plate\": 704,\n\t\t\"minecraft:cherry_slab\": 257,\n\t\t\"minecraft:chiseled_bookshelf\": 287,\n\t\t\"minecraft:cut_sandstone_slab\": 267,\n\t\t\"minecraft:deepslate_tiles\": 348,\n\t\t\"minecraft:end_stone_bricks\": 378,\n\t\t\"minecraft:ancient_debris\": 80,\n\t\t\"minecraft:brown_glazed_terracotta\": 551,\n\t\t\"minecraft:spruce_fence_gate\": 751,\n\t\t\"minecraft:firework_rocket\": 1112,\n\t\t\"minecraft:nautilus_shell\": 1190,\n\t\t\"minecraft:stripped_oak_wood\": 155,\n\t\t\"minecraft:waxed_weathered_copper_door\": 728,\n\t\t\"minecraft:carved_pumpkin\": 323,\n\t\t\"minecraft:light_blue_stained_glass_pane\": 490,\n\t\t\"minecraft:dirt_path\": 464,\n\t\t\"minecraft:purpur_block\": 295,\n\t\t\"minecraft:shears\": 983,\n\t\t\"minecraft:waxed_exposed_cut_copper_slab\": 129,\n\t\t\"minecraft:coal_block\": 81,\n\t\t\"minecraft:dark_oak_planks\": 42,\n\t\t\"minecraft:golden_hoe\": 832,\n\t\t\"minecraft:granite_slab\": 647,\n\t\t\"minecraft:orange_stained_glass_pane\": 488,\n\t\t\"minecraft:skull_pottery_sherd\": 1309,\n\t\t\"minecraft:infested_stone\": 333,\n\t\t\"minecraft:mushroom_stew\": 849,\n\t\t\"minecraft:charcoal\": 804,\n\t\t\"minecraft:cobbled_deepslate\": 9,\n\t\t\"minecraft:dead_fire_coral_block\": 592,\n\t\t\"minecraft:magenta_stained_glass_pane\": 489,\n\t\t\"minecraft:pig_spawn_egg\": 1049,\n\t\t\"minecraft:polished_blackstone_brick_wall\": 414,\n\t\t\"minecraft:brick\": 921,\n\t\t\"minecraft:calibrated_sculk_sensor\": 676,\n\t\t\"minecraft:snowball\": 912,\n\t\t\"minecraft:sculk\": 371,\n\t\t\"minecraft:spruce_leaves\": 177,\n\t\t\"minecraft:waxed_oxidized_cut_copper\": 123,\n\t\t\"minecraft:wheat\": 854,\n\t\t\"minecraft:cow_spawn_egg\": 1021,\n\t\t\"minecraft:powered_rail\": 761,\n\t\t\"minecraft:dark_oak_door\": 717,\n\t\t\"minecraft:axolotl_spawn_egg\": 1010,\n\t\t\"minecraft:chainmail_chestplate\": 861,\n\t\t\"minecraft:enderman_spawn_egg\": 1028,\n\t\t\"minecraft:light_blue_terracotta\": 430,\n\t\t\"minecraft:mangrove_chest_boat\": 789,\n\t\t\"minecraft:orange_dye\": 945,\n\t\t\"minecraft:poisonous_potato\": 1100,\n\t\t\"minecraft:recovery_compass\": 929,\n\t\t\"minecraft:bogged_spawn_egg\": 1014,\n\t\t\"minecraft:brain_coral_block\": 595,\n\t\t\"minecraft:sweet_berries\": 1216,\n\t\t\"minecraft:white_wool\": 202,\n\t\t\"minecraft:jungle_pressure_plate\": 702,\n\t\t\"minecraft:music_disc_pigstep\": 1185,\n\t\t\"minecraft:pumpkin\": 322,\n\t\t\"minecraft:smooth_stone_slab\": 265,\n\t\t\"minecraft:brick_stairs\": 361,\n\t\t\"minecraft:burn_pottery_sherd\": 1293,\n\t\t\"minecraft:zombie_spawn_egg\": 1084,\n\t\t\"minecraft:cod_bucket\": 917,\n\t\t\"minecraft:sponge\": 186,\n\t\t\"minecraft:sandstone_wall\": 409,\n\t\t\"minecraft:magenta_glazed_terracotta\": 541,\n\t\t\"minecraft:purple_concrete\": 565,\n\t\t\"minecraft:furnace\": 302,\n\t\t\"minecraft:glowstone\": 332,\n\t\t\"minecraft:netherite_scrap\": 817,\n\t\t\"minecraft:waxed_exposed_copper_door\": 727,\n\t\t\"minecraft:acacia_leaves\": 180,\n\t\t\"minecraft:barrier\": 443,\n\t\t\"minecraft:cherry_sapling\": 53,\n\t\t\"minecraft:cyan_concrete\": 564,\n\t\t\"minecraft:netherite_chestplate\": 877,\n\t\t\"minecraft:sandstone_stairs\": 380,\n\t\t\"minecraft:smooth_red_sandstone_stairs\": 622,\n\t\t\"minecraft:vex_armor_trim_smithing_template\": 1276,\n\t\t\"minecraft:birch_boat\": 778,\n\t\t\"minecraft:birch_hanging_sign\": 899,\n\t\t\"minecraft:warped_button\": 694,\n\t\t\"minecraft:strider_spawn_egg\": 1069,\n\t\t\"minecraft:tadpole_bucket\": 920,\n\t\t\"minecraft:gilded_blackstone\": 1231,\n\t\t\"minecraft:polished_blackstone_slab\": 1233,\n\t\t\"minecraft:jigsaw\": 793,\n\t\t\"minecraft:mangrove_button\": 691,\n\t\t\"minecraft:nether_brick_fence\": 369,\n\t\t\"minecraft:oak_slab\": 252,\n\t\t\"minecraft:polished_diorite\": 5,\n\t\t\"minecraft:smooth_basalt\": 330,\n\t\t\"minecraft:dried_kelp_block\": 923,\n\t\t\"minecraft:guster_banner_pattern\": 1202,\n\t\t\"minecraft:wooden_pickaxe\": 820,\n\t\t\"minecraft:pink_banner\": 1139,\n\t\t\"minecraft:magma_cream\": 1003,\n\t\t\"minecraft:medium_amethyst_bud\": 1259,\n\t\t\"minecraft:dark_oak_sign\": 892,\n\t\t\"minecraft:gold_block\": 90,\n\t\t\"minecraft:light_gray_stained_glass_pane\": 495,\n\t\t\"minecraft:lodestone\": 1226,\n\t\t\"minecraft:piglin_spawn_egg\": 1050,\n\t\t\"minecraft:bamboo_pressure_plate\": 707,\n\t\t\"minecraft:cherry_planks\": 41,\n\t\t\"minecraft:fire_charge\": 1089,\n\t\t\"minecraft:green_concrete_powder\": 584,\n\t\t\"minecraft:nether_bricks\": 366,\n\t\t\"minecraft:white_stained_glass_pane\": 487,\n\t\t\"minecraft:chiseled_deepslate\": 350,\n\t\t\"minecraft:crimson_stairs\": 393,\n\t\t\"minecraft:polished_diorite_stairs\": 624,\n\t\t\"minecraft:smooth_sandstone_slab\": 645,\n\t\t\"minecraft:tide_armor_trim_smithing_template\": 1277,\n\t\t\"minecraft:dead_brain_coral\": 604,\n\t\t\"minecraft:polar_bear_spawn_egg\": 1053,\n\t\t\"minecraft:end_portal_frame\": 376,\n\t\t\"minecraft:flower_pot\": 1096,\n\t\t\"minecraft:iron_trapdoor\": 730,\n\t\t\"minecraft:acacia_planks\": 40,\n\t\t\"minecraft:bamboo_hanging_sign\": 905,\n\t\t\"minecraft:chain_command_block\": 515,\n\t\t\"minecraft:weathered_copper_door\": 724,\n\t\t\"minecraft:large_fern\": 470,\n\t\t\"minecraft:loom\": 1194,\n\t\t\"minecraft:melon_seeds\": 987,\n\t\t\"minecraft:tube_coral_fan\": 609,\n\t\t\"minecraft:dark_prismarine_slab\": 280,\n\t\t\"minecraft:egg\": 927,\n\t\t\"minecraft:cyan_candle\": 1251,\n\t\t\"minecraft:jungle_sign\": 889,\n\t\t\"minecraft:leather_helmet\": 856,\n\t\t\"minecraft:music_disc_11\": 1180,\n\t\t\"minecraft:vine\": 359,\n\t\t\"minecraft:compass\": 928,\n\t\t\"minecraft:cooked_chicken\": 991,\n\t\t\"minecraft:lectern\": 670,\n\t\t\"minecraft:mud_brick_slab\": 272,\n\t\t\"minecraft:parrot_spawn_egg\": 1047,\n\t\t\"minecraft:trident\": 1188,\n\t\t\"minecraft:waxed_cut_copper_slab\": 128,\n\t\t\"minecraft:waxed_oxidized_copper_door\": 729,\n\t\t\"minecraft:angler_pottery_sherd\": 1288,\n\t\t\"minecraft:dark_prismarine_stairs\": 508,\n\t\t\"minecraft:jungle_wood\": 169,\n\t\t\"minecraft:oak_planks\": 36,\n\t\t\"minecraft:polished_andesite\": 7,\n\t\t\"minecraft:arrow\": 802,\n\t\t\"minecraft:cherry_fence_gate\": 755,\n\t\t\"minecraft:blue_banner\": 1144,\n\t\t\"minecraft:breeze_rod\": 1332,\n\t\t\"minecraft:host_armor_trim_smithing_template\": 1285,\n\t\t\"minecraft:mangrove_boat\": 788,\n\t\t\"minecraft:minecart\": 766,\n\t\t\"minecraft:suspicious_sand\": 58,\n\t\t\"minecraft:wandering_trader_spawn_egg\": 1077,\n\t\t\"minecraft:cyan_glazed_terracotta\": 548,\n\t\t\"minecraft:dark_oak_pressure_plate\": 705,\n\t\t\"minecraft:copper_grate\": 1311,\n\t\t\"minecraft:netherite_boots\": 879,\n\t\t\"minecraft:pink_stained_glass\": 477,\n\t\t\"minecraft:waxed_exposed_copper_grate\": 1316,\n\t\t\"minecraft:chiseled_tuff_bricks\": 25,\n\t\t\"minecraft:chorus_fruit\": 1150,\n\t},\n}"
  },
  {
    "path": "server/registry/item_sub_predicate_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar ItemSubPredicateType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:potion_contents\": 3,\n\t\t\"minecraft:stored_enchantments\": 2,\n\t\t\"minecraft:trim\": 12,\n\t\t\"minecraft:written_book_content\": 10,\n\t\t\"minecraft:container\": 5,\n\t\t\"minecraft:firework_explosion\": 7,\n\t\t\"minecraft:fireworks\": 8,\n\t\t\"minecraft:bundle_contents\": 6,\n\t\t\"minecraft:enchantments\": 1,\n\t\t\"minecraft:writable_book_content\": 9,\n\t\t\"minecraft:attribute_modifiers\": 11,\n\t\t\"minecraft:custom_data\": 4,\n\t\t\"minecraft:jukebox_playable\": 13,\n\t\t\"minecraft:damage\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/loot_condition_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootConditionType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:all_of\": 2,\n\t\t\"minecraft:block_state_property\": 8,\n\t\t\"minecraft:entity_properties\": 5,\n\t\t\"minecraft:table_bonus\": 10,\n\t\t\"minecraft:time_check\": 16,\n\t\t\"minecraft:value_check\": 17,\n\t\t\"minecraft:weather_check\": 14,\n\t\t\"minecraft:enchantment_active_check\": 18,\n\t\t\"minecraft:killed_by_player\": 6,\n\t\t\"minecraft:match_tool\": 9,\n\t\t\"minecraft:random_chance\": 3,\n\t\t\"minecraft:survives_explosion\": 11,\n\t\t\"minecraft:any_of\": 1,\n\t\t\"minecraft:location_check\": 13,\n\t\t\"minecraft:reference\": 15,\n\t\t\"minecraft:damage_source_properties\": 12,\n\t\t\"minecraft:entity_scores\": 7,\n\t\t\"minecraft:inverted\": 0,\n\t\t\"minecraft:random_chance_with_enchanted_bonus\": 4,\n\t},\n}"
  },
  {
    "path": "server/registry/loot_function_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootFunctionType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:set_banner_pattern\": 26,\n\t\t\"minecraft:set_components\": 6,\n\t\t\"minecraft:set_instrument\": 28,\n\t\t\"minecraft:set_item\": 1,\n\t\t\"minecraft:copy_state\": 25,\n\t\t\"minecraft:exploration_map\": 12,\n\t\t\"minecraft:limit_count\": 18,\n\t\t\"minecraft:set_enchantments\": 4,\n\t\t\"minecraft:set_potion\": 27,\n\t\t\"minecraft:apply_bonus\": 19,\n\t\t\"minecraft:copy_name\": 14,\n\t\t\"minecraft:modify_contents\": 16,\n\t\t\"minecraft:set_attributes\": 10,\n\t\t\"minecraft:set_writable_book_pages\": 36,\n\t\t\"minecraft:explosion_decay\": 21,\n\t\t\"minecraft:filtered\": 17,\n\t\t\"minecraft:enchanted_count_increase\": 8,\n\t\t\"minecraft:sequence\": 30,\n\t\t\"minecraft:set_count\": 0,\n\t\t\"minecraft:set_custom_model_data\": 39,\n\t\t\"minecraft:set_loot_table\": 20,\n\t\t\"minecraft:set_stew_effect\": 13,\n\t\t\"minecraft:enchant_with_levels\": 2,\n\t\t\"minecraft:set_name\": 11,\n\t\t\"minecraft:toggle_tooltips\": 37,\n\t\t\"minecraft:copy_components\": 31,\n\t\t\"minecraft:enchant_randomly\": 3,\n\t\t\"minecraft:reference\": 29,\n\t\t\"minecraft:set_book_cover\": 34,\n\t\t\"minecraft:set_contents\": 15,\n\t\t\"minecraft:set_damage\": 9,\n\t\t\"minecraft:set_firework_explosion\": 33,\n\t\t\"minecraft:set_written_book_pages\": 35,\n\t\t\"minecraft:copy_custom_data\": 24,\n\t\t\"minecraft:fill_player_head\": 23,\n\t\t\"minecraft:furnace_smelt\": 7,\n\t\t\"minecraft:set_custom_data\": 5,\n\t\t\"minecraft:set_fireworks\": 32,\n\t\t\"minecraft:set_lore\": 22,\n\t\t\"minecraft:set_ominous_bottle_amplifier\": 38,\n\t},\n}"
  },
  {
    "path": "server/registry/loot_nbt_provider_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootNbtProviderType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:storage\": 0,\n\t\t\"minecraft:context\": 1,\n\t},\n}"
  },
  {
    "path": "server/registry/loot_number_provider_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootNumberProviderType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:binomial\": 2,\n\t\t\"minecraft:constant\": 0,\n\t\t\"minecraft:enchantment_level\": 5,\n\t\t\"minecraft:score\": 3,\n\t\t\"minecraft:storage\": 4,\n\t\t\"minecraft:uniform\": 1,\n\t},\n}"
  },
  {
    "path": "server/registry/loot_pool_entry_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootPoolEntryType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:group\": 7,\n\t\t\"minecraft:item\": 1,\n\t\t\"minecraft:loot_table\": 2,\n\t\t\"minecraft:sequence\": 6,\n\t\t\"minecraft:tag\": 4,\n\t\t\"minecraft:alternatives\": 5,\n\t\t\"minecraft:dynamic\": 3,\n\t\t\"minecraft:empty\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/loot_score_provider_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar LootScoreProviderType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:context\": 1,\n\t\t\"minecraft:fixed\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/map_decoration_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar MapDecorationType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:banner_gray\": 17,\n\t\t\"minecraft:banner_red\": 24,\n\t\t\"minecraft:banner_yellow\": 14,\n\t\t\"minecraft:blue_marker\": 3,\n\t\t\"minecraft:village_plains\": 28,\n\t\t\"minecraft:village_taiga\": 31,\n\t\t\"minecraft:banner_brown\": 22,\n\t\t\"minecraft:village_snowy\": 30,\n\t\t\"minecraft:banner_green\": 23,\n\t\t\"minecraft:banner_magenta\": 12,\n\t\t\"minecraft:target_x\": 4,\n\t\t\"minecraft:village_desert\": 27,\n\t\t\"minecraft:banner_blue\": 21,\n\t\t\"minecraft:banner_cyan\": 19,\n\t\t\"minecraft:banner_light_gray\": 18,\n\t\t\"minecraft:banner_pink\": 16,\n\t\t\"minecraft:frame\": 1,\n\t\t\"minecraft:jungle_temple\": 32,\n\t\t\"minecraft:player\": 0,\n\t\t\"minecraft:banner_light_blue\": 13,\n\t\t\"minecraft:banner_purple\": 20,\n\t\t\"minecraft:banner_white\": 10,\n\t\t\"minecraft:red_marker\": 2,\n\t\t\"minecraft:village_savanna\": 29,\n\t\t\"minecraft:trial_chambers\": 34,\n\t\t\"minecraft:banner_black\": 25,\n\t\t\"minecraft:banner_orange\": 11,\n\t\t\"minecraft:player_off_limits\": 7,\n\t\t\"minecraft:player_off_map\": 6,\n\t\t\"minecraft:red_x\": 26,\n\t\t\"minecraft:target_point\": 5,\n\t\t\"minecraft:banner_lime\": 15,\n\t\t\"minecraft:mansion\": 8,\n\t\t\"minecraft:monument\": 9,\n\t\t\"minecraft:swamp_hut\": 33,\n\t},\n}"
  },
  {
    "path": "server/registry/memory_module_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar MemoryModuleType = Registry{\n\tDefault: \"minecraft:dummy\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:nearby_adult_piglins\": 65,\n\t\t\"minecraft:breeze_shoot_recover\": 101,\n\t\t\"minecraft:dummy\": 0,\n\t\t\"minecraft:nearest_targetable_player_not_wearing_gold\": 64,\n\t\t\"minecraft:sonic_boom_sound_delay\": 89,\n\t\t\"minecraft:touch_cooldown\": 85,\n\t\t\"minecraft:walk_target\": 12,\n\t\t\"minecraft:attack_target\": 14,\n\t\t\"minecraft:is_sniffing\": 79,\n\t\t\"minecraft:is_tempted\": 43,\n\t\t\"minecraft:nearest_hostile\": 26,\n\t\t\"minecraft:time_trying_to_reach_admire_item\": 56,\n\t\t\"minecraft:attack_cooling_down\": 15,\n\t\t\"minecraft:golem_detected_recently\": 31,\n\t\t\"minecraft:universal_anger\": 54,\n\t\t\"minecraft:has_hunting_cooldown\": 46,\n\t\t\"minecraft:item_pickup_cooldown_ticks\": 93,\n\t\t\"minecraft:pacified\": 75,\n\t\t\"minecraft:sonic_boom_cooldown\": 87,\n\t\t\"minecraft:breeze_jump_inhaling\": 103,\n\t\t\"minecraft:interactable_doors\": 20,\n\t\t\"minecraft:breeze_shoot_charging\": 100,\n\t\t\"minecraft:danger_detected_recently\": 32,\n\t\t\"minecraft:is_panicking\": 51,\n\t\t\"minecraft:roar_target\": 76,\n\t\t\"minecraft:breeze_shoot_cooldown\": 102,\n\t\t\"minecraft:liked_noteblock\": 91,\n\t\t\"minecraft:ram_target\": 48,\n\t\t\"minecraft:sniffer_sniffing_target\": 95,\n\t\t\"minecraft:nearest_visible_baby_hoglin\": 63,\n\t\t\"minecraft:celebrate_location\": 60,\n\t\t\"minecraft:sniffer_explored_positions\": 94,\n\t\t\"minecraft:sniffer_happy\": 97,\n\t\t\"minecraft:visible_adult_hoglin_count\": 71,\n\t\t\"minecraft:potential_job_site\": 3,\n\t\t\"minecraft:last_woken\": 34,\n\t\t\"minecraft:liked_noteblock_cooldown_ticks\": 92,\n\t\t\"minecraft:mobs\": 6,\n\t\t\"minecraft:disturbance_location\": 77,\n\t\t\"minecraft:disable_walk_to_admire_item\": 57,\n\t\t\"minecraft:doors_to_close\": 21,\n\t\t\"minecraft:is_pregnant\": 50,\n\t\t\"minecraft:nearest_visible_adult\": 36,\n\t\t\"minecraft:breeze_jump_target\": 104,\n\t\t\"minecraft:last_worked_at_poi\": 35,\n\t\t\"minecraft:unreachable_tongue_targets\": 52,\n\t\t\"minecraft:breeze_leaving_water\": 105,\n\t\t\"minecraft:ate_recently\": 73,\n\t\t\"minecraft:heard_bell_time\": 29,\n\t\t\"minecraft:secondary_job_site\": 5,\n\t\t\"minecraft:breeze_jump_cooldown\": 98,\n\t\t\"minecraft:hiding_place\": 28,\n\t\t\"minecraft:vibration_cooldown\": 86,\n\t\t\"minecraft:nearest_visible_huntable_hoglin\": 62,\n\t\t\"minecraft:ride_target\": 18,\n\t\t\"minecraft:hunted_recently\": 59,\n\t\t\"minecraft:sonic_boom_sound_cooldown\": 88,\n\t\t\"minecraft:nearest_visible_adult_piglin\": 68,\n\t\t\"minecraft:cant_reach_walk_target_since\": 30,\n\t\t\"minecraft:is_emerging\": 80,\n\t\t\"minecraft:long_jump_cooling_down\": 44,\n\t\t\"minecraft:nearest_visible_nemesis\": 38,\n\t\t\"minecraft:visible_villager_babies\": 8,\n\t\t\"minecraft:admiring_disabled\": 58,\n\t\t\"minecraft:nearest_visible_adult_piglins\": 66,\n\t\t\"minecraft:recent_projectile\": 78,\n\t\t\"minecraft:temptation_cooldown_ticks\": 41,\n\t\t\"minecraft:visible_adult_piglin_count\": 70,\n\t\t\"minecraft:breeze_shoot\": 99,\n\t\t\"minecraft:is_in_water\": 49,\n\t\t\"minecraft:nearest_visible_zombified\": 69,\n\t\t\"minecraft:roar_sound_delay\": 81,\n\t\t\"minecraft:home\": 1,\n\t\t\"minecraft:nearest_bed\": 22,\n\t\t\"minecraft:hurt_by\": 23,\n\t\t\"minecraft:nearest_player_holding_wanted_item\": 72,\n\t\t\"minecraft:sniff_cooldown\": 84,\n\t\t\"minecraft:meeting_point\": 4,\n\t\t\"minecraft:last_slept\": 33,\n\t\t\"minecraft:hurt_by_entity\": 24,\n\t\t\"minecraft:interaction_target\": 16,\n\t\t\"minecraft:job_site\": 2,\n\t\t\"minecraft:look_target\": 13,\n\t\t\"minecraft:nearest_repellent\": 74,\n\t\t\"minecraft:play_dead_ticks\": 39,\n\t\t\"minecraft:visible_mobs\": 7,\n\t\t\"minecraft:path\": 19,\n\t\t\"minecraft:breed_target\": 17,\n\t\t\"minecraft:sniffer_digging\": 96,\n\t\t\"minecraft:tempting_player\": 40,\n\t\t\"minecraft:gaze_cooldown_ticks\": 42,\n\t\t\"minecraft:nearest_visible_wanted_item\": 37,\n\t\t\"minecraft:dig_cooldown\": 82,\n\t\t\"minecraft:liked_player\": 90,\n\t\t\"minecraft:nearest_attackable\": 27,\n\t\t\"minecraft:nearest_visible_player\": 10,\n\t\t\"minecraft:roar_sound_cooldown\": 83,\n\t\t\"minecraft:angry_at\": 53,\n\t\t\"minecraft:dancing\": 61,\n\t\t\"minecraft:long_jump_mid_jump\": 45,\n\t\t\"minecraft:nearest_visible_targetable_player\": 11,\n\t\t\"minecraft:ram_cooldown_ticks\": 47,\n\t\t\"minecraft:avoid_target\": 25,\n\t\t\"minecraft:nearest_players\": 9,\n\t\t\"minecraft:nearest_visible_adult_hoglins\": 67,\n\t\t\"minecraft:admiring_item\": 55,\n\t},\n}"
  },
  {
    "path": "server/registry/menu.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Menu = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:smoker\": 22,\n\t\t\"minecraft:crafter_3x3\": 7,\n\t\t\"minecraft:generic_9x1\": 0,\n\t\t\"minecraft:generic_9x3\": 2,\n\t\t\"minecraft:generic_9x5\": 4,\n\t\t\"minecraft:generic_9x6\": 5,\n\t\t\"minecraft:shulker_box\": 20,\n\t\t\"minecraft:stonecutter\": 24,\n\t\t\"minecraft:beacon\": 9,\n\t\t\"minecraft:crafting\": 12,\n\t\t\"minecraft:furnace\": 14,\n\t\t\"minecraft:generic_9x2\": 1,\n\t\t\"minecraft:generic_9x4\": 3,\n\t\t\"minecraft:grindstone\": 15,\n\t\t\"minecraft:cartography_table\": 23,\n\t\t\"minecraft:enchantment\": 13,\n\t\t\"minecraft:hopper\": 16,\n\t\t\"minecraft:lectern\": 17,\n\t\t\"minecraft:smithing\": 21,\n\t\t\"minecraft:anvil\": 8,\n\t\t\"minecraft:blast_furnace\": 10,\n\t\t\"minecraft:brewing_stand\": 11,\n\t\t\"minecraft:generic_3x3\": 6,\n\t\t\"minecraft:loom\": 18,\n\t\t\"minecraft:merchant\": 19,\n\t},\n}"
  },
  {
    "path": "server/registry/mob_effect.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar MobEffect = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:jump_boost\": 7,\n\t\t\"minecraft:wither\": 19,\n\t\t\"minecraft:hero_of_the_village\": 31,\n\t\t\"minecraft:invisibility\": 13,\n\t\t\"minecraft:slow_falling\": 27,\n\t\t\"minecraft:strength\": 4,\n\t\t\"minecraft:weaving\": 36,\n\t\t\"minecraft:darkness\": 32,\n\t\t\"minecraft:unluck\": 26,\n\t\t\"minecraft:wind_charged\": 35,\n\t\t\"minecraft:dolphins_grace\": 29,\n\t\t\"minecraft:health_boost\": 20,\n\t\t\"minecraft:instant_health\": 5,\n\t\t\"minecraft:oozing\": 37,\n\t\t\"minecraft:raid_omen\": 34,\n\t\t\"minecraft:hunger\": 16,\n\t\t\"minecraft:instant_damage\": 6,\n\t\t\"minecraft:nausea\": 8,\n\t\t\"minecraft:speed\": 0,\n\t\t\"minecraft:weakness\": 17,\n\t\t\"minecraft:water_breathing\": 12,\n\t\t\"minecraft:bad_omen\": 30,\n\t\t\"minecraft:levitation\": 24,\n\t\t\"minecraft:mining_fatigue\": 3,\n\t\t\"minecraft:night_vision\": 15,\n\t\t\"minecraft:regeneration\": 9,\n\t\t\"minecraft:slowness\": 1,\n\t\t\"minecraft:absorption\": 21,\n\t\t\"minecraft:glowing\": 23,\n\t\t\"minecraft:luck\": 25,\n\t\t\"minecraft:poison\": 18,\n\t\t\"minecraft:saturation\": 22,\n\t\t\"minecraft:resistance\": 10,\n\t\t\"minecraft:trial_omen\": 33,\n\t\t\"minecraft:blindness\": 14,\n\t\t\"minecraft:conduit_power\": 28,\n\t\t\"minecraft:fire_resistance\": 11,\n\t\t\"minecraft:haste\": 2,\n\t\t\"minecraft:infested\": 38,\n\t},\n}"
  },
  {
    "path": "server/registry/number_format_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar NumberFormatType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:blank\": 0,\n\t\t\"minecraft:fixed\": 2,\n\t\t\"minecraft:styled\": 1,\n\t},\n}"
  },
  {
    "path": "server/registry/particle_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar ParticleType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:item_snowball\": 48,\n\t\t\"minecraft:white_smoke\": 57,\n\t\t\"minecraft:dripping_honey\": 73,\n\t\t\"minecraft:dripping_lava\": 8,\n\t\t\"minecraft:item\": 44,\n\t\t\"minecraft:sonic_boom\": 27,\n\t\t\"minecraft:cherry_leaves\": 33,\n\t\t\"minecraft:dust\": 13,\n\t\t\"minecraft:falling_obsidian_tear\": 83,\n\t\t\"minecraft:witch\": 65,\n\t\t\"minecraft:dripping_obsidian_tear\": 82,\n\t\t\"minecraft:explosion\": 22,\n\t\t\"minecraft:item_slime\": 46,\n\t\t\"minecraft:mycelium\": 51,\n\t\t\"minecraft:end_rod\": 19,\n\t\t\"minecraft:gust_emitter_large\": 25,\n\t\t\"minecraft:shriek\": 99,\n\t\t\"minecraft:electric_spark\": 97,\n\t\t\"minecraft:falling_dripstone_water\": 92,\n\t\t\"minecraft:landing_obsidian_tear\": 84,\n\t\t\"minecraft:vault_connection\": 104,\n\t\t\"minecraft:dripping_dripstone_lava\": 89,\n\t\t\"minecraft:falling_lava\": 9,\n\t\t\"minecraft:current_down\": 67,\n\t\t\"minecraft:snowflake\": 88,\n\t\t\"minecraft:ash\": 78,\n\t\t\"minecraft:campfire_signal_smoke\": 72,\n\t\t\"minecraft:spore_blossom_air\": 81,\n\t\t\"minecraft:trial_omen\": 108,\n\t\t\"minecraft:heart\": 42,\n\t\t\"minecraft:large_smoke\": 49,\n\t\t\"minecraft:trial_spawner_detection_ominous\": 103,\n\t\t\"minecraft:wax_off\": 96,\n\t\t\"minecraft:white_ash\": 86,\n\t\t\"minecraft:egg_crack\": 100,\n\t\t\"minecraft:flash\": 39,\n\t\t\"minecraft:totem_of_undying\": 62,\n\t\t\"minecraft:falling_dust\": 28,\n\t\t\"minecraft:dolphin\": 70,\n\t\t\"minecraft:dragon_breath\": 7,\n\t\t\"minecraft:gust\": 23,\n\t\t\"minecraft:landing_lava\": 10,\n\t\t\"minecraft:bubble_column_up\": 68,\n\t\t\"minecraft:crit\": 5,\n\t\t\"minecraft:small_gust\": 24,\n\t\t\"minecraft:effect\": 15,\n\t\t\"minecraft:sculk_charge_pop\": 36,\n\t\t\"minecraft:splash\": 64,\n\t\t\"minecraft:smoke\": 56,\n\t\t\"minecraft:block\": 1,\n\t\t\"minecraft:fishing\": 30,\n\t\t\"minecraft:infested\": 32,\n\t\t\"minecraft:rain\": 55,\n\t\t\"minecraft:wax_on\": 95,\n\t\t\"minecraft:angry_villager\": 0,\n\t\t\"minecraft:elder_guardian\": 16,\n\t\t\"minecraft:dust_color_transition\": 14,\n\t\t\"minecraft:reverse_portal\": 85,\n\t\t\"minecraft:dripping_water\": 11,\n\t\t\"minecraft:entity_effect\": 20,\n\t\t\"minecraft:happy_villager\": 40,\n\t\t\"minecraft:portal\": 54,\n\t\t\"minecraft:sweep_attack\": 61,\n\t\t\"minecraft:bubble\": 3,\n\t\t\"minecraft:enchanted_hit\": 17,\n\t\t\"minecraft:falling_honey\": 74,\n\t\t\"minecraft:nautilus\": 69,\n\t\t\"minecraft:sneeze\": 58,\n\t\t\"minecraft:dust_plume\": 101,\n\t\t\"minecraft:falling_water\": 12,\n\t\t\"minecraft:falling_dripstone_lava\": 90,\n\t\t\"minecraft:sculk_charge\": 35,\n\t\t\"minecraft:campfire_cosy_smoke\": 71,\n\t\t\"minecraft:glow_squid_ink\": 93,\n\t\t\"minecraft:vibration\": 45,\n\t\t\"minecraft:block_marker\": 2,\n\t\t\"minecraft:damage_indicator\": 6,\n\t\t\"minecraft:ominous_spawning\": 106,\n\t\t\"minecraft:poof\": 53,\n\t\t\"minecraft:falling_spore_blossom\": 77,\n\t\t\"minecraft:flame\": 31,\n\t\t\"minecraft:soul_fire_flame\": 37,\n\t\t\"minecraft:spit\": 59,\n\t\t\"minecraft:bubble_pop\": 66,\n\t\t\"minecraft:explosion_emitter\": 21,\n\t\t\"minecraft:warped_spore\": 80,\n\t\t\"minecraft:falling_nectar\": 76,\n\t\t\"minecraft:trial_spawner_detection\": 102,\n\t\t\"minecraft:gust_emitter_small\": 26,\n\t\t\"minecraft:sculk_soul\": 34,\n\t\t\"minecraft:cloud\": 4,\n\t\t\"minecraft:enchant\": 18,\n\t\t\"minecraft:firework\": 29,\n\t\t\"minecraft:raid_omen\": 107,\n\t\t\"minecraft:note\": 52,\n\t\t\"minecraft:small_flame\": 87,\n\t\t\"minecraft:underwater\": 63,\n\t\t\"minecraft:crimson_spore\": 79,\n\t\t\"minecraft:dust_pillar\": 105,\n\t\t\"minecraft:glow\": 94,\n\t\t\"minecraft:landing_honey\": 75,\n\t\t\"minecraft:lava\": 50,\n\t\t\"minecraft:soul\": 38,\n\t\t\"minecraft:squid_ink\": 60,\n\t\t\"minecraft:dripping_dripstone_water\": 91,\n\t\t\"minecraft:scrape\": 98,\n\t\t\"minecraft:instant_effect\": 43,\n\t\t\"minecraft:item_cobweb\": 47,\n\t\t\"minecraft:composter\": 41,\n\t},\n}"
  },
  {
    "path": "server/registry/point_of_interest_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar PointOfInterestType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:weaponsmith\": 12,\n\t\t\"minecraft:armorer\": 0,\n\t\t\"minecraft:bee_nest\": 16,\n\t\t\"minecraft:cartographer\": 2,\n\t\t\"minecraft:fisherman\": 5,\n\t\t\"minecraft:leatherworker\": 7,\n\t\t\"minecraft:shepherd\": 10,\n\t\t\"minecraft:beehive\": 15,\n\t\t\"minecraft:fletcher\": 6,\n\t\t\"minecraft:librarian\": 8,\n\t\t\"minecraft:lightning_rod\": 19,\n\t\t\"minecraft:nether_portal\": 17,\n\t\t\"minecraft:butcher\": 1,\n\t\t\"minecraft:cleric\": 3,\n\t\t\"minecraft:lodestone\": 18,\n\t\t\"minecraft:meeting\": 14,\n\t\t\"minecraft:toolsmith\": 11,\n\t\t\"minecraft:farmer\": 4,\n\t\t\"minecraft:home\": 13,\n\t\t\"minecraft:mason\": 9,\n\t},\n}"
  },
  {
    "path": "server/registry/pos_rule_test.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar PosRuleTest = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:always_true\": 0,\n\t\t\"minecraft:axis_aligned_linear_pos\": 2,\n\t\t\"minecraft:linear_pos\": 1,\n\t},\n}"
  },
  {
    "path": "server/registry/position_source_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar PositionSourceType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:block\": 0,\n\t\t\"minecraft:state\": 1,\n\t},\n}\n"
  },
  {
    "path": "server/registry/potion.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Potion = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:long_swiftness\": 14,\n\t\t\"minecraft:luck\": 39,\n\t\t\"minecraft:poison\": 28,\n\t\t\"minecraft:long_night_vision\": 5,\n\t\t\"minecraft:long_regeneration\": 32,\n\t\t\"minecraft:night_vision\": 4,\n\t\t\"minecraft:oozing\": 44,\n\t\t\"minecraft:regeneration\": 31,\n\t\t\"minecraft:infested\": 45,\n\t\t\"minecraft:invisibility\": 6,\n\t\t\"minecraft:long_fire_resistance\": 12,\n\t\t\"minecraft:strong_harming\": 27,\n\t\t\"minecraft:strong_turtle_master\": 21,\n\t\t\"minecraft:thick\": 2,\n\t\t\"minecraft:strong_healing\": 25,\n\t\t\"minecraft:strong_slowness\": 18,\n\t\t\"minecraft:water\": 0,\n\t\t\"minecraft:weakness\": 37,\n\t\t\"minecraft:healing\": 24,\n\t\t\"minecraft:long_invisibility\": 7,\n\t\t\"minecraft:long_slow_falling\": 41,\n\t\t\"minecraft:long_strength\": 35,\n\t\t\"minecraft:slow_falling\": 40,\n\t\t\"minecraft:wind_charged\": 42,\n\t\t\"minecraft:long_leaping\": 9,\n\t\t\"minecraft:strength\": 34,\n\t\t\"minecraft:swiftness\": 13,\n\t\t\"minecraft:awkward\": 3,\n\t\t\"minecraft:fire_resistance\": 11,\n\t\t\"minecraft:harming\": 26,\n\t\t\"minecraft:strong_poison\": 30,\n\t\t\"minecraft:long_slowness\": 17,\n\t\t\"minecraft:mundane\": 1,\n\t\t\"minecraft:slowness\": 16,\n\t\t\"minecraft:long_weakness\": 38,\n\t\t\"minecraft:strong_leaping\": 10,\n\t\t\"minecraft:strong_strength\": 36,\n\t\t\"minecraft:strong_swiftness\": 15,\n\t\t\"minecraft:turtle_master\": 19,\n\t\t\"minecraft:long_poison\": 29,\n\t\t\"minecraft:long_turtle_master\": 20,\n\t\t\"minecraft:long_water_breathing\": 23,\n\t\t\"minecraft:water_breathing\": 22,\n\t\t\"minecraft:weaving\": 43,\n\t\t\"minecraft:leaping\": 8,\n\t\t\"minecraft:strong_regeneration\": 33,\n\t},\n}"
  },
  {
    "path": "server/registry/recipe_serializer.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar RecipeSerializer = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:campfire_cooking\": 18,\n\t\t\"minecraft:crafting_special_bannerduplicate\": 10,\n\t\t\"minecraft:crafting_special_firework_star\": 7,\n\t\t\"minecraft:crafting_special_mapextending\": 5,\n\t\t\"minecraft:crafting_special_tippedarrow\": 9,\n\t\t\"minecraft:smithing_transform\": 20,\n\t\t\"minecraft:stonecutting\": 19,\n\t\t\"minecraft:crafting_shapeless\": 1,\n\t\t\"minecraft:crafting_special_firework_rocket\": 6,\n\t\t\"minecraft:crafting_special_shielddecoration\": 11,\n\t\t\"minecraft:crafting_special_shulkerboxcoloring\": 12,\n\t\t\"minecraft:crafting_special_suspiciousstew\": 13,\n\t\t\"minecraft:smithing_trim\": 21,\n\t\t\"minecraft:crafting_special_mapcloning\": 4,\n\t\t\"minecraft:crafting_special_repairitem\": 14,\n\t\t\"minecraft:blasting\": 16,\n\t\t\"minecraft:crafting_decorated_pot\": 22,\n\t\t\"minecraft:crafting_shaped\": 0,\n\t\t\"minecraft:crafting_special_armordye\": 2,\n\t\t\"minecraft:crafting_special_bookcloning\": 3,\n\t\t\"minecraft:crafting_special_firework_star_fade\": 8,\n\t\t\"minecraft:smelting\": 15,\n\t\t\"minecraft:smoking\": 17,\n\t},\n}"
  },
  {
    "path": "server/registry/recipe_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar RecipeType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:campfire_cooking\": 4,\n\t\t\"minecraft:crafting\": 0,\n\t\t\"minecraft:smelting\": 1,\n\t\t\"minecraft:smithing\": 6,\n\t\t\"minecraft:smoking\": 3,\n\t\t\"minecraft:stonecutting\": 5,\n\t\t\"minecraft:blasting\": 2,\n\t},\n}"
  },
  {
    "path": "server/registry/registry.go",
    "content": "package registry\n\n// This package contains registries that are not sent to the client, meaning the ids are constants\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\n\ntype Registry struct {\n\tDefault string\n\tEntries map[string]int32\n}\n\n// Looks up the name in the registry and returns the protocol id if found, otherwise default or 0\nfunc (r Registry) Get(n string) int32 {\n\ti, _ := r.Lookup(n)\n\n\treturn i\n}\n\n// Looks up the name in the registry and returns the protocol id. If the protocol id is not found, returns the default entry and(ok=false), and if that is not found either then returns 0\nfunc (r Registry) Lookup(n string) (int32, bool) {\n\ti, ok := r.Entries[n]\n\tif !ok {\n\t\tif r.Default != \"\" {\n\t\t\ti = r.Entries[r.Default]\n\t\t}\n\t}\n\treturn i, ok\n}\n\n// Returns the name of the protocol id\nfunc (r Registry) NameOf(id int32) (string, bool) {\n\tfor n, e := range r.Entries {\n\t\tif e == id {\n\t\t\treturn n, true\n\t\t}\n\t}\n\treturn \"\", false\n}\n"
  },
  {
    "path": "server/registry/rule_block_entity_modifier.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar RuleBlockEntityModifier = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:append_loot\": 3,\n\t\t\"minecraft:append_static\": 2,\n\t\t\"minecraft:clear\": 0,\n\t\t\"minecraft:passthrough\": 1,\n\t},\n}"
  },
  {
    "path": "server/registry/rule_test.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar RuleTest = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:block_match\": 1,\n\t\t\"minecraft:blockstate_match\": 2,\n\t\t\"minecraft:random_block_match\": 4,\n\t\t\"minecraft:random_blockstate_match\": 5,\n\t\t\"minecraft:tag_match\": 3,\n\t\t\"minecraft:always_true\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/schedule.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar Schedule = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:empty\": 0,\n\t\t\"minecraft:simple\": 1,\n\t\t\"minecraft:villager_baby\": 2,\n\t\t\"minecraft:villager_default\": 3,\n\t},\n}"
  },
  {
    "path": "server/registry/sensor_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar SensorType = Registry{\n\tDefault: \"minecraft:dummy\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:armadillo_scare_detected\": 10,\n\t\t\"minecraft:breeze_attack_entity_sensor\": 25,\n\t\t\"minecraft:frog_temptations\": 18,\n\t\t\"minecraft:hurt_by\": 5,\n\t\t\"minecraft:nearest_adult\": 14,\n\t\t\"minecraft:sniffer_temptations\": 24,\n\t\t\"minecraft:villager_hostiles\": 6,\n\t\t\"minecraft:piglin_brute_specific_sensor\": 12,\n\t\t\"minecraft:axolotl_attackables\": 15,\n\t\t\"minecraft:axolotl_temptations\": 16,\n\t\t\"minecraft:camel_temptations\": 19,\n\t\t\"minecraft:dummy\": 0,\n\t\t\"minecraft:golem_detected\": 9,\n\t\t\"minecraft:nearest_bed\": 4,\n\t\t\"minecraft:nearest_items\": 1,\n\t\t\"minecraft:secondary_pois\": 8,\n\t\t\"minecraft:villager_babies\": 7,\n\t\t\"minecraft:warden_entity_sensor\": 23,\n\t\t\"minecraft:goat_temptations\": 17,\n\t\t\"minecraft:hoglin_specific_sensor\": 13,\n\t\t\"minecraft:nearest_players\": 3,\n\t\t\"minecraft:piglin_specific_sensor\": 11,\n\t\t\"minecraft:armadillo_temptations\": 20,\n\t\t\"minecraft:frog_attackables\": 21,\n\t\t\"minecraft:is_in_water\": 22,\n\t\t\"minecraft:nearest_living_entities\": 2,\n\t},\n}"
  },
  {
    "path": "server/registry/sound_event.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar SoundEvent = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:block.scaffolding.step\":                           1194,\n\t\t\"minecraft:state.fishing_bobber.throw\":                       518,\n\t\t\"minecraft:state.llama.chest\":                                786,\n\t\t\"minecraft:state.player.hurt_sweet_berry_bush\":               1113,\n\t\t\"minecraft:state.strider.ambient\":                            1302,\n\t\t\"minecraft:block.cherry_sapling.step\":                        279,\n\t\t\"minecraft:block.coral_block.place\":                          363,\n\t\t\"minecraft:state.armadillo.roll\":                             60,\n\t\t\"minecraft:state.breeze.deflect\":                             187,\n\t\t\"minecraft:state.dolphin.attack\":                             413,\n\t\t\"minecraft:state.parrot.imitate.endermite\":                   1037,\n\t\t\"minecraft:block.deepslate_tiles.step\":                       407,\n\t\t\"minecraft:block.packed_mud.place\":                           944,\n\t\t\"minecraft:state.armadillo.unroll_finish\":                    63,\n\t\t\"minecraft:state.firework_rocket.twinkle\":                    511,\n\t\t\"minecraft:state.parrot.imitate.pillager\":                    1048,\n\t\t\"minecraft:state.ravager.step\":                               1158,\n\t\t\"minecraft:item.armor.equip_gold\":                            71,\n\t\t\"minecraft:block.fungus.fall\":                                965,\n\t\t\"minecraft:block.hanging_roots.fall\":                         649,\n\t\t\"minecraft:block.nylium.place\":                               953,\n\t\t\"minecraft:state.ender_eye.launch\":                           476,\n\t\t\"minecraft:state.evoker.death\":                               494,\n\t\t\"minecraft:state.sniffer.digging\":                            1326,\n\t\t\"minecraft:state.warden.death\":                               1498,\n\t\t\"minecraft:block.amethyst_cluster.step\":                      40,\n\t\t\"minecraft:block.beehive.shear\":                              153,\n\t\t\"minecraft:block.sculk_sensor.step\":                          1214,\n\t\t\"minecraft:state.fox.bite\":                                   527,\n\t\t\"minecraft:state.frog.death\":                                 558,\n\t\t\"minecraft:state.vindicator.ambient\":                         1474,\n\t\t\"minecraft:state.witch.celebrate\":                            1533,\n\t\t\"minecraft:item.trident.return\":                              1386,\n\t\t\"minecraft:music.overworld.grove\":                            897,\n\t\t\"minecraft:block.azalea_leaves.step\":                         104,\n\t\t\"minecraft:block.note_block.harp\":                            992,\n\t\t\"minecraft:state.goat.step\":                                  627,\n\t\t\"minecraft:state.sniffer.digging_stop\":                       1327,\n\t\t\"minecraft:state.splash_potion.break\":                        1347,\n\t\t\"minecraft:state.strider.hurt\":                               1306,\n\t\t\"minecraft:state.wandering_trader.reappeared\":                1491,\n\t\t\"minecraft:item.goat_horn.sound.3\":                           709,\n\t\t\"minecraft:block.cherry_wood.hit\":                            272,\n\t\t\"minecraft:block.cherry_wood_pressure_plate.click_on\":        297,\n\t\t\"minecraft:block.composter.empty\":                            330,\n\t\t\"minecraft:block.copper.hit\":                                 349,\n\t\t\"minecraft:block.polished_tuff.hit\":                          1412,\n\t\t\"minecraft:block.suspicious_sand.fall\":                       540,\n\t\t\"minecraft:state.iron_golem.hurt\":                            751,\n\t\t\"minecraft:state.piglin.retreat\":                             1084,\n\t\t\"minecraft:state.wolf.death\":                                 1553,\n\t\t\"minecraft:block.amethyst_cluster.fall\":                      37,\n\t\t\"minecraft:block.deepslate_tiles.break\":                      403,\n\t\t\"minecraft:block.enchantment_table.use\":                      465,\n\t\t\"minecraft:block.sculk_sensor.clicking\":                      1208,\n\t\t\"minecraft:block.sweet_berry_bush.pick_berries\":              1376,\n\t\t\"minecraft:ui.toast.challenge_complete\":                      1433,\n\t\t\"minecraft:block.bamboo_wood_hanging_sign.place\":             672,\n\t\t\"minecraft:block.glass.hit\":                                  595,\n\t\t\"minecraft:block.scaffolding.place\":                          1193,\n\t\t\"minecraft:state.firework_rocket.launch\":                     509,\n\t\t\"minecraft:state.shulker.hurt\":                               1246,\n\t\t\"minecraft:state.sniffer.idle\":                               1319,\n\t\t\"minecraft:state.turtle.ambient_land\":                        1415,\n\t\t\"minecraft:ambient.underwater.loop.additions.rare\":           27,\n\t\t\"minecraft:block.end_portal.spawn\":                           490,\n\t\t\"minecraft:state.elder_guardian.hurt\":                        462,\n\t\t\"minecraft:state.generic.drink\":                              574,\n\t\t\"minecraft:state.goat.long_jump\":                             612,\n\t\t\"minecraft:state.puffer_fish.blow_up\":                        1141,\n\t\t\"minecraft:state.turtle.lay_egg\":                             1423,\n\t\t\"minecraft:state.villager.death\":                             1456,\n\t\t\"minecraft:item.armor.equip_wolf\":                            76,\n\t\t\"minecraft:item.goat_horn.sound.1\":                           707,\n\t\t\"minecraft:music.overworld.sparse_jungle\":                    915,\n\t\t\"minecraft:block.bamboo.hit\":                                 107,\n\t\t\"minecraft:block.frogspawn.break\":                            552,\n\t\t\"minecraft:block.sculk_sensor.clicking_stop\":                 1209,\n\t\t\"minecraft:block.wet_sponge.dries\":                           1525,\n\t\t\"minecraft:state.drowned.swim\":                               453,\n\t\t\"minecraft:state.hoglin.converted_to_zombified\":              693,\n\t\t\"minecraft:state.phantom.ambient\":                            1066,\n\t\t\"minecraft:state.wandering_trader.trade\":                     1492,\n\t\t\"minecraft:state.wolf.howl\":                                  1555,\n\t\t\"minecraft:block.cave_vines.fall\":                            260,\n\t\t\"minecraft:block.cherry_wood_hanging_sign.place\":             289,\n\t\t\"minecraft:state.glow_squid.hurt\":                            606,\n\t\t\"minecraft:state.item.pickup\":                                762,\n\t\t\"minecraft:music.nether.basalt_deltas\":                       893,\n\t\t\"minecraft:block.cherry_wood_door.open\":                      291,\n\t\t\"minecraft:block.suspicious_gravel.step\":                     542,\n\t\t\"minecraft:block.bamboo_wood_pressure_plate.click_on\":        125,\n\t\t\"minecraft:block.ender_chest.close\":                          466,\n\t\t\"minecraft:block.lantern.place\":                              771,\n\t\t\"minecraft:block.stem.fall\":                                  950,\n\t\t\"minecraft:block.tuff_bricks.step\":                           1409,\n\t\t\"minecraft:state.zoglin.death\":                               1582,\n\t\t\"minecraft:block.netherite_block.step\":                       977,\n\t\t\"minecraft:block.sculk.step\":                                 1201,\n\t\t\"minecraft:block.wart_block.fall\":                            975,\n\t\t\"minecraft:state.skeleton_horse.death\":                       1259,\n\t\t\"minecraft:music.overworld.cherry_grove\":                     904,\n\t\t\"minecraft:block.chiseled_bookshelf.insert\":                  311,\n\t\t\"minecraft:block.hanging_roots.hit\":                          650,\n\t\t\"minecraft:state.panda.sneeze\":                               1015,\n\t\t\"minecraft:state.slime.death_small\":                          1311,\n\t\t\"minecraft:item.axe.scrape\":                                  86,\n\t\t\"minecraft:music.nether.nether_wastes\":                       905,\n\t\t\"minecraft:block.metal.hit\":                                  818,\n\t\t\"minecraft:block.pink_petals.break\":                          836,\n\t\t\"minecraft:state.cow.death\":                                  366,\n\t\t\"minecraft:state.parrot.imitate.slime\":                       1053,\n\t\t\"minecraft:state.zombie.step\":                                1601,\n\t\t\"minecraft:item.armor.equip_elytra\":                          69,\n\t\t\"minecraft:block.roots.break\":                                565,\n\t\t\"minecraft:block.vault.close_shutter\":                        1439,\n\t\t\"minecraft:state.glow_item_frame.break\":                      600,\n\t\t\"minecraft:state.horse.breathe\":                              717,\n\t\t\"minecraft:state.leash_knot.break\":                           778,\n\t\t\"minecraft:state.wither.hurt\":                                1541,\n\t\t\"minecraft:block.suspicious_gravel.hit\":                      544,\n\t\t\"minecraft:state.arrow.hit_player\":                           83,\n\t\t\"minecraft:ambient.soul_sand_valley.mood\":                    19,\n\t\t\"minecraft:block.ancient_debris.break\":                       41,\n\t\t\"minecraft:block.candle.fall\":                                246,\n\t\t\"minecraft:block.decorated_pot.place\":                        391,\n\t\t\"minecraft:block.mangrove_roots.step\":                        813,\n\t\t\"minecraft:state.firework_rocket.large_blast\":                507,\n\t\t\"minecraft:state.firework_rocket.shoot\":                      510,\n\t\t\"minecraft:state.goat.screaming.death\":                       619,\n\t\t\"minecraft:state.husk.death\":                                 735,\n\t\t\"minecraft:state.stray.ambient\":                              1370,\n\t\t\"minecraft:block.amethyst_block.step\":                        35,\n\t\t\"minecraft:block.anvil.break\":                                46,\n\t\t\"minecraft:block.snow.step\":                                  1342,\n\t\t\"minecraft:state.puffer_fish.death\":                          1142,\n\t\t\"minecraft:state.ravager.attack\":                             1154,\n\t\t\"minecraft:state.witch.drink\":                                1535,\n\t\t\"minecraft:block.copper_bulb.hit\":                            342,\n\t\t\"minecraft:block.mangrove_roots.fall\":                        810,\n\t\t\"minecraft:block.wet_grass.place\":                            1522,\n\t\t\"minecraft:state.armor_stand.place\":                          81,\n\t\t\"minecraft:state.lightning_bolt.thunder\":                     782,\n\t\t\"minecraft:item.bottle.empty\":                                183,\n\t\t\"minecraft:block.nether_gold_ore.break\":                      1161,\n\t\t\"minecraft:block.slime_block.place\":                          1277,\n\t\t\"minecraft:block.stone_pressure_plate.click_off\":             1367,\n\t\t\"minecraft:state.axolotl.idle_air\":                           91,\n\t\t\"minecraft:state.hostile.swim\":                               732,\n\t\t\"minecraft:item.brush.brushing.gravel.complete\":              204,\n\t\t\"minecraft:item.ominous_bottle.dispose\":                      1011,\n\t\t\"minecraft:block.chiseled_bookshelf.fall\":                    309,\n\t\t\"minecraft:block.pointed_dripstone.drip_water\":               440,\n\t\t\"minecraft:state.villager.hurt\":                              1457,\n\t\t\"minecraft:block.mud_bricks.place\":                           854,\n\t\t\"minecraft:block.trial_spawner.step\":                         674,\n\t\t\"minecraft:state.parrot.imitate.phantom\":                     1045,\n\t\t\"minecraft:state.squid.death\":                                1358,\n\t\t\"minecraft:block.bamboo_wood_door.open\":                      119,\n\t\t\"minecraft:block.bone_block.break\":                           174,\n\t\t\"minecraft:block.suspicious_sand.place\":                      538,\n\t\t\"minecraft:state.mooshroom.eat\":                              827,\n\t\t\"minecraft:state.sheep.hurt\":                                 1228,\n\t\t\"minecraft:state.zombie_horse.ambient\":                       1592,\n\t\t\"minecraft:block.note_block.flute\":                           990,\n\t\t\"minecraft:block.piston.extend\":                              1098,\n\t\t\"minecraft:block.polished_deepslate.place\":                   1129,\n\t\t\"minecraft:block.sniffer_egg.plop\":                           1329,\n\t\t\"minecraft:block.tuff.place\":                                 1402,\n\t\t\"minecraft:block.tuff_bricks.fall\":                           1406,\n\t\t\"minecraft:state.piglin.step\":                                1085,\n\t\t\"minecraft:state.turtle.shamble_baby\":                        1425,\n\t\t\"minecraft:state.villager.work_toolsmith\":                    1472,\n\t\t\"minecraft:item.armor.unequip_wolf\":                          77,\n\t\t\"minecraft:item.firecharge.use\":                              504,\n\t\t\"minecraft:music_disc.chirp\":                                 875,\n\t\t\"minecraft:ambient.basalt_deltas.mood\":                       10,\n\t\t\"minecraft:block.calcite.step\":                               227,\n\t\t\"minecraft:block.chorus_flower.death\":                        317,\n\t\t\"minecraft:block.grindstone.use\":                             638,\n\t\t\"minecraft:state.fox.spit\":                                   534,\n\t\t\"minecraft:music_disc.mall\":                                  877,\n\t\t\"minecraft:block.decorated_pot.shatter\":                      392,\n\t\t\"minecraft:state.allay.death\":                                2,\n\t\t\"minecraft:state.breeze.jump\":                                192,\n\t\t\"minecraft:state.hoglin.ambient\":                             690,\n\t\t\"minecraft:state.husk.hurt\":                                  736,\n\t\t\"minecraft:state.iron_golem.death\":                           750,\n\t\t\"minecraft:state.skeleton_horse.ambient_water\":               1262,\n\t\t\"minecraft:state.warden.tendril_clicks\":                      1513,\n\t\t\"minecraft:block.candle.break\":                               244,\n\t\t\"minecraft:block.nether_ore.break\":                           1166,\n\t\t\"minecraft:block.packed_mud.step\":                            945,\n\t\t\"minecraft:block.polished_deepslate.fall\":                    1127,\n\t\t\"minecraft:state.cod.ambient\":                                325,\n\t\t\"minecraft:state.dolphin.jump\":                               417,\n\t\t\"minecraft:state.evoker.ambient\":                             491,\n\t\t\"minecraft:state.parrot.imitate.zombie\":                      1063,\n\t\t\"minecraft:state.player.hurt\":                                1109,\n\t\t\"minecraft:state.spider.hurt\":                                1345,\n\t\t\"minecraft:state.wither.shoot\":                               1542,\n\t\t\"minecraft:block.coral_block.fall\":                           361,\n\t\t\"minecraft:block.deepslate_bricks.place\":                     396,\n\t\t\"minecraft:block.dripstone_block.fall\":                       432,\n\t\t\"minecraft:block.wet_grass.fall\":                             1520,\n\t\t\"minecraft:item.flintandsteel.use\":                           519,\n\t\t\"minecraft:block.wart_block.step\":                            972,\n\t\t\"minecraft:state.breeze.hurt\":                                196,\n\t\t\"minecraft:state.piglin_brute.angry\":                         1088,\n\t\t\"minecraft:state.player.hurt_on_fire\":                        1112,\n\t\t\"minecraft:state.zombie.break_wooden_door\":                   1588,\n\t\t\"minecraft:block.moss_carpet.place\":                          834,\n\t\t\"minecraft:block.note_block.cow_bell\":                        998,\n\t\t\"minecraft:state.allay.ambient_without_item\":                 1,\n\t\t\"minecraft:state.bat.takeoff\":                                139,\n\t\t\"minecraft:state.phantom.flap\":                               1069,\n\t\t\"minecraft:state.player.small_fall\":                          1115,\n\t\t\"minecraft:state.turtle.hurt\":                                1421,\n\t\t\"minecraft:state.warden.agitated\":                            1494,\n\t\t\"minecraft:block.amethyst_cluster.place\":                     39,\n\t\t\"minecraft:block.copper_bulb.fall\":                           343,\n\t\t\"minecraft:block.decorated_pot.hit\":                          387,\n\t\t\"minecraft:block.nether_wood_hanging_sign.break\":             664,\n\t\t\"minecraft:block.note_block.imitate.ender_dragon\":            1005,\n\t\t\"minecraft:block.smoker.smoke\":                               1316,\n\t\t\"minecraft:state.cow.hurt\":                                   367,\n\t\t\"minecraft:state.rabbit.ambient\":                             1147,\n\t\t\"minecraft:item.crossbow.loading_end\":                        378,\n\t\t\"minecraft:block.anvil.fall\":                                 48,\n\t\t\"minecraft:block.polished_tuff.break\":                        1410,\n\t\t\"minecraft:block.anvil.destroy\":                              47,\n\t\t\"minecraft:block.azalea.fall\":                                96,\n\t\t\"minecraft:block.fence_gate.close\":                           502,\n\t\t\"minecraft:block.stone_button.click_off\":                     1362,\n\t\t\"minecraft:block.trial_spawner.eject_item\":                   688,\n\t\t\"minecraft:block.vault.reject_rewarded_player\":               1442,\n\t\t\"minecraft:state.goat.horn_break\":                            616,\n\t\t\"minecraft:state.ravager.celebrate\":                          1155,\n\t\t\"minecraft:block.hanging_roots.break\":                        648,\n\t\t\"minecraft:block.soul_sand.place\":                            1288,\n\t\t\"minecraft:block.trial_spawner.about_to_spawn_item\":          679,\n\t\t\"minecraft:state.glow_squid.squirt\":                          607,\n\t\t\"minecraft:block.bamboo_sapling.hit\":                         111,\n\t\t\"minecraft:block.metal.fall\":                                 817,\n\t\t\"minecraft:block.nether_wood.break\":                          925,\n\t\t\"minecraft:state.donkey.eat\":                                 425,\n\t\t\"minecraft:state.goat.screaming.long_jump\":                   622,\n\t\t\"minecraft:state.polar_bear.warning\":                         1125,\n\t\t\"minecraft:block.cherry_sapling.fall\":                        276,\n\t\t\"minecraft:block.fire.ambient\":                               513,\n\t\t\"minecraft:block.froglight.step\":                             550,\n\t\t\"minecraft:block.muddy_mangrove_roots.break\":                 856,\n\t\t\"minecraft:block.pointed_dripstone.fall\":                     437,\n\t\t\"minecraft:state.allay.ambient_with_item\":                    0,\n\t\t\"minecraft:state.magma_cube.hurt\":                            804,\n\t\t\"minecraft:state.parrot.imitate.guardian\":                    1040,\n\t\t\"minecraft:ambient.basalt_deltas.additions\":                  8,\n\t\t\"minecraft:ambient.basalt_deltas.loop\":                       9,\n\t\t\"minecraft:block.bone_block.fall\":                            175,\n\t\t\"minecraft:block.candle.place\":                               248,\n\t\t\"minecraft:block.note_block.snare\":                           995,\n\t\t\"minecraft:block.rooted_dirt.fall\":                           1177,\n\t\t\"minecraft:block.small_amethyst_bud.place\":                   1280,\n\t\t\"minecraft:block.wet_grass.step\":                             1523,\n\t\t\"minecraft:state.villager.work_cleric\":                       1464,\n\t\t\"minecraft:state.zoglin.attack\":                              1581,\n\t\t\"minecraft:music_disc.mellohi\":                               878,\n\t\t\"minecraft:block.ladder.break\":                               763,\n\t\t\"minecraft:block.small_dripleaf.break\":                       1281,\n\t\t\"minecraft:state.creeper.hurt\":                               373,\n\t\t\"minecraft:state.drowned.ambient_water\":                      446,\n\t\t\"minecraft:state.llama.hurt\":                                 789,\n\t\t\"minecraft:music.menu\":                                       892,\n\t\t\"minecraft:block.cherry_wood.place\":                          273,\n\t\t\"minecraft:block.flowering_azalea.step\":                      524,\n\t\t\"minecraft:block.pink_petals.fall\":                           837,\n\t\t\"minecraft:block.polished_deepslate.hit\":                     1128,\n\t\t\"minecraft:state.skeleton.death\":                             1257,\n\t\t\"minecraft:item.glow_ink_sac.use\":                            598,\n\t\t\"minecraft:block.bamboo_wood_hanging_sign.hit\":               671,\n\t\t\"minecraft:block.big_dripleaf.break\":                         157,\n\t\t\"minecraft:block.lantern.fall\":                               769,\n\t\t\"minecraft:block.powder_snow.hit\":                            1136,\n\t\t\"minecraft:block.wooden_pressure_plate.click_off\":            1567,\n\t\t\"minecraft:state.bee.loop_aggressive\":                        146,\n\t\t\"minecraft:state.llama.step\":                                 791,\n\t\t\"minecraft:block.sculk_shrieker.break\":                       1215,\n\t\t\"minecraft:block.slime_block.hit\":                            1276,\n\t\t\"minecraft:block.wood.fall\":                                  1570,\n\t\t\"minecraft:state.parrot.imitate.vindicator\":                  1057,\n\t\t\"minecraft:state.sniffer.step\":                               1317,\n\t\t\"minecraft:item.spyglass.stop_using\":                         1356,\n\t\t\"minecraft:block.copper_grate.place\":                         355,\n\t\t\"minecraft:block.gravel.break\":                               633,\n\t\t\"minecraft:block.nether_bricks.break\":                        918,\n\t\t\"minecraft:state.fishing_bobber.splash\":                      517,\n\t\t\"minecraft:state.parrot.imitate.ender_dragon\":                1036,\n\t\t\"minecraft:state.strider.step_lava\":                          1308,\n\t\t\"minecraft:block.amethyst_block.resonate\":                    34,\n\t\t\"minecraft:block.lodestone.step\":                             795,\n\t\t\"minecraft:block.note_block.bass\":                            987,\n\t\t\"minecraft:block.note_block.imitate.skeleton\":                1003,\n\t\t\"minecraft:block.packed_mud.break\":                           941,\n\t\t\"minecraft:block.wooden_trapdoor.close\":                      1563,\n\t\t\"minecraft:state.mooshroom.suspicious_milk\":                  829,\n\t\t\"minecraft:state.player.hurt_freeze\":                         1111,\n\t\t\"minecraft:state.shulker.teleport\":                           1250,\n\t\t\"minecraft:state.turtle.shamble\":                             1424,\n\t\t\"minecraft:block.deepslate_tiles.place\":                      406,\n\t\t\"minecraft:block.gravel.place\":                               636,\n\t\t\"minecraft:block.mud_bricks.fall\":                            852,\n\t\t\"minecraft:block.sculk.fall\":                                 1198,\n\t\t\"minecraft:state.fox.sniff\":                                  533,\n\t\t\"minecraft:item.elytra.flying\":                               464,\n\t\t\"minecraft:music.overworld.swamp\":                            900,\n\t\t\"minecraft:block.calcite.fall\":                               230,\n\t\t\"minecraft:block.coral_block.hit\":                            362,\n\t\t\"minecraft:block.note_block.basedrum\":                        986,\n\t\t\"minecraft:state.bee.loop\":                                   147,\n\t\t\"minecraft:state.witch.death\":                                1534,\n\t\t\"minecraft:block.candle.step\":                                249,\n\t\t\"minecraft:block.shroomlight.step\":                           1234,\n\t\t\"minecraft:state.dolphin.hurt\":                               416,\n\t\t\"minecraft:music_disc.wait\":                                  882,\n\t\t\"minecraft:ui.cartography_table.take_result\":                 1430,\n\t\t\"minecraft:block.cave_vines.pick_berries\":                    264,\n\t\t\"minecraft:block.fungus.break\":                               961,\n\t\t\"minecraft:block.hanging_sign.waxed_interact_fail\":           1514,\n\t\t\"minecraft:block.honey_block.slide\":                          702,\n\t\t\"minecraft:block.netherite_block.break\":                      976,\n\t\t\"minecraft:block.stem.hit\":                                   949,\n\t\t\"minecraft:state.item_frame.rotate_item\":                     760,\n\t\t\"minecraft:state.mule.angry\":                                 862,\n\t\t\"minecraft:state.shulker.death\":                              1245,\n\t\t\"minecraft:state.skeleton_horse.swim\":                        1261,\n\t\t\"minecraft:state.wither_skeleton.ambient\":                    1543,\n\t\t\"minecraft:block.bamboo.fall\":                                106,\n\t\t\"minecraft:block.bamboo_wood_button.click_on\":                123,\n\t\t\"minecraft:block.metal.step\":                                 822,\n\t\t\"minecraft:block.shroomlight.place\":                          1235,\n\t\t\"minecraft:block.snow.fall\":                                  1334,\n\t\t\"minecraft:block.spore_blossom.place\":                        1300,\n\t\t\"minecraft:state.allay.item_taken\":                           5,\n\t\t\"minecraft:state.slime.attack\":                               1269,\n\t\t\"minecraft:state.strider.death\":                              1305,\n\t\t\"minecraft:state.warden.angry\":                               1496,\n\t\t\"minecraft:state.wolf.whine\":                                 1560,\n\t\t\"minecraft:block.cherry_wood_button.click_off\":               294,\n\t\t\"minecraft:block.heavy_core.break\":                           658,\n\t\t\"minecraft:block.wet_grass.hit\":                              1521,\n\t\t\"minecraft:state.salmon.hurt\":                                1184,\n\t\t\"minecraft:state.sniffer.searching\":                          1325,\n\t\t\"minecraft:state.zombie_villager.hurt\":                       1606,\n\t\t\"minecraft:block.copper.place\":                               348,\n\t\t\"minecraft:block.trial_spawner.ambient_ominous\":              685,\n\t\t\"minecraft:state.fox.hurt\":                                   530,\n\t\t\"minecraft:state.generic.small_fall\":                         579,\n\t\t\"minecraft:state.parrot.imitate.ravager\":                     1049,\n\t\t\"minecraft:state.strider.eat\":                                1309,\n\t\t\"minecraft:state.strider.step\":                               1307,\n\t\t\"minecraft:state.zombie_horse.hurt\":                          1594,\n\t\t\"minecraft:music.overworld.lush_caves\":                       899,\n\t\t\"minecraft:block.copper.step\":                                347,\n\t\t\"minecraft:block.tuff_bricks.break\":                          1405,\n\t\t\"minecraft:state.allay.item_given\":                           4,\n\t\t\"minecraft:state.magma_cube.hurt_small\":                      805,\n\t\t\"minecraft:state.shulker.ambient\":                            1239,\n\t\t\"minecraft:music_disc.pigstep\":                               879,\n\t\t\"minecraft:weather.rain.above\":                               1518,\n\t\t\"minecraft:block.barrel.close\":                               128,\n\t\t\"minecraft:block.basalt.break\":                               130,\n\t\t\"minecraft:block.nether_wood_trapdoor.close\":                 932,\n\t\t\"minecraft:block.sand.step\":                                  1189,\n\t\t\"minecraft:block.slime_block.break\":                          1274,\n\t\t\"minecraft:state.stray.hurt\":                                 1372,\n\t\t\"minecraft:state.zombie.attack_wooden_door\":                  1586,\n\t\t\"minecraft:block.cherry_wood_hanging_sign.fall\":              287,\n\t\t\"minecraft:block.heavy_core.fall\":                            659,\n\t\t\"minecraft:block.snow.place\":                                 1341,\n\t\t\"minecraft:state.ender_dragon.shoot\":                         474,\n\t\t\"minecraft:block.frogspawn.fall\":                             553,\n\t\t\"minecraft:block.grass.hit\":                                  630,\n\t\t\"minecraft:block.nether_sprouts.place\":                       958,\n\t\t\"minecraft:block.wooden_button.click_on\":                     1566,\n\t\t\"minecraft:state.player.attack.nodamage\":                     1101,\n\t\t\"minecraft:state.skeleton.shoot\":                             1267,\n\t\t\"minecraft:state.warden.ambient\":                             1495,\n\t\t\"minecraft:item.crossbow.quick_charge_2\":                     382,\n\t\t\"minecraft:ui.stonecutter.take_result\":                       1431,\n\t\t\"minecraft:block.coral_block.break\":                          360,\n\t\t\"minecraft:block.scaffolding.fall\":                           1191,\n\t\t\"minecraft:block.wood.step\":                                  1573,\n\t\t\"minecraft:state.iron_golem.step\":                            753,\n\t\t\"minecraft:state.minecart.inside.underwater\":                 823,\n\t\t\"minecraft:item.armor.equip_iron\":                            72,\n\t\t\"minecraft:block.conduit.ambient.short\":                      336,\n\t\t\"minecraft:block.deepslate.break\":                            398,\n\t\t\"minecraft:block.nether_ore.fall\":                            1167,\n\t\t\"minecraft:block.nylium.hit\":                                 954,\n\t\t\"minecraft:block.trial_spawner.ominous_activate\":             683,\n\t\t\"minecraft:state.blaze.hurt\":                                 165,\n\t\t\"minecraft:state.breeze.idle_ground\":                         189,\n\t\t\"minecraft:state.dolphin.ambient\":                            411,\n\t\t\"minecraft:state.hostile.small_fall\":                         730,\n\t\t\"minecraft:item.bucket.fill\":                                 216,\n\t\t\"minecraft:block.azalea.place\":                               98,\n\t\t\"minecraft:state.camel.saddle\":                               237,\n\t\t\"minecraft:state.frog.long_jump\":                             562,\n\t\t\"minecraft:block.anvil.use\":                                  53,\n\t\t\"minecraft:block.mangrove_roots.place\":                       812,\n\t\t\"minecraft:block.medium_amethyst_bud.place\":                  815,\n\t\t\"minecraft:block.sculk_sensor.hit\":                           1212,\n\t\t\"minecraft:block.soul_soil.place\":                            1293,\n\t\t\"minecraft:block.suspicious_sand.hit\":                        539,\n\t\t\"minecraft:state.dolphin.death\":                              414,\n\t\t\"minecraft:state.player.attack.crit\":                         1099,\n\t\t\"minecraft:item.trident.riptide_3\":                           1389,\n\t\t\"minecraft:block.mud_bricks.hit\":                             853,\n\t\t\"minecraft:block.nether_gold_ore.step\":                       1165,\n\t\t\"minecraft:block.soul_sand.hit\":                              1289,\n\t\t\"minecraft:state.hoglin.attack\":                              692,\n\t\t\"minecraft:state.stray.step\":                                 1373,\n\t\t\"minecraft:state.wither.death\":                               1540,\n\t\t\"minecraft:item.armor.equip_chain\":                           67,\n\t\t\"minecraft:music.overworld.meadow\":                           903,\n\t\t\"minecraft:block.beehive.drip\":                               150,\n\t\t\"minecraft:block.cherry_sapling.place\":                       278,\n\t\t\"minecraft:block.chiseled_bookshelf.pickup\":                  314,\n\t\t\"minecraft:block.hanging_sign.fall\":                          655,\n\t\t\"minecraft:state.ghast.shoot\":                                586,\n\t\t\"minecraft:state.hoglin.retreat\":                             696,\n\t\t\"minecraft:state.item_frame.break\":                           757,\n\t\t\"minecraft:state.piglin.death\":                               1081,\n\t\t\"minecraft:state.ravager.death\":                              1156,\n\t\t\"minecraft:block.pointed_dripstone.drip_water_into_cauldron\": 442,\n\t\t\"minecraft:block.portal.travel\":                              1132,\n\t\t\"minecraft:block.shulker_box.close\":                          1240,\n\t\t\"minecraft:state.hostile.hurt\":                               729,\n\t\t\"minecraft:state.mule.jump\":                                  867,\n\t\t\"minecraft:state.parrot.imitate.illusioner\":                  1043,\n\t\t\"minecraft:state.salmon.ambient\":                             1181,\n\t\t\"minecraft:state.vex.death\":                                  1452,\n\t\t\"minecraft:state.donkey.death\":                               424,\n\t\t\"minecraft:state.player.hurt_drown\":                          1110,\n\t\t\"minecraft:state.puffer_fish.hurt\":                           1144,\n\t\t\"minecraft:state.spider.step\":                                1346,\n\t\t\"minecraft:block.bubble_column.upwards_ambient\":              206,\n\t\t\"minecraft:state.ender_dragon.ambient\":                       468,\n\t\t\"minecraft:state.enderman.teleport\":                          482,\n\t\t\"minecraft:state.squid.squirt\":                               1360,\n\t\t\"minecraft:block.dripstone_block.break\":                      428,\n\t\t\"minecraft:block.tuff.step\":                                  1401,\n\t\t\"minecraft:state.iron_golem.attack\":                          748,\n\t\t\"minecraft:state.villager.work_librarian\":                    1469,\n\t\t\"minecraft:block.bubble_column.whirlpool_ambient\":            208,\n\t\t\"minecraft:block.sculk_shrieker.fall\":                        1216,\n\t\t\"minecraft:state.drowned.death\":                              447,\n\t\t\"minecraft:state.ravager.roar\":                               1160,\n\t\t\"minecraft:block.decorated_pot.step\":                         390,\n\t\t\"minecraft:state.illusioner.ambient\":                         738,\n\t\t\"minecraft:state.sniffer.sniffing\":                           1324,\n\t\t\"minecraft:item.bucket.empty\":                                210,\n\t\t\"minecraft:block.azalea_leaves.place\":                        103,\n\t\t\"minecraft:block.cherry_wood.step\":                           274,\n\t\t\"minecraft:block.nether_wood_trapdoor.open\":                  933,\n\t\t\"minecraft:block.nylium.fall\":                                955,\n\t\t\"minecraft:block.wooden_button.click_off\":                    1565,\n\t\t\"minecraft:state.ender_dragon.flap\":                          471,\n\t\t\"minecraft:state.glow_item_frame.place\":                      601,\n\t\t\"minecraft:state.goat.eat\":                                   610,\n\t\t\"minecraft:state.wandering_trader.drink_potion\":              1488,\n\t\t\"minecraft:item.goat_horn.sound.0\":                           706,\n\t\t\"minecraft:block.amethyst_block.chime\":                       30,\n\t\t\"minecraft:block.calcite.break\":                              226,\n\t\t\"minecraft:block.calcite.place\":                              228,\n\t\t\"minecraft:block.coral_block.step\":                           364,\n\t\t\"minecraft:block.nether_ore.place\":                           1169,\n\t\t\"minecraft:block.sponge.fall\":                                1350,\n\t\t\"minecraft:block.weeping_vines.fall\":                         970,\n\t\t\"minecraft:state.axolotl.splash\":                             93,\n\t\t\"minecraft:state.evoker.prepare_attack\":                      497,\n\t\t\"minecraft:state.parrot.imitate.blaze\":                       1030,\n\t\t\"minecraft:block.bubble_column.upwards_inside\":               207,\n\t\t\"minecraft:block.nether_wood_hanging_sign.fall\":              665,\n\t\t\"minecraft:block.sponge.absorb\":                              1354,\n\t\t\"minecraft:block.stone.hit\":                                  1365,\n\t\t\"minecraft:block.wood.hit\":                                   1571,\n\t\t\"minecraft:item.bucket.fill_tadpole\":                         221,\n\t\t\"minecraft:item.crossbow.shoot\":                              384,\n\t\t\"minecraft:block.moss_carpet.break\":                          831,\n\t\t\"minecraft:block.note_block.imitate.piglin\":                  1007,\n\t\t\"minecraft:block.redstone_torch.burnout\":                     1171,\n\t\t\"minecraft:block.soul_sand.break\":                            1286,\n\t\t\"minecraft:state.elder_guardian.death\":                       459,\n\t\t\"minecraft:state.guardian.ambient\":                           640,\n\t\t\"minecraft:state.hoglin.death\":                               694,\n\t\t\"minecraft:block.amethyst_block.break\":                       29,\n\t\t\"minecraft:block.lever.click\":                                780,\n\t\t\"minecraft:state.armor_stand.hit\":                            80,\n\t\t\"minecraft:state.axolotl.death\":                              89,\n\t\t\"minecraft:state.hoglin.step\":                                697,\n\t\t\"minecraft:state.player.attack.knockback\":                    1100,\n\t\t\"minecraft:state.wolf.ambient\":                               1552,\n\t\t\"minecraft:state.zombified_piglin.ambient\":                   1597,\n\t\t\"minecraft:block.nether_bricks.place\":                        920,\n\t\t\"minecraft:block.respawn_anchor.ambient\":                     1172,\n\t\t\"minecraft:block.respawn_anchor.set_spawn\":                   1175,\n\t\t\"minecraft:block.sculk_shrieker.place\":                       1218,\n\t\t\"minecraft:state.horse.ambient\":                              714,\n\t\t\"minecraft:state.snow_golem.shear\":                           1339,\n\t\t\"minecraft:block.sculk_catalyst.step\":                        1207,\n\t\t\"minecraft:block.trial_spawner.fall\":                         677,\n\t\t\"minecraft:block.wet_sponge.place\":                           1528,\n\t\t\"minecraft:state.llama.swag\":                                 792,\n\t\t\"minecraft:state.mooshroom.milk\":                             828,\n\t\t\"minecraft:state.slime.death\":                                1270,\n\t\t\"minecraft:state.wolf.pant\":                                  1557,\n\t\t\"minecraft:block.nether_sprouts.fall\":                        960,\n\t\t\"minecraft:state.minecart.inside\":                            824,\n\t\t\"minecraft:block.chain.break\":                                265,\n\t\t\"minecraft:block.vault.fall\":                                 1443,\n\t\t\"minecraft:state.breeze.charge\":                              186,\n\t\t\"minecraft:state.enderman.stare\":                             481,\n\t\t\"minecraft:state.zoglin.angry\":                               1580,\n\t\t\"minecraft:block.azalea.hit\":                                 97,\n\t\t\"minecraft:block.gilded_blackstone.fall\":                     589,\n\t\t\"minecraft:block.note_block.bell\":                            988,\n\t\t\"minecraft:block.vault.break\":                                1438,\n\t\t\"minecraft:state.puffer_fish.blow_out\":                       1140,\n\t\t\"minecraft:state.skeleton.converted_to_stray\":                1256,\n\t\t\"minecraft:item.goat_horn.sound.4\":                           710,\n\t\t\"minecraft:block.cherry_wood_door.close\":                     290,\n\t\t\"minecraft:block.cherry_wood_fence_gate.open\":                299,\n\t\t\"minecraft:block.cobweb.fall\":                                324,\n\t\t\"minecraft:block.copper_grate.break\":                         353,\n\t\t\"minecraft:block.lantern.hit\":                                770,\n\t\t\"minecraft:block.muddy_mangrove_roots.place\":                 859,\n\t\t\"minecraft:block.snow.break\":                                 1333,\n\t\t\"minecraft:state.evoker.prepare_summon\":                      498,\n\t\t\"minecraft:state.parrot.ambient\":                             1025,\n\t\t\"minecraft:state.wolf.shake\":                                 1558,\n\t\t\"minecraft:block.crop.break\":                                 375,\n\t\t\"minecraft:block.sculk_catalyst.fall\":                        1204,\n\t\t\"minecraft:block.trial_spawner.detect_player\":                682,\n\t\t\"minecraft:state.endermite.death\":                            484,\n\t\t\"minecraft:state.generic.burn\":                               572,\n\t\t\"minecraft:state.lightning_bolt.impact\":                      781,\n\t\t\"minecraft:music.nether.soul_sand_valley\":                    908,\n\t\t\"minecraft:state.fox.screech\":                                531,\n\t\t\"minecraft:state.parrot.imitate.zombie_villager\":             1064,\n\t\t\"minecraft:state.player.levelup\":                             1114,\n\t\t\"minecraft:state.villager.work_armorer\":                      1461,\n\t\t\"minecraft:music.overworld.badlands\":                         913,\n\t\t\"minecraft:block.candle.hit\":                                 247,\n\t\t\"minecraft:block.dispenser.dispense\":                         408,\n\t\t\"minecraft:block.nether_wood_fence_gate.open\":                939,\n\t\t\"minecraft:state.glow_item_frame.add_item\":                   599,\n\t\t\"minecraft:state.warden.nearby_closest\":                      1507,\n\t\t\"minecraft:block.moss.break\":                                 841,\n\t\t\"minecraft:state.llama.angry\":                                785,\n\t\t\"minecraft:state.zombie.attack_iron_door\":                    1587,\n\t\t\"minecraft:block.copper_trapdoor.open\":                       359,\n\t\t\"minecraft:block.soul_soil.hit\":                              1294,\n\t\t\"minecraft:block.sponge.step\":                                1353,\n\t\t\"minecraft:state.ghast.death\":                                583,\n\t\t\"minecraft:state.sheep.ambient\":                              1226,\n\t\t\"minecraft:state.slime.jump\":                                 1272,\n\t\t\"minecraft:state.villager.ambient\":                           1454,\n\t\t\"minecraft:state.wither.break_block\":                         1539,\n\t\t\"minecraft:block.rooted_dirt.break\":                          1176,\n\t\t\"minecraft:state.illusioner.cast_spell\":                      739,\n\t\t\"minecraft:state.skeleton.ambient\":                           1255,\n\t\t\"minecraft:state.warden.dig\":                                 1499,\n\t\t\"minecraft:state.zoglin.ambient\":                             1579,\n\t\t\"minecraft:block.small_dripleaf.fall\":                        1282,\n\t\t\"minecraft:state.enderman.scream\":                            480,\n\t\t\"minecraft:state.frog.ambient\":                               557,\n\t\t\"minecraft:state.skeleton_horse.ambient\":                     1258,\n\t\t\"minecraft:item.bucket.empty_axolotl\":                        211,\n\t\t\"minecraft:item.bucket.empty_powder_snow\":                    214,\n\t\t\"minecraft:block.lava.pop\":                                   777,\n\t\t\"minecraft:block.sculk_shrieker.hit\":                         1217,\n\t\t\"minecraft:state.chicken.death\":                              304,\n\t\t\"minecraft:state.dolphin.ambient_water\":                      412,\n\t\t\"minecraft:state.villager.celebrate\":                         1455,\n\t\t\"minecraft:ambient.crimson_forest.additions\":                 11,\n\t\t\"minecraft:block.deepslate.hit\":                              400,\n\t\t\"minecraft:block.gravel.fall\":                                634,\n\t\t\"minecraft:state.evoker.celebrate\":                           493,\n\t\t\"minecraft:state.horse.gallop\":                               720,\n\t\t\"minecraft:state.parrot.imitate.stray\":                       1055,\n\t\t\"minecraft:state.player.attack.sweep\":                        1103,\n\t\t\"minecraft:ambient.underwater.enter\":                         23,\n\t\t\"minecraft:block.cherry_sapling.break\":                       275,\n\t\t\"minecraft:block.weeping_vines.hit\":                          969,\n\t\t\"minecraft:state.guardian.flop\":                              645,\n\t\t\"minecraft:block.gilded_blackstone.place\":                    591,\n\t\t\"minecraft:block.growing_plant.crop\":                         639,\n\t\t\"minecraft:block.lodestone.break\":                            794,\n\t\t\"minecraft:block.nether_ore.step\":                            1170,\n\t\t\"minecraft:state.horse.step\":                                 725,\n\t\t\"minecraft:state.wandering_trader.disappeared\":               1486,\n\t\t\"minecraft:block.bamboo_wood.step\":                           117,\n\t\t\"minecraft:block.basalt.step\":                                131,\n\t\t\"minecraft:block.nylium.step\":                                952,\n\t\t\"minecraft:block.tripwire.detach\":                            1395,\n\t\t\"minecraft:state.axolotl.idle_water\":                         92,\n\t\t\"minecraft:block.anvil.place\":                                51,\n\t\t\"minecraft:block.moss_carpet.fall\":                           832,\n\t\t\"minecraft:state.ender_dragon.hurt\":                          473,\n\t\t\"minecraft:state.piglin.celebrate\":                           1080,\n\t\t\"minecraft:state.villager.work_weaponsmith\":                  1473,\n\t\t\"minecraft:item.bucket.empty_fish\":                           212,\n\t\t\"minecraft:block.chain.fall\":                                 266,\n\t\t\"minecraft:block.furnace.fire_crackle\":                       570,\n\t\t\"minecraft:state.armor_stand.fall\":                           79,\n\t\t\"minecraft:state.turtle.hurt_baby\":                           1422,\n\t\t\"minecraft:block.heavy_core.place\":                           661,\n\t\t\"minecraft:block.note_block.imitate.wither_skeleton\":         1006,\n\t\t\"minecraft:block.powder_snow.fall\":                           1135,\n\t\t\"minecraft:block.soul_soil.break\":                            1291,\n\t\t\"minecraft:state.generic.hurt\":                               578,\n\t\t\"minecraft:state.ghast.hurt\":                                 584,\n\t\t\"minecraft:state.guardian.death\":                             643,\n\t\t\"minecraft:state.illusioner.death\":                           740,\n\t\t\"minecraft:state.piglin.hurt\":                                1083,\n\t\t\"minecraft:state.squid.ambient\":                              1357,\n\t\t\"minecraft:item.bucket.fill_powder_snow\":                     220,\n\t\t\"minecraft:music.creative\":                                   868,\n\t\t\"minecraft:block.large_amethyst_bud.place\":                   774,\n\t\t\"minecraft:block.moss.hit\":                                   843,\n\t\t\"minecraft:block.pointed_dripstone.place\":                    435,\n\t\t\"minecraft:music.overworld.forest\":                           901,\n\t\t\"minecraft:block.bamboo_wood.fall\":                           114,\n\t\t\"minecraft:block.chiseled_bookshelf.step\":                    313,\n\t\t\"minecraft:block.note_block.xylophone\":                       996,\n\t\t\"minecraft:block.sculk_catalyst.break\":                       1203,\n\t\t\"minecraft:block.snow.hit\":                                   1340,\n\t\t\"minecraft:block.vine.fall\":                                  1479,\n\t\t\"minecraft:state.blaze.burn\":                                 163,\n\t\t\"minecraft:state.iron_golem.repair\":                          752,\n\t\t\"minecraft:state.item_frame.place\":                           758,\n\t\t\"minecraft:state.vindicator.hurt\":                            1477,\n\t\t\"minecraft:block.sculk_sensor.break\":                         1210,\n\t\t\"minecraft:block.vault.eject_item\":                           1441,\n\t\t\"minecraft:state.goat.hurt\":                                  611,\n\t\t\"minecraft:state.warden.nearby_closer\":                       1506,\n\t\t\"minecraft:event.mob_effect.trial_omen\":                      1609,\n\t\t\"minecraft:item.nether_wart.plant\":                           924,\n\t\t\"minecraft:item.trident.hit\":                                 1384,\n\t\t\"minecraft:ambient.warped_forest.loop\":                       21,\n\t\t\"minecraft:block.sculk_vein.place\":                           1224,\n\t\t\"minecraft:block.sweet_berry_bush.place\":                     1375,\n\t\t\"minecraft:block.vault.hit\":                                  1444,\n\t\t\"minecraft:state.breeze.inhale\":                              188,\n\t\t\"minecraft:state.polar_bear.ambient\":                         1120,\n\t\t\"minecraft:state.wandering_trader.drink_milk\":                1487,\n\t\t\"minecraft:block.amethyst_cluster.break\":                     36,\n\t\t\"minecraft:block.vine.break\":                                 1478,\n\t\t\"minecraft:block.wood.place\":                                 1572,\n\t\t\"minecraft:state.tropical_fish.death\":                        1397,\n\t\t\"minecraft:music.dragon\":                                     889,\n\t\t\"minecraft:block.cherry_wood_fence_gate.close\":               298,\n\t\t\"minecraft:state.bee.hurt\":                                   145,\n\t\t\"minecraft:block.bamboo_wood.hit\":                            115,\n\t\t\"minecraft:block.decorated_pot.insert_fail\":                  389,\n\t\t\"minecraft:block.roots.place\":                                567,\n\t\t\"minecraft:state.breeze.wind_burst\":                          198,\n\t\t\"minecraft:state.rabbit.jump\":                                1151,\n\t\t\"minecraft:state.shulker.close\":                              1244,\n\t\t\"minecraft:state.shulker.shoot\":                              1249,\n\t\t\"minecraft:music.overworld.stony_peaks\":                      909,\n\t\t\"minecraft:block.crafter.fail\":                               371,\n\t\t\"minecraft:block.nether_sprouts.break\":                       956,\n\t\t\"minecraft:state.armadillo.eat\":                              54,\n\t\t\"minecraft:state.goat.ambient\":                               608,\n\t\t\"minecraft:item.honey_bottle.drink\":                          705,\n\t\t\"minecraft:block.ancient_debris.place\":                       43,\n\t\t\"minecraft:block.copper.break\":                               346,\n\t\t\"minecraft:state.fox.death\":                                  528,\n\t\t\"minecraft:state.parrot.imitate.husk\":                        1042,\n\t\t\"minecraft:state.silverfish.death\":                           1252,\n\t\t\"minecraft:state.warden.attack_impact\":                       1497,\n\t\t\"minecraft:block.sculk_sensor.fall\":                          1211,\n\t\t\"minecraft:block.sponge.place\":                               1352,\n\t\t\"minecraft:state.bat.loop\":                                   138,\n\t\t\"minecraft:state.bee.sting\":                                  148,\n\t\t\"minecraft:state.enderman.hurt\":                              479,\n\t\t\"minecraft:state.skeleton_horse.jump_water\":                  1264,\n\t\t\"minecraft:state.villager.work_butcher\":                      1462,\n\t\t\"minecraft:block.anvil.hit\":                                  49,\n\t\t\"minecraft:block.big_dripleaf.tilt_up\":                       444,\n\t\t\"minecraft:block.bubble_column.whirlpool_inside\":             209,\n\t\t\"minecraft:block.sculk_catalyst.bloom\":                       1202,\n\t\t\"minecraft:block.trial_spawner.hit\":                          676,\n\t\t\"minecraft:state.pig.saddle\":                                 1075,\n\t\t\"minecraft:item.bucket.fill_fish\":                            218,\n\t\t\"minecraft:music_disc.ward\":                                  883,\n\t\t\"minecraft:block.beacon.activate\":                            140,\n\t\t\"minecraft:block.nether_bricks.fall\":                         922,\n\t\t\"minecraft:state.hoglin.hurt\":                                695,\n\t\t\"minecraft:item.armor.equip_turtle\":                          75,\n\t\t\"minecraft:item.book.page_turn\":                              180,\n\t\t\"minecraft:block.copper_bulb.place\":                          341,\n\t\t\"minecraft:block.grass.break\":                                628,\n\t\t\"minecraft:block.grass.place\":                                631,\n\t\t\"minecraft:block.mangrove_roots.hit\":                         811,\n\t\t\"minecraft:state.goat.screaming.hurt\":                        621,\n\t\t\"minecraft:music_disc.13\":                                    872,\n\t\t\"minecraft:state.parrot.imitate.bogged\":                      1031,\n\t\t\"minecraft:item.goat_horn.sound.7\":                           713,\n\t\t\"minecraft:music.overworld.jagged_peaks\":                     898,\n\t\t\"minecraft:block.iron_door.open\":                             747,\n\t\t\"minecraft:block.iron_trapdoor.close\":                        754,\n\t\t\"minecraft:block.nether_wood_button.click_off\":               934,\n\t\t\"minecraft:state.generic.splash\":                             580,\n\t\t\"minecraft:state.tropical_fish.ambient\":                      1396,\n\t\t\"minecraft:item.goat_horn.sound.2\":                           708,\n\t\t\"minecraft:block.chest.open\":                                 302,\n\t\t\"minecraft:block.flowering_azalea.fall\":                      521,\n\t\t\"minecraft:block.nether_wart.break\":                          923,\n\t\t\"minecraft:state.bogged.hurt\":                                171,\n\t\t\"minecraft:state.endermite.ambient\":                          483,\n\t\t\"minecraft:state.player.attack.strong\":                       1102,\n\t\t\"minecraft:state.wither.spawn\":                               1547,\n\t\t\"minecraft:music_disc.far\":                                   876,\n\t\t\"minecraft:music_disc.otherside\":                             884,\n\t\t\"minecraft:block.copper_grate.step\":                          354,\n\t\t\"minecraft:block.glass.step\":                                 597,\n\t\t\"minecraft:block.grass.step\":                                 632,\n\t\t\"minecraft:block.metal.break\":                                816,\n\t\t\"minecraft:block.mud.step\":                                   850,\n\t\t\"minecraft:block.soul_sand.fall\":                             1290,\n\t\t\"minecraft:item.shield.block\":                                1231,\n\t\t\"minecraft:ui.stonecutter.select_recipe\":                     1432,\n\t\t\"minecraft:block.decorated_pot.fall\":                         386,\n\t\t\"minecraft:block.rooted_dirt.hit\":                            1178,\n\t\t\"minecraft:state.guardian.hurt\":                              646,\n\t\t\"minecraft:state.splash_potion.throw\":                        1348,\n\t\t\"minecraft:block.bamboo_wood_hanging_sign.fall\":              670,\n\t\t\"minecraft:block.bamboo_wood_trapdoor.open\":                  121,\n\t\t\"minecraft:block.copper_grate.hit\":                           356,\n\t\t\"minecraft:block.flowering_azalea.place\":                     523,\n\t\t\"minecraft:block.fungus.hit\":                                 964,\n\t\t\"minecraft:block.nether_wood_door.close\":                     930,\n\t\t\"minecraft:block.packed_mud.hit\":                             943,\n\t\t\"minecraft:block.trial_spawner.spawn_mob\":                    678,\n\t\t\"minecraft:state.camel.sit\":                                  238,\n\t\t\"minecraft:state.parrot.imitate.spider\":                      1054,\n\t\t\"minecraft:state.piglin.converted_to_zombified\":              1086,\n\t\t\"minecraft:state.sniffer.scenting\":                           1323,\n\t\t\"minecraft:state.snow_golem.hurt\":                            1337,\n\t\t\"minecraft:state.stray.death\":                                1371,\n\t\t\"minecraft:state.tnt.primed\":                                 1382,\n\t\t\"minecraft:ambient.soul_sand_valley.loop\":                    18,\n\t\t\"minecraft:block.tripwire.click_on\":                          1394,\n\t\t\"minecraft:state.breeze.idle_air\":                            190,\n\t\t\"minecraft:state.skeleton_horse.step_water\":                  1265,\n\t\t\"minecraft:item.bottle.fill_dragonbreath\":                    185,\n\t\t\"minecraft:block.froglight.break\":                            546,\n\t\t\"minecraft:state.panda.hurt\":                                 1023,\n\t\t\"minecraft:block.cherry_wood_button.click_on\":                295,\n\t\t\"minecraft:block.wooden_door.close\":                          1561,\n\t\t\"minecraft:state.bogged.step\":                                173,\n\t\t\"minecraft:state.frog.lay_spawn\":                             561,\n\t\t\"minecraft:state.villager.work_mason\":                        1470,\n\t\t\"minecraft:intentionally_empty\":                              940,\n\t\t\"minecraft:item.book.put\":                                    181,\n\t\t\"minecraft:block.brewing_stand.brew\":                         199,\n\t\t\"minecraft:block.deepslate_bricks.step\":                      397,\n\t\t\"minecraft:state.axolotl.attack\":                             88,\n\t\t\"minecraft:state.lingering_potion.throw\":                     783,\n\t\t\"minecraft:state.strider.happy\":                              1303,\n\t\t\"minecraft:item.armor.equip_netherite\":                       74,\n\t\t\"minecraft:block.ancient_debris.fall\":                        45,\n\t\t\"minecraft:block.hanging_roots.step\":                         652,\n\t\t\"minecraft:block.iron_door.close\":                            746,\n\t\t\"minecraft:block.moss_carpet.hit\":                            833,\n\t\t\"minecraft:block.sand.hit\":                                   1187,\n\t\t\"minecraft:state.cat.stray_ambient\":                          251,\n\t\t\"minecraft:state.egg.throw\":                                  455,\n\t\t\"minecraft:state.illusioner.prepare_blindness\":               743,\n\t\t\"minecraft:state.panda.death\":                                1017,\n\t\t\"minecraft:state.panda.pre_sneeze\":                           1014,\n\t\t\"minecraft:item.goat_horn.sound.5\":                           711,\n\t\t\"minecraft:item.mace.smash_air\":                              800,\n\t\t\"minecraft:block.lodestone.hit\":                              797,\n\t\t\"minecraft:block.shroomlight.break\":                          1233,\n\t\t\"minecraft:block.vine.hit\":                                   1480,\n\t\t\"minecraft:item.bundle.insert\":                               223,\n\t\t\"minecraft:block.shulker_box.open\":                           1241,\n\t\t\"minecraft:block.trial_spawner.ambient\":                      684,\n\t\t\"minecraft:block.wet_sponge.break\":                           1524,\n\t\t\"minecraft:state.bat.hurt\":                                   137,\n\t\t\"minecraft:state.elder_guardian.curse\":                       458,\n\t\t\"minecraft:state.panda.eat\":                                  1018,\n\t\t\"minecraft:state.wandering_trader.hurt\":                      1489,\n\t\t\"minecraft:block.bamboo_wood.break\":                          113,\n\t\t\"minecraft:block.cave_vines.break\":                           259,\n\t\t\"minecraft:state.villager.work_fisherman\":                    1466,\n\t\t\"minecraft:state.witch.throw\":                                1537,\n\t\t\"minecraft:music.nether.crimson_forest\":                      894,\n\t\t\"minecraft:block.amethyst_block.place\":                       33,\n\t\t\"minecraft:block.comparator.click\":                           329,\n\t\t\"minecraft:block.portal.trigger\":                             1133,\n\t\t\"minecraft:state.camel.step_sand\":                            241,\n\t\t\"minecraft:state.creeper.death\":                              372,\n\t\t\"minecraft:state.firework_rocket.twinkle_far\":                512,\n\t\t\"minecraft:state.puffer_fish.flop\":                           1143,\n\t\t\"minecraft:state.vex.ambient\":                                1450,\n\t\t\"minecraft:state.wandering_trader.yes\":                       1493,\n\t\t\"minecraft:state.warden.sniff\":                               1509,\n\t\t\"minecraft:item.bucket.empty_tadpole\":                        215,\n\t\t\"minecraft:item.bucket.fill_lava\":                            219,\n\t\t\"minecraft:block.netherrack.place\":                           983,\n\t\t\"minecraft:block.wet_sponge.step\":                            1529,\n\t\t\"minecraft:state.generic.big_fall\":                           571,\n\t\t\"minecraft:item.honeycomb.wax_on\":                            704,\n\t\t\"minecraft:block.ladder.step\":                                767,\n\t\t\"minecraft:block.trial_spawner.spawn_item\":                   680,\n\t\t\"minecraft:block.tuff.break\":                                 1400,\n\t\t\"minecraft:state.leash_knot.place\":                           779,\n\t\t\"minecraft:state.player.teleport\":                            1119,\n\t\t\"minecraft:state.ravager.hurt\":                               1157,\n\t\t\"minecraft:item.goat_horn.sound.6\":                           712,\n\t\t\"minecraft:item.trident.riptide_1\":                           1387,\n\t\t\"minecraft:ambient.warped_forest.mood\":                       22,\n\t\t\"minecraft:block.nether_sprouts.step\":                        957,\n\t\t\"minecraft:block.nether_wood.fall\":                           926,\n\t\t\"minecraft:block.note_block.pling\":                           994,\n\t\t\"minecraft:block.vine.place\":                                 1481,\n\t\t\"minecraft:state.elder_guardian.hurt_land\":                   463,\n\t\t\"minecraft:state.hostile.big_fall\":                           727,\n\t\t\"minecraft:state.parrot.hurt\":                                1029,\n\t\t\"minecraft:item.wolf_armor.damage\":                           1550,\n\t\t\"minecraft:music.nether.warped_forest\":                       910,\n\t\t\"minecraft:block.amethyst_block.hit\":                         32,\n\t\t\"minecraft:block.bamboo.break\":                               105,\n\t\t\"minecraft:block.bamboo.place\":                               108,\n\t\t\"minecraft:block.dispenser.launch\":                           410,\n\t\t\"minecraft:block.small_dripleaf.step\":                        1285,\n\t\t\"minecraft:block.vault.ambient\":                              1437,\n\t\t\"minecraft:state.horse.death\":                                718,\n\t\t\"minecraft:item.ink_sac.use\":                                 745,\n\t\t\"minecraft:block.hanging_sign.place\":                         657,\n\t\t\"minecraft:block.note_block.imitate.zombie\":                  1002,\n\t\t\"minecraft:block.sculk.place\":                                1200,\n\t\t\"minecraft:state.parrot.imitate.skeleton\":                    1052,\n\t\t\"minecraft:state.pig.step\":                                   1076,\n\t\t\"minecraft:state.piglin_brute.step\":                          1091,\n\t\t\"minecraft:state.slime.jump_small\":                           1313,\n\t\t\"minecraft:state.zombie.infect\":                              1596,\n\t\t\"minecraft:block.beacon.deactivate\":                          142,\n\t\t\"minecraft:block.respawn_anchor.deplete\":                     1174,\n\t\t\"minecraft:block.stem.break\":                                 946,\n\t\t\"minecraft:block.tripwire.click_off\":                         1393,\n\t\t\"minecraft:state.bogged.ambient\":                             169,\n\t\t\"minecraft:state.chicken.egg\":                                305,\n\t\t\"minecraft:state.villager.work_shepherd\":                     1471,\n\t\t\"minecraft:block.note_block.bit\":                             1000,\n\t\t\"minecraft:block.note_block.imitate.creeper\":                 1004,\n\t\t\"minecraft:state.firework_rocket.blast_far\":                  506,\n\t\t\"minecraft:state.ghast.scream\":                               585,\n\t\t\"minecraft:state.glow_squid.ambient\":                         604,\n\t\t\"minecraft:state.husk.step\":                                  737,\n\t\t\"minecraft:state.salmon.death\":                               1182,\n\t\t\"minecraft:state.silverfish.ambient\":                         1251,\n\t\t\"minecraft:state.spider.ambient\":                             1343,\n\t\t\"minecraft:block.copper_trapdoor.close\":                      358,\n\t\t\"minecraft:state.elder_guardian.ambient_land\":                457,\n\t\t\"minecraft:state.firework_rocket.large_blast_far\":            508,\n\t\t\"minecraft:state.parrot.imitate.breeze\":                      1032,\n\t\t\"minecraft:music_disc.11\":                                    871,\n\t\t\"minecraft:music_disc.relic\":                                 885,\n\t\t\"minecraft:ui.toast.in\":                                      1434,\n\t\t\"minecraft:ambient.crimson_forest.mood\":                      13,\n\t\t\"minecraft:block.beehive.enter\":                              151,\n\t\t\"minecraft:state.bogged.death\":                               170,\n\t\t\"minecraft:state.minecart.riding\":                            825,\n\t\t\"minecraft:state.piglin_brute.death\":                         1089,\n\t\t\"minecraft:block.stem.place\":                                 948,\n\t\t\"minecraft:block.stone.place\":                                1366,\n\t\t\"minecraft:state.cat.ambient\":                                250,\n\t\t\"minecraft:state.parrot.fly\":                                 1028,\n\t\t\"minecraft:item.shield.break\":                                1232,\n\t\t\"minecraft:music_disc.precipice\":                             888,\n\t\t\"minecraft:block.frogspawn.hatch\":                            554,\n\t\t\"minecraft:state.camel.hurt\":                                 236,\n\t\t\"minecraft:state.skeleton_horse.gallop_water\":                1263,\n\t\t\"minecraft:state.sniffer.eat\":                                1318,\n\t\t\"minecraft:state.warden.hurt\":                                1502,\n\t\t\"minecraft:block.moss.fall\":                                  842,\n\t\t\"minecraft:block.netherite_block.fall\":                       980,\n\t\t\"minecraft:state.chicken.step\":                               307,\n\t\t\"minecraft:state.fox.sleep\":                                  532,\n\t\t\"minecraft:item.crossbow.quick_charge_3\":                     383,\n\t\t\"minecraft:block.frogspawn.step\":                             551,\n\t\t\"minecraft:block.lantern.step\":                               772,\n\t\t\"minecraft:block.mangrove_roots.break\":                       809,\n\t\t\"minecraft:block.mud.hit\":                                    848,\n\t\t\"minecraft:state.cat.hiss\":                                   254,\n\t\t\"minecraft:state.ender_eye.death\":                            475,\n\t\t\"minecraft:state.endermite.hurt\":                             485,\n\t\t\"minecraft:state.goat.milk\":                                  613,\n\t\t\"minecraft:block.bamboo_sapling.break\":                       110,\n\t\t\"minecraft:block.nether_ore.hit\":                             1168,\n\t\t\"minecraft:state.elder_guardian.ambient\":                     456,\n\t\t\"minecraft:item.bottle.fill\":                                 184,\n\t\t\"minecraft:state.donkey.angry\":                               422,\n\t\t\"minecraft:state.zombie.destroy_egg\":                         1591,\n\t\t\"minecraft:block.bone_block.place\":                           177,\n\t\t\"minecraft:block.nether_wood_pressure_plate.click_on\":        937,\n\t\t\"minecraft:state.warden.sonic_charge\":                        1511,\n\t\t\"minecraft:block.chorus_flower.grow\":                         318,\n\t\t\"minecraft:block.lodestone.place\":                            796,\n\t\t\"minecraft:block.nether_sprouts.hit\":                         959,\n\t\t\"minecraft:block.slime_block.step\":                           1278,\n\t\t\"minecraft:block.sponge.break\":                               1349,\n\t\t\"minecraft:state.allay.item_thrown\":                          6,\n\t\t\"minecraft:state.armadillo.step\":                             58,\n\t\t\"minecraft:state.zombie_villager.ambient\":                    1602,\n\t\t\"minecraft:item.hoe.till\":                                    689,\n\t\t\"minecraft:block.copper_bulb.break\":                          339,\n\t\t\"minecraft:state.cat.purr\":                                   257,\n\t\t\"minecraft:state.cat.purreow\":                                258,\n\t\t\"minecraft:state.slime.squish_small\":                         1314,\n\t\t\"minecraft:state.strider.saddle\":                             1310,\n\t\t\"minecraft:state.turtle.egg_hatch\":                           1420,\n\t\t\"minecraft:block.copper_door.open\":                           352,\n\t\t\"minecraft:block.wool.break\":                                 1574,\n\t\t\"minecraft:state.polar_bear.death\":                           1122,\n\t\t\"minecraft:block.bamboo_sapling.place\":                       112,\n\t\t\"minecraft:block.wooden_door.open\":                           1562,\n\t\t\"minecraft:state.magma_cube.jump\":                            806,\n\t\t\"minecraft:state.parrot.imitate.warden\":                      1058,\n\t\t\"minecraft:item.armor.equip_generic\":                         70,\n\t\t\"minecraft:item.mace.smash_ground_heavy\":                     802,\n\t\t\"minecraft:block.ancient_debris.step\":                        42,\n\t\t\"minecraft:block.big_dripleaf.step\":                          161,\n\t\t\"minecraft:block.cherry_wood_trapdoor.close\":                 292,\n\t\t\"minecraft:block.honey_block.place\":                          701,\n\t\t\"minecraft:block.metal.place\":                                819,\n\t\t\"minecraft:block.pink_petals.hit\":                            838,\n\t\t\"minecraft:state.cow.step\":                                   369,\n\t\t\"minecraft:state.donkey.jump\":                                427,\n\t\t\"minecraft:state.ender_dragon.growl\":                         472,\n\t\t\"minecraft:state.fox.teleport\":                               535,\n\t\t\"minecraft:state.parrot.imitate.silverfish\":                  1051,\n\t\t\"minecraft:ambient.crimson_forest.loop\":                      12,\n\t\t\"minecraft:block.muddy_mangrove_roots.fall\":                  857,\n\t\t\"minecraft:block.note_block.iron_xylophone\":                  997,\n\t\t\"minecraft:state.breeze.shoot\":                               191,\n\t\t\"minecraft:state.dragon_fireball.explode\":                    470,\n\t\t\"minecraft:state.pig.ambient\":                                1072,\n\t\t\"minecraft:block.nether_gold_ore.place\":                      1164,\n\t\t\"minecraft:block.rooted_dirt.step\":                           1180,\n\t\t\"minecraft:block.sculk_vein.step\":                            1225,\n\t\t\"minecraft:state.illusioner.prepare_mirror\":                  744,\n\t\t\"minecraft:item.bucket.empty_lava\":                           213,\n\t\t\"minecraft:item.crossbow.loading_start\":                      380,\n\t\t\"minecraft:item.totem.use\":                                   1383,\n\t\t\"minecraft:block.dripstone_block.step\":                       429,\n\t\t\"minecraft:block.ender_chest.open\":                           467,\n\t\t\"minecraft:block.nether_bricks.hit\":                          921,\n\t\t\"minecraft:state.parrot.imitate.wither\":                      1060,\n\t\t\"minecraft:block.iron_trapdoor.open\":                         755,\n\t\t\"minecraft:block.stone_pressure_plate.click_on\":              1368,\n\t\t\"minecraft:state.zombie_villager.death\":                      1605,\n\t\t\"minecraft:block.ancient_debris.hit\":                         44,\n\t\t\"minecraft:block.azalea.step\":                                99,\n\t\t\"minecraft:block.big_dripleaf.hit\":                           159,\n\t\t\"minecraft:block.bubble_column.bubble_pop\":                   205,\n\t\t\"minecraft:block.chain.place\":                                268,\n\t\t\"minecraft:block.chiseled_bookshelf.place\":                   316,\n\t\t\"minecraft:state.cat.death\":                                  252,\n\t\t\"minecraft:state.glow_item_frame.remove_item\":                602,\n\t\t\"minecraft:state.painting.place\":                             1013,\n\t\t\"minecraft:item.trident.thunder\":                             1391,\n\t\t\"minecraft:block.glass.fall\":                                 594,\n\t\t\"minecraft:block.nether_bricks.step\":                         919,\n\t\t\"minecraft:state.polar_bear.hurt\":                            1123,\n\t\t\"minecraft:block.amethyst_cluster.hit\":                       38,\n\t\t\"minecraft:block.crafter.craft\":                              370,\n\t\t\"minecraft:block.shroomlight.fall\":                           1237,\n\t\t\"minecraft:state.breeze.whirl\":                               197,\n\t\t\"minecraft:state.iron_golem.damage\":                          749,\n\t\t\"minecraft:state.piglin_brute.hurt\":                          1090,\n\t\t\"minecraft:state.skeleton.step\":                              1268,\n\t\t\"minecraft:block.gravel.step\":                                637,\n\t\t\"minecraft:block.ladder.place\":                               766,\n\t\t\"minecraft:state.armadillo.death\":                            59,\n\t\t\"minecraft:state.wind_charge.throw\":                          1531,\n\t\t\"minecraft:music.overworld.dripstone_caves\":                  896,\n\t\t\"minecraft:block.sand.break\":                                 1185,\n\t\t\"minecraft:state.goat.ram_impact\":                            615,\n\t\t\"minecraft:state.zombified_piglin.death\":                     1599,\n\t\t\"minecraft:block.amethyst_block.fall\":                        31,\n\t\t\"minecraft:block.bamboo_wood_hanging_sign.step\":              668,\n\t\t\"minecraft:block.froglight.place\":                            549,\n\t\t\"minecraft:block.wooden_trapdoor.open\":                       1564,\n\t\t\"minecraft:state.dolphin.play\":                               418,\n\t\t\"minecraft:state.generic.explode\":                            576,\n\t\t\"minecraft:state.turtle.egg_crack\":                           1419,\n\t\t\"minecraft:state.wolf.step\":                                  1559,\n\t\t\"minecraft:block.deepslate.step\":                             402,\n\t\t\"minecraft:block.metal_pressure_plate.click_off\":             820,\n\t\t\"minecraft:state.horse.armor\":                                716,\n\t\t\"minecraft:state.magma_cube.squish\":                          807,\n\t\t\"minecraft:block.chest.close\":                                300,\n\t\t\"minecraft:block.small_dripleaf.place\":                       1284,\n\t\t\"minecraft:state.llama.ambient\":                              784,\n\t\t\"minecraft:music_disc.5\":                                     870,\n\t\t\"minecraft:block.large_amethyst_bud.break\":                   773,\n\t\t\"minecraft:state.ender_pearl.throw\":                          487,\n\t\t\"minecraft:state.horse.jump\":                                 722,\n\t\t\"minecraft:state.mule.death\":                                 864,\n\t\t\"minecraft:music_disc.stal\":                                  880,\n\t\t\"minecraft:block.big_dripleaf.fall\":                          158,\n\t\t\"minecraft:block.deepslate_tiles.fall\":                       404,\n\t\t\"minecraft:block.hanging_sign.step\":                          653,\n\t\t\"minecraft:block.nether_gold_ore.fall\":                       1162,\n\t\t\"minecraft:block.roots.hit\":                                  568,\n\t\t\"minecraft:state.horse.saddle\":                               724,\n\t\t\"minecraft:state.hostile.splash\":                             731,\n\t\t\"minecraft:state.ravager.ambient\":                            1153,\n\t\t\"minecraft:state.warden.listening\":                           1503,\n\t\t\"minecraft:ambient.underwater.loop.additions\":                26,\n\t\t\"minecraft:block.note_block.banjo\":                           1001,\n\t\t\"minecraft:block.wart_block.place\":                           973,\n\t\t\"minecraft:state.armadillo.unroll_start\":                     65,\n\t\t\"minecraft:state.axolotl.swim\":                               94,\n\t\t\"minecraft:state.fox.aggro\":                                  525,\n\t\t\"minecraft:state.parrot.imitate.wither_skeleton\":             1061,\n\t\t\"minecraft:state.player.big_fall\":                            1105,\n\t\t\"minecraft:state.zombie_villager.cure\":                       1604,\n\t\t\"minecraft:item.trident.throw\":                               1390,\n\t\t\"minecraft:block.bamboo_wood_button.click_off\":               122,\n\t\t\"minecraft:block.frogspawn.hit\":                              555,\n\t\t\"minecraft:state.breeze.land\":                                193,\n\t\t\"minecraft:state.evoker.hurt\":                                496,\n\t\t\"minecraft:state.mooshroom.convert\":                          826,\n\t\t\"minecraft:state.wither_skeleton.death\":                      1544,\n\t\t\"minecraft:item.trident.hit_ground\":                          1385,\n\t\t\"minecraft:block.chest.locked\":                               301,\n\t\t\"minecraft:block.conduit.ambient\":                            335,\n\t\t\"minecraft:state.goat.screaming.milk\":                        623,\n\t\t\"minecraft:state.snow_golem.ambient\":                         1335,\n\t\t\"minecraft:state.warden.heartbeat\":                           1501,\n\t\t\"minecraft:item.bundle.drop_contents\":                        222,\n\t\t\"minecraft:music.overworld.desert\":                           912,\n\t\t\"minecraft:block.bone_block.step\":                            178,\n\t\t\"minecraft:state.bee.death\":                                  144,\n\t\t\"minecraft:state.camel.dash\":                                 232,\n\t\t\"minecraft:state.husk.ambient\":                               733,\n\t\t\"minecraft:state.wither.ambient\":                             1538,\n\t\t\"minecraft:state.drowned.hurt_water\":                         450,\n\t\t\"minecraft:state.enderman.death\":                             478,\n\t\t\"minecraft:state.piglin_brute.ambient\":                       1087,\n\t\t\"minecraft:block.campfire.crackle\":                           242,\n\t\t\"minecraft:block.chain.hit\":                                  267,\n\t\t\"minecraft:block.stone.break\":                                1361,\n\t\t\"minecraft:state.wandering_trader.no\":                        1490,\n\t\t\"minecraft:block.grass.fall\":                                 629,\n\t\t\"minecraft:block.stone.fall\":                                 1364,\n\t\t\"minecraft:block.trial_spawner.place\":                        675,\n\t\t\"minecraft:state.elder_guardian.flop\":                        461,\n\t\t\"minecraft:music.under_water\":                                917,\n\t\t\"minecraft:block.froglight.fall\":                             547,\n\t\t\"minecraft:state.camel.death\":                                234,\n\t\t\"minecraft:state.dolphin.splash\":                             419,\n\t\t\"minecraft:state.panda.bite\":                                 1024,\n\t\t\"minecraft:state.parrot.step\":                                1065,\n\t\t\"minecraft:state.pillager.hurt\":                              1096,\n\t\t\"minecraft:state.tadpole.flop\":                               1378,\n\t\t\"minecraft:state.villager.yes\":                               1460,\n\t\t\"minecraft:ambient.underwater.exit\":                          24,\n\t\t\"minecraft:block.cherry_sapling.hit\":                         277,\n\t\t\"minecraft:block.tripwire.attach\":                            1392,\n\t\t\"minecraft:block.azalea_leaves.hit\":                          102,\n\t\t\"minecraft:block.fire.extinguish\":                            514,\n\t\t\"minecraft:block.honey_block.step\":                           703,\n\t\t\"minecraft:block.sand.fall\":                                  1186,\n\t\t\"minecraft:state.llama.eat\":                                  788,\n\t\t\"minecraft:state.parrot.imitate.drowned\":                     1034,\n\t\t\"minecraft:state.zombie.ambient\":                             1585,\n\t\t\"minecraft:item.brush.brushing.gravel\":                       202,\n\t\t\"minecraft:block.cake.add_candle\":                            225,\n\t\t\"minecraft:block.composter.fill_success\":                     332,\n\t\t\"minecraft:block.conduit.deactivate\":                         338,\n\t\t\"minecraft:block.nether_gold_ore.hit\":                        1163,\n\t\t\"minecraft:block.nether_wood_fence_gate.close\":               938,\n\t\t\"minecraft:block.netherite_block.place\":                      978,\n\t\t\"minecraft:block.packed_mud.fall\":                            942,\n\t\t\"minecraft:block.wood.break\":                                 1569,\n\t\t\"minecraft:state.cat.eat\":                                    253,\n\t\t\"minecraft:state.elder_guardian.death_land\":                  460,\n\t\t\"minecraft:state.glow_item_frame.rotate_item\":                603,\n\t\t\"minecraft:state.slime.hurt\":                                 1271,\n\t\t\"minecraft:block.candle.ambient\":                             243,\n\t\t\"minecraft:block.cherry_wood_trapdoor.open\":                  293,\n\t\t\"minecraft:block.spore_blossom.step\":                         1301,\n\t\t\"minecraft:block.suspicious_sand.break\":                      536,\n\t\t\"minecraft:state.evoker.prepare_wololo\":                      499,\n\t\t\"minecraft:state.shulker.open\":                               1248,\n\t\t\"minecraft:state.villager.no\":                                1458,\n\t\t\"minecraft:block.bamboo_wood_trapdoor.close\":                 120,\n\t\t\"minecraft:block.big_dripleaf.place\":                         160,\n\t\t\"minecraft:block.cherry_leaves.place\":                        283,\n\t\t\"minecraft:block.hanging_sign.break\":                         654,\n\t\t\"minecraft:block.heavy_core.step\":                            662,\n\t\t\"minecraft:block.ladder.fall\":                                764,\n\t\t\"minecraft:block.nether_wood_pressure_plate.click_off\":       936,\n\t\t\"minecraft:block.sculk_catalyst.place\":                       1206,\n\t\t\"minecraft:block.sniffer_egg.hatch\":                          1331,\n\t\t\"minecraft:state.piglin.angry\":                               1079,\n\t\t\"minecraft:block.cherry_wood.break\":                          270,\n\t\t\"minecraft:block.note_block.hat\":                             993,\n\t\t\"minecraft:block.sculk_vein.break\":                           1221,\n\t\t\"minecraft:block.stone.step\":                                 1369,\n\t\t\"minecraft:state.camel.dash_ready\":                           233,\n\t\t\"minecraft:state.magma_cube.death_small\":                     793,\n\t\t\"minecraft:state.parrot.imitate.ghast\":                       1039,\n\t\t\"minecraft:state.vex.hurt\":                                   1453,\n\t\t\"minecraft:block.chiseled_bookshelf.pickup.enchanted\":        315,\n\t\t\"minecraft:block.weeping_vines.step\":                         967,\n\t\t\"minecraft:state.cod.flop\":                                   327,\n\t\t\"minecraft:state.phantom.death\":                              1068,\n\t\t\"minecraft:state.wandering_trader.death\":                     1485,\n\t\t\"minecraft:block.bell.use\":                                   155,\n\t\t\"minecraft:block.copper_bulb.turn_on\":                        344,\n\t\t\"minecraft:state.cat.beg_for_food\":                           255,\n\t\t\"minecraft:block.big_dripleaf.tilt_down\":                     443,\n\t\t\"minecraft:block.cave_vines.hit\":                             261,\n\t\t\"minecraft:block.mud_bricks.step\":                            855,\n\t\t\"minecraft:block.sculk.hit\":                                  1199,\n\t\t\"minecraft:block.wart_block.break\":                           971,\n\t\t\"minecraft:block.sculk_catalyst.hit\":                         1205,\n\t\t\"minecraft:block.suspicious_gravel.place\":                    543,\n\t\t\"minecraft:state.donkey.ambient\":                             421,\n\t\t\"minecraft:state.guardian.hurt_land\":                         647,\n\t\t\"minecraft:state.panda.worried_ambient\":                      1022,\n\t\t\"minecraft:block.bamboo_wood_door.close\":                     118,\n\t\t\"minecraft:block.chiseled_bookshelf.break\":                   308,\n\t\t\"minecraft:state.horse.step_wood\":                            726,\n\t\t\"minecraft:music_disc.creator_music_box\":                     887,\n\t\t\"minecraft:block.cobweb.break\":                               320,\n\t\t\"minecraft:block.lava.extinguish\":                            776,\n\t\t\"minecraft:state.guardian.attack\":                            642,\n\t\t\"minecraft:block.gravel.hit\":                                 635,\n\t\t\"minecraft:block.sculk_shrieker.shriek\":                      1219,\n\t\t\"minecraft:state.camel.ambient\":                              231,\n\t\t\"minecraft:state.evoker_fangs.attack\":                        495,\n\t\t\"minecraft:state.player.swim\":                                1118,\n\t\t\"minecraft:state.turtle.swim\":                                1426,\n\t\t\"minecraft:item.bone_meal.use\":                               179,\n\t\t\"minecraft:state.armadillo.scute_drop\":                       62,\n\t\t\"minecraft:state.cow.milk\":                                   368,\n\t\t\"minecraft:state.silverfish.step\":                            1254,\n\t\t\"minecraft:state.snow_golem.death\":                           1336,\n\t\t\"minecraft:state.breeze.slide\":                               194,\n\t\t\"minecraft:state.camel.stand\":                                239,\n\t\t\"minecraft:state.drowned.step\":                               452,\n\t\t\"minecraft:state.frog.eat\":                                   559,\n\t\t\"minecraft:state.salmon.flop\":                                1183,\n\t\t\"minecraft:state.villager.work_leatherworker\":                1468,\n\t\t\"minecraft:state.zoglin.hurt\":                                1583,\n\t\t\"minecraft:block.bamboo_wood_fence_gate.open\":                127,\n\t\t\"minecraft:block.deepslate_bricks.fall\":                      394,\n\t\t\"minecraft:block.mud_bricks.break\":                           851,\n\t\t\"minecraft:block.muddy_mangrove_roots.step\":                  860,\n\t\t\"minecraft:block.soul_soil.fall\":                             1295,\n\t\t\"minecraft:state.guardian.ambient_land\":                      641,\n\t\t\"minecraft:state.piglin_brute.converted_to_zombified\":        1092,\n\t\t\"minecraft:block.bamboo_wood_pressure_plate.click_off\":       124,\n\t\t\"minecraft:block.calcite.hit\":                                229,\n\t\t\"minecraft:block.decorated_pot.insert\":                       388,\n\t\t\"minecraft:block.polished_tuff.step\":                         1414,\n\t\t\"minecraft:state.drowned.hurt\":                               449,\n\t\t\"minecraft:state.ghast.ambient\":                              582,\n\t\t\"minecraft:state.parrot.imitate.piglin_brute\":                1047,\n\t\t\"minecraft:item.brush.brushing.sand\":                         201,\n\t\t\"minecraft:block.beacon.ambient\":                             141,\n\t\t\"minecraft:block.sand.place\":                                 1188,\n\t\t\"minecraft:state.ravager.stunned\":                            1159,\n\t\t\"minecraft:block.nether_wood.place\":                          928,\n\t\t\"minecraft:state.generic.extinguish_fire\":                    577,\n\t\t\"minecraft:state.sheep.shear\":                                1229,\n\t\t\"minecraft:block.basalt.fall\":                                134,\n\t\t\"minecraft:block.cave_vines.place\":                           262,\n\t\t\"minecraft:block.nether_wood_door.open\":                      931,\n\t\t\"minecraft:state.item_frame.add_item\":                        756,\n\t\t\"minecraft:state.item_frame.remove_item\":                     759,\n\t\t\"minecraft:state.sniffer.death\":                              1321,\n\t\t\"minecraft:state.zombie_villager.converted\":                  1603,\n\t\t\"minecraft:item.mace.smash_ground\":                           801,\n\t\t\"minecraft:block.bamboo_wood_fence_gate.close\":               126,\n\t\t\"minecraft:block.netherrack.fall\":                            985,\n\t\t\"minecraft:block.pointed_dripstone.land\":                     438,\n\t\t\"minecraft:block.sculk_sensor.place\":                         1213,\n\t\t\"minecraft:state.zoglin.step\":                                1584,\n\t\t\"minecraft:item.dye.use\":                                     454,\n\t\t\"minecraft:block.deepslate_bricks.break\":                     393,\n\t\t\"minecraft:block.fungus.step\":                                962,\n\t\t\"minecraft:block.lantern.break\":                              768,\n\t\t\"minecraft:block.note_block.guitar\":                          991,\n\t\t\"minecraft:block.tuff_bricks.hit\":                            1407,\n\t\t\"minecraft:state.camel.step\":                                 240,\n\t\t\"minecraft:state.cow.ambient\":                                365,\n\t\t\"minecraft:state.drowned.ambient\":                            445,\n\t\t\"minecraft:music.overworld.jungle\":                           914,\n\t\t\"minecraft:block.bamboo.step\":                                109,\n\t\t\"minecraft:block.polished_tuff.fall\":                         1411,\n\t\t\"minecraft:state.generic.eat\":                                575,\n\t\t\"minecraft:state.llama.spit\":                                 790,\n\t\t\"minecraft:state.mule.hurt\":                                  866,\n\t\t\"minecraft:state.parrot.imitate.evoker\":                      1038,\n\t\t\"minecraft:state.zombie_horse.death\":                         1593,\n\t\t\"minecraft:block.bamboo_wood.place\":                          116,\n\t\t\"minecraft:block.nether_wood.hit\":                            927,\n\t\t\"minecraft:block.nether_wood_hanging_sign.step\":              663,\n\t\t\"minecraft:block.netherrack.break\":                           981,\n\t\t\"minecraft:state.allay.hurt\":                                 3,\n\t\t\"minecraft:state.parrot.imitate.hoglin\":                      1041,\n\t\t\"minecraft:block.soul_soil.step\":                             1292,\n\t\t\"minecraft:state.enderman.ambient\":                           477,\n\t\t\"minecraft:state.goat.screaming.ram_impact\":                  625,\n\t\t\"minecraft:state.parrot.imitate.zoglin\":                      1062,\n\t\t\"minecraft:state.spider.death\":                               1344,\n\t\t\"minecraft:state.vindicator.death\":                           1476,\n\t\t\"minecraft:ambient.underwater.loop\":                          25,\n\t\t\"minecraft:block.slime_block.fall\":                           1275,\n\t\t\"minecraft:block.wool.place\":                                 1577,\n\t\t\"minecraft:state.blaze.death\":                                164,\n\t\t\"minecraft:state.ghast.warn\":                                 587,\n\t\t\"minecraft:state.hoglin.angry\":                               691,\n\t\t\"minecraft:state.wolf.growl\":                                 1554,\n\t\t\"minecraft:particle.soul_escape\":                             1296,\n\t\t\"minecraft:block.vault.step\":                                 1449,\n\t\t\"minecraft:state.generic.death\":                              573,\n\t\t\"minecraft:state.mule.chest\":                                 863,\n\t\t\"minecraft:state.frog.tongue\":                                564,\n\t\t\"minecraft:ui.loom.take_result\":                              1429,\n\t\t\"minecraft:block.lava.ambient\":                               775,\n\t\t\"minecraft:block.lily_pad.place\":                             1483,\n\t\t\"minecraft:block.mud.break\":                                  846,\n\t\t\"minecraft:state.armadillo.hurt\":                             55,\n\t\t\"minecraft:state.bee.pollinate\":                              149,\n\t\t\"minecraft:state.player.breath\":                              1106,\n\t\t\"minecraft:ambient.nether_wastes.loop\":                       15,\n\t\t\"minecraft:block.vault.place\":                                1448,\n\t\t\"minecraft:state.sniffer.hurt\":                               1320,\n\t\t\"minecraft:state.tadpole.death\":                              1377,\n\t\t\"minecraft:state.witch.hurt\":                                 1536,\n\t\t\"minecraft:event.mob_effect.raid_omen\":                       1610,\n\t\t\"minecraft:item.brush.brushing.sand.complete\":                203,\n\t\t\"minecraft:block.cherry_wood.fall\":                           271,\n\t\t\"minecraft:block.cobweb.step\":                                321,\n\t\t\"minecraft:block.copper_door.close\":                          351,\n\t\t\"minecraft:block.tuff.fall\":                                  1404,\n\t\t\"minecraft:state.axolotl.hurt\":                               90,\n\t\t\"minecraft:state.mooshroom.shear\":                            830,\n\t\t\"minecraft:item.bundle.remove_one\":                           224,\n\t\t\"minecraft:block.cherry_wood_hanging_sign.break\":             286,\n\t\t\"minecraft:block.conduit.activate\":                           334,\n\t\t\"minecraft:state.arrow.hit\":                                  82,\n\t\t\"minecraft:state.donkey.hurt\":                                426,\n\t\t\"minecraft:ambient.warped_forest.additions\":                  20,\n\t\t\"minecraft:state.goat.screaming.ambient\":                     618,\n\t\t\"minecraft:state.parrot.imitate.piglin\":                      1046,\n\t\t\"minecraft:block.weeping_vines.break\":                        966,\n\t\t\"minecraft:state.fish.swim\":                                  515,\n\t\t\"minecraft:state.fishing_bobber.retrieve\":                    516,\n\t\t\"minecraft:state.phantom.swoop\":                              1071,\n\t\t\"minecraft:block.stone_button.click_on\":                      1363,\n\t\t\"minecraft:block.trial_spawner.break\":                        673,\n\t\t\"minecraft:state.boat.paddle_land\":                           167,\n\t\t\"minecraft:state.goat.screaming.eat\":                         620,\n\t\t\"minecraft:state.wandering_trader.ambient\":                   1484,\n\t\t\"minecraft:state.zombified_piglin.hurt\":                      1600,\n\t\t\"minecraft:block.cherry_leaves.step\":                         284,\n\t\t\"minecraft:block.vault.activate\":                             1436,\n\t\t\"minecraft:state.drowned.shoot\":                              451,\n\t\t\"minecraft:state.tadpole.hurt\":                               1380,\n\t\t\"minecraft:block.bamboo_wood_hanging_sign.break\":             669,\n\t\t\"minecraft:block.copper.fall\":                                350,\n\t\t\"minecraft:block.pointed_dripstone.drip_lava\":                439,\n\t\t\"minecraft:block.tuff.hit\":                                   1403,\n\t\t\"minecraft:state.frog.step\":                                  563,\n\t\t\"minecraft:state.magma_cube.squish_small\":                    808,\n\t\t\"minecraft:block.cherry_leaves.break\":                        280,\n\t\t\"minecraft:block.moss.place\":                                 844,\n\t\t\"minecraft:block.scaffolding.hit\":                            1192,\n\t\t\"minecraft:state.boat.paddle_water\":                          168,\n\t\t\"minecraft:state.mule.ambient\":                               861,\n\t\t\"minecraft:state.parrot.imitate.shulker\":                     1050,\n\t\t\"minecraft:state.piglin.jealous\":                             1082,\n\t\t\"minecraft:state.villager.work_farmer\":                       1465,\n\t\t\"minecraft:item.axe.strip\":                                   85,\n\t\t\"minecraft:block.end_portal_frame.fill\":                      489,\n\t\t\"minecraft:block.trial_spawner.spawn_item_begin\":             681,\n\t\t\"minecraft:state.armadillo.peek\":                             64,\n\t\t\"minecraft:block.cherry_wood_hanging_sign.step\":              285,\n\t\t\"minecraft:block.frogspawn.place\":                            556,\n\t\t\"minecraft:block.glass.break\":                                593,\n\t\t\"minecraft:block.powder_snow.step\":                           1138,\n\t\t\"minecraft:block.wooden_pressure_plate.click_on\":             1568,\n\t\t\"minecraft:state.armor_stand.break\":                          78,\n\t\t\"minecraft:state.donkey.chest\":                               423,\n\t\t\"minecraft:state.illusioner.hurt\":                            741,\n\t\t\"minecraft:state.llama.death\":                                787,\n\t\t\"minecraft:state.shulker.hurt_closed\":                        1247,\n\t\t\"minecraft:block.trial_spawner.open_shutter\":                 686,\n\t\t\"minecraft:block.weeping_vines.place\":                        968,\n\t\t\"minecraft:state.experience_bottle.throw\":                    500,\n\t\t\"minecraft:state.rabbit.hurt\":                                1150,\n\t\t\"minecraft:state.silverfish.hurt\":                            1253,\n\t\t\"minecraft:state.warden.nearby_close\":                        1505,\n\t\t\"minecraft:block.portal.ambient\":                             1131,\n\t\t\"minecraft:block.suspicious_gravel.fall\":                     545,\n\t\t\"minecraft:block.sweet_berry_bush.break\":                     1374,\n\t\t\"minecraft:block.vault.open_shutter\":                         1447,\n\t\t\"minecraft:state.chicken.hurt\":                               306,\n\t\t\"minecraft:state.slime.hurt_small\":                           1312,\n\t\t\"minecraft:state.zombified_piglin.angry\":                     1598,\n\t\t\"minecraft:weather.rain\":                                     1517,\n\t\t\"minecraft:block.copper_bulb.turn_off\":                       345,\n\t\t\"minecraft:block.hanging_roots.place\":                        651,\n\t\t\"minecraft:block.moss.step\":                                  845,\n\t\t\"minecraft:block.mud.fall\":                                   847,\n\t\t\"minecraft:block.powder_snow.break\":                          1134,\n\t\t\"minecraft:block.sculk.break\":                                1197,\n\t\t\"minecraft:block.tuff_bricks.place\":                          1408,\n\t\t\"minecraft:state.goat.death\":                                 609,\n\t\t\"minecraft:state.polar_bear.step\":                            1124,\n\t\t\"minecraft:item.armor.equip_leather\":                         73,\n\t\t\"minecraft:ui.button.click\":                                  1427,\n\t\t\"minecraft:block.copper_bulb.step\":                           340,\n\t\t\"minecraft:block.gilded_blackstone.break\":                    588,\n\t\t\"minecraft:block.vault.insert_item_fail\":                     1446,\n\t\t\"minecraft:state.sheep.step\":                                 1230,\n\t\t\"minecraft:state.tadpole.grow_up\":                            1379,\n\t\t\"minecraft:state.wither_skeleton.step\":                       1546,\n\t\t\"minecraft:block.polished_tuff.place\":                        1413,\n\t\t\"minecraft:block.suspicious_sand.step\":                       537,\n\t\t\"minecraft:state.player.burp\":                                1107,\n\t\t\"minecraft:state.player.death\":                               1108,\n\t\t\"minecraft:state.horse.eat\":                                  719,\n\t\t\"minecraft:state.horse.hurt\":                                 721,\n\t\t\"minecraft:state.polar_bear.ambient_baby\":                    1121,\n\t\t\"minecraft:state.warden.listening_angry\":                     1504,\n\t\t\"minecraft:block.azalea_leaves.break\":                        100,\n\t\t\"minecraft:block.cherry_wood_pressure_plate.click_off\":       296,\n\t\t\"minecraft:block.composter.fill\":                             331,\n\t\t\"minecraft:block.honey_block.hit\":                            700,\n\t\t\"minecraft:block.piston.contract\":                            1097,\n\t\t\"minecraft:state.frog.hurt\":                                  560,\n\t\t\"minecraft:block.flowering_azalea.hit\":                       522,\n\t\t\"minecraft:block.sign.waxed_interact_fail\":                   1515,\n\t\t\"minecraft:state.wolf.hurt\":                                  1556,\n\t\t\"minecraft:block.cherry_leaves.hit\":                          282,\n\t\t\"minecraft:block.deepslate_bricks.hit\":                       395,\n\t\t\"minecraft:block.sculk.charge\":                               1196,\n\t\t\"minecraft:ui.loom.select_pattern\":                           1428,\n\t\t\"minecraft:ambient.cave\":                                     7,\n\t\t\"minecraft:block.rooted_dirt.place\":                          1179,\n\t\t\"minecraft:block.spore_blossom.break\":                        1297,\n\t\t\"minecraft:block.spore_blossom.fall\":                         1298,\n\t\t\"minecraft:block.deepslate_tiles.hit\":                        405,\n\t\t\"minecraft:block.sniffer_egg.crack\":                          1330,\n\t\t\"minecraft:state.generic.swim\":                               581,\n\t\t\"minecraft:state.squid.hurt\":                                 1359,\n\t\t\"minecraft:state.villager.trade\":                             1459,\n\t\t\"minecraft:state.villager.work_cartographer\":                 1463,\n\t\t\"minecraft:block.cobweb.hit\":                                 323,\n\t\t\"minecraft:block.conduit.attack.target\":                      337,\n\t\t\"minecraft:block.nether_wood_button.click_on\":                935,\n\t\t\"minecraft:block.pointed_dripstone.drip_lava_into_cauldron\":  441,\n\t\t\"minecraft:state.slime.squish\":                               1273,\n\t\t\"minecraft:event.raid.horn\":                                  1152,\n\t\t\"minecraft:item.trident.riptide_2\":                           1388,\n\t\t\"minecraft:block.netherite_block.hit\":                        979,\n\t\t\"minecraft:block.sculk_vein.hit\":                             1223,\n\t\t\"minecraft:block.wool.hit\":                                   1576,\n\t\t\"minecraft:state.snowball.throw\":                             1332,\n\t\t\"minecraft:block.medium_amethyst_bud.break\":                  814,\n\t\t\"minecraft:block.scaffolding.break\":                          1190,\n\t\t\"minecraft:state.chicken.ambient\":                            303,\n\t\t\"minecraft:state.cod.death\":                                  326,\n\t\t\"minecraft:state.parrot.imitate.vex\":                         1056,\n\t\t\"minecraft:state.warden.emerge\":                              1500,\n\t\t\"minecraft:item.brush.brushing.generic\":                      200,\n\t\t\"minecraft:block.beacon.power_select\":                        143,\n\t\t\"minecraft:block.decorated_pot.break\":                        385,\n\t\t\"minecraft:block.netherrack.hit\":                             984,\n\t\t\"minecraft:block.note_block.didgeridoo\":                      999,\n\t\t\"minecraft:block.suspicious_gravel.break\":                    541,\n\t\t\"minecraft:state.player.splash\":                              1116,\n\t\t\"minecraft:state.turtle.egg_break\":                           1418,\n\t\t\"minecraft:state.zombie_villager.step\":                       1607,\n\t\t\"minecraft:block.basalt.hit\":                                 133,\n\t\t\"minecraft:block.muddy_mangrove_roots.hit\":                   858,\n\t\t\"minecraft:block.vault.deactivate\":                           1440,\n\t\t\"minecraft:enchant.thorns.hit\":                               1381,\n\t\t\"minecraft:state.puffer_fish.ambient\":                        1139,\n\t\t\"minecraft:state.rabbit.attack\":                              1148,\n\t\t\"minecraft:state.tropical_fish.hurt\":                         1399,\n\t\t\"minecraft:block.fungus.place\":                               963,\n\t\t\"minecraft:block.metal_pressure_plate.click_on\":              821,\n\t\t\"minecraft:state.dolphin.swim\":                               420,\n\t\t\"minecraft:block.bell.resonate\":                              156,\n\t\t\"minecraft:block.cave_vines.step\":                            263,\n\t\t\"minecraft:block.lodestone.fall\":                             798,\n\t\t\"minecraft:block.wool.fall\":                                  1575,\n\t\t\"minecraft:state.ocelot.death\":                               1010,\n\t\t\"minecraft:state.panda.cant_breed\":                           1020,\n\t\t\"minecraft:state.skeleton.hurt\":                              1266,\n\t\t\"minecraft:item.armor.equip_diamond\":                         68,\n\t\t\"minecraft:block.chiseled_bookshelf.insert.enchanted\":        312,\n\t\t\"minecraft:block.wet_sponge.fall\":                            1526,\n\t\t\"minecraft:state.goat.screaming.prepare_ram\":                 624,\n\t\t\"minecraft:state.skeleton_horse.hurt\":                        1260,\n\t\t\"minecraft:state.snow_golem.shoot\":                           1338,\n\t\t\"minecraft:item.wolf_armor.repair\":                           1551,\n\t\t\"minecraft:music_disc.blocks\":                                873,\n\t\t\"minecraft:block.gilded_blackstone.step\":                     592,\n\t\t\"minecraft:block.glass.place\":                                596,\n\t\t\"minecraft:block.note_block.chime\":                           989,\n\t\t\"minecraft:state.fox.eat\":                                    529,\n\t\t\"minecraft:state.mule.eat\":                                   865,\n\t\t\"minecraft:item.wolf_armor.break\":                            1548,\n\t\t\"minecraft:ui.toast.out\":                                     1435,\n\t\t\"minecraft:ambient.underwater.loop.additions.ultra_rare\":     28,\n\t\t\"minecraft:block.anvil.land\":                                 50,\n\t\t\"minecraft:block.nether_wood_hanging_sign.place\":             667,\n\t\t\"minecraft:state.parrot.eat\":                                 1027,\n\t\t\"minecraft:state.parrot.imitate.creeper\":                     1033,\n\t\t\"minecraft:state.wither_skeleton.hurt\":                       1545,\n\t\t\"minecraft:item.crossbow.loading_middle\":                     379,\n\t\t\"minecraft:music_disc.cat\":                                   874,\n\t\t\"minecraft:block.pointed_dripstone.hit\":                      436,\n\t\t\"minecraft:state.blaze.shoot\":                                166,\n\t\t\"minecraft:state.ocelot.hurt\":                                1008,\n\t\t\"minecraft:state.rabbit.death\":                               1149,\n\t\t\"minecraft:state.sniffer.drop_seed\":                          1322,\n\t\t\"minecraft:state.witch.ambient\":                              1532,\n\t\t\"minecraft:event.mob_effect.bad_omen\":                        1608,\n\t\t\"minecraft:music_disc.strad\":                                 881,\n\t\t\"minecraft:block.pointed_dripstone.step\":                     434,\n\t\t\"minecraft:state.ender_dragon.death\":                         469,\n\t\t\"minecraft:state.parrot.imitate.witch\":                       1059,\n\t\t\"minecraft:music.overworld.flower_forest\":                    911,\n\t\t\"minecraft:block.vine.step\":                                  1482,\n\t\t\"minecraft:state.player.attack.weak\":                         1104,\n\t\t\"minecraft:item.shovel.flatten\":                              1238,\n\t\t\"minecraft:ambient.nether_wastes.mood\":                       16,\n\t\t\"minecraft:block.basalt.place\":                               132,\n\t\t\"minecraft:block.beehive.work\":                               154,\n\t\t\"minecraft:block.dispenser.fail\":                             409,\n\t\t\"minecraft:block.mud.place\":                                  849,\n\t\t\"minecraft:block.polished_deepslate.step\":                    1130,\n\t\t\"minecraft:block.sculk_shrieker.step\":                        1220,\n\t\t\"minecraft:state.breeze.death\":                               195,\n\t\t\"minecraft:state.creeper.primed\":                             374,\n\t\t\"minecraft:state.drowned.death_water\":                        448,\n\t\t\"minecraft:state.glow_squid.death\":                           605,\n\t\t\"minecraft:state.painting.break\":                             1012,\n\t\t\"minecraft:state.piglin.admiring_item\":                       1077,\n\t\t\"minecraft:state.player.splash.high_speed\":                   1117,\n\t\t\"minecraft:state.vex.charge\":                                 1451,\n\t\t\"minecraft:music_disc.creator\":                               886,\n\t\t\"minecraft:block.shroomlight.hit\":                            1236,\n\t\t\"minecraft:block.trial_spawner.close_shutter\":                687,\n\t\t\"minecraft:state.sniffer.happy\":                              1328,\n\t\t\"minecraft:state.strider.retreat\":                            1304,\n\t\t\"minecraft:block.cherry_leaves.fall\":                         281,\n\t\t\"minecraft:block.end_gateway.spawn\":                          488,\n\t\t\"minecraft:state.armadillo.hurt_reduced\":                     56,\n\t\t\"minecraft:state.bat.ambient\":                                135,\n\t\t\"minecraft:state.endermite.step\":                             486,\n\t\t\"minecraft:state.illusioner.mirror_move\":                     742,\n\t\t\"minecraft:block.copper_grate.fall\":                          357,\n\t\t\"minecraft:block.nether_wood.step\":                           929,\n\t\t\"minecraft:block.polished_deepslate.break\":                   1126,\n\t\t\"minecraft:state.evoker.cast_spell\":                          492,\n\t\t\"minecraft:state.sheep.death\":                                1227,\n\t\t\"minecraft:state.zombie.hurt\":                                1595,\n\t\t\"minecraft:ambient.nether_wastes.additions\":                  14,\n\t\t\"minecraft:block.cherry_wood_hanging_sign.hit\":               288,\n\t\t\"minecraft:block.soul_sand.step\":                             1287,\n\t\t\"minecraft:block.spore_blossom.hit\":                          1299,\n\t\t\"minecraft:block.wet_sponge.hit\":                             1527,\n\t\t\"minecraft:state.fox.ambient\":                                526,\n\t\t\"minecraft:state.phantom.hurt\":                               1070,\n\t\t\"minecraft:state.pillager.ambient\":                           1093,\n\t\t\"minecraft:state.zombie.converted_to_drowned\":                1589,\n\t\t\"minecraft:item.crossbow.quick_charge_1\":                     381,\n\t\t\"minecraft:item.goat_horn.play\":                              617,\n\t\t\"minecraft:music.overworld.deep_dark\":                        895,\n\t\t\"minecraft:block.bone_block.hit\":                             176,\n\t\t\"minecraft:block.stem.step\":                                  947,\n\t\t\"minecraft:state.armadillo.brush\":                            66,\n\t\t\"minecraft:state.cod.hurt\":                                   328,\n\t\t\"minecraft:state.pillager.death\":                             1095,\n\t\t\"minecraft:block.blastfurnace.fire_crackle\":                  182,\n\t\t\"minecraft:block.chain.step\":                                 269,\n\t\t\"minecraft:block.pumpkin.carve\":                              1146,\n\t\t\"minecraft:block.roots.fall\":                                 569,\n\t\t\"minecraft:state.bogged.shear\":                               172,\n\t\t\"minecraft:state.ocelot.ambient\":                             1009,\n\t\t\"minecraft:state.panda.aggressive_ambient\":                   1021,\n\t\t\"minecraft:music.game\":                                       891,\n\t\t\"minecraft:music.overworld.snowy_slopes\":                     907,\n\t\t\"minecraft:block.heavy_core.hit\":                             660,\n\t\t\"minecraft:block.ladder.hit\":                                 765,\n\t\t\"minecraft:block.nether_wood_hanging_sign.hit\":               666,\n\t\t\"minecraft:block.pink_petals.place\":                          839,\n\t\t\"minecraft:state.goat.prepare_ram\":                           614,\n\t\t\"minecraft:state.husk.converted_to_zombie\":                   734,\n\t\t\"minecraft:state.parrot.imitate.elder_guardian\":              1035,\n\t\t\"minecraft:state.puffer_fish.sting\":                          1145,\n\t\t\"minecraft:state.turtle.death\":                               1416,\n\t\t\"minecraft:state.villager.work_fletcher\":                     1467,\n\t\t\"minecraft:state.warden.roar\":                                1508,\n\t\t\"minecraft:state.warden.sonic_boom\":                          1510,\n\t\t\"minecraft:state.warden.step\":                                1512,\n\t\t\"minecraft:block.smithing_table.use\":                         1315,\n\t\t\"minecraft:state.cat.hurt\":                                   256,\n\t\t\"minecraft:state.horse.angry\":                                715,\n\t\t\"minecraft:state.pig.hurt\":                                   1074,\n\t\t\"minecraft:block.beehive.exit\":                               152,\n\t\t\"minecraft:block.gilded_blackstone.hit\":                      590,\n\t\t\"minecraft:block.netherrack.step\":                            982,\n\t\t\"minecraft:block.pink_petals.step\":                           840,\n\t\t\"minecraft:state.bat.death\":                                  136,\n\t\t\"minecraft:state.blaze.ambient\":                              162,\n\t\t\"minecraft:state.camel.eat\":                                  235,\n\t\t\"minecraft:state.dolphin.eat\":                                415,\n\t\t\"minecraft:state.turtle.death_baby\":                          1417,\n\t\t\"minecraft:music.overworld.old_growth_taiga\":                 902,\n\t\t\"minecraft:block.anvil.step\":                                 52,\n\t\t\"minecraft:block.cobweb.place\":                               322,\n\t\t\"minecraft:block.composter.ready\":                            333,\n\t\t\"minecraft:block.roots.step\":                                 566,\n\t\t\"minecraft:block.small_dripleaf.hit\":                         1283,\n\t\t\"minecraft:block.wet_grass.break\":                            1519,\n\t\t\"minecraft:state.pillager.celebrate\":                         1094,\n\t\t\"minecraft:state.zombie.death\":                               1590,\n\t\t\"minecraft:item.chorus_fruit.teleport\":                       319,\n\t\t\"minecraft:item.wolf_armor.crack\":                            1549,\n\t\t\"minecraft:ambient.soul_sand_valley.additions\":               17,\n\t\t\"minecraft:block.hanging_sign.hit\":                           656,\n\t\t\"minecraft:block.small_amethyst_bud.break\":                   1279,\n\t\t\"minecraft:state.armadillo.land\":                             61,\n\t\t\"minecraft:state.hostile.death\":                              728,\n\t\t\"minecraft:state.pig.death\":                                  1073,\n\t\t\"minecraft:state.vindicator.celebrate\":                       1475,\n\t\t\"minecraft:block.azalea_leaves.fall\":                         101,\n\t\t\"minecraft:block.powder_snow.place\":                          1137,\n\t\t\"minecraft:block.sculk_vein.fall\":                            1222,\n\t\t\"minecraft:state.tropical_fish.flop\":                         1398,\n\t\t\"minecraft:item.axe.wax_off\":                                 87,\n\t\t\"minecraft:item.crossbow.hit\":                                377,\n\t\t\"minecraft:block.honey_block.break\":                          698,\n\t\t\"minecraft:block.water.ambient\":                              1516,\n\t\t\"minecraft:state.armadillo.ambient\":                          57,\n\t\t\"minecraft:state.horse.land\":                                 723,\n\t\t\"minecraft:state.parrot.imitate.magma_cube\":                  1044,\n\t\t\"minecraft:state.magma_cube.death\":                           803,\n\t\t\"minecraft:state.shulker_bullet.hurt\":                        1243,\n\t\t\"minecraft:block.deepslate.place\":                            401,\n\t\t\"minecraft:block.fence_gate.open\":                            503,\n\t\t\"minecraft:block.flowering_azalea.break\":                     520,\n\t\t\"minecraft:block.froglight.hit\":                              548,\n\t\t\"minecraft:block.vault.insert_item\":                          1445,\n\t\t\"minecraft:music.end\":                                        890,\n\t\t\"minecraft:block.dripstone_block.place\":                      430,\n\t\t\"minecraft:block.nylium.break\":                               951,\n\t\t\"minecraft:block.sculk.spread\":                               1195,\n\t\t\"minecraft:state.firework_rocket.blast\":                      505,\n\t\t\"minecraft:state.item.break\":                                 761,\n\t\t\"minecraft:state.phantom.bite\":                               1067,\n\t\t\"minecraft:block.deepslate.fall\":                             399,\n\t\t\"minecraft:block.respawn_anchor.charge\":                      1173,\n\t\t\"minecraft:state.panda.ambient\":                              1016,\n\t\t\"minecraft:item.spyglass.use\":                                1355,\n\t\t\"minecraft:music.overworld.frozen_peaks\":                     906,\n\t\t\"minecraft:block.moss_carpet.step\":                           835,\n\t\t\"minecraft:block.pointed_dripstone.break\":                    433,\n\t\t\"minecraft:item.crop.plant\":                                  376,\n\t\t\"minecraft:block.dripstone_block.hit\":                        431,\n\t\t\"minecraft:block.honey_block.fall\":                           699,\n\t\t\"minecraft:state.arrow.shoot\":                                84,\n\t\t\"minecraft:state.experience_orb.pickup\":                      501,\n\t\t\"minecraft:state.goat.screaming.horn_break\":                  626,\n\t\t\"minecraft:block.candle.extinguish\":                          245,\n\t\t\"minecraft:block.wart_block.hit\":                             974,\n\t\t\"minecraft:state.guardian.death_land\":                        644,\n\t\t\"minecraft:state.panda.step\":                                 1019,\n\t\t\"minecraft:state.parrot.death\":                               1026,\n\t\t\"minecraft:state.piglin.ambient\":                             1078,\n\t\t\"minecraft:state.wind_charge.wind_burst\":                     1530,\n\t\t\"minecraft:item.bucket.fill_axolotl\":                         217,\n\t\t\"minecraft:item.lodestone_compass.lock\":                      799,\n\t\t\"minecraft:music.credits\":                                    869,\n\t\t\"minecraft:music.overworld.bamboo_jungle\":                    916,\n\t\t\"minecraft:block.azalea.break\":                               95,\n\t\t\"minecraft:block.barrel.open\":                                129,\n\t\t\"minecraft:block.chiseled_bookshelf.hit\":                     310,\n\t\t\"minecraft:block.sponge.hit\":                                 1351,\n\t\t\"minecraft:block.wool.step\":                                  1578,\n\t\t\"minecraft:state.shulker_bullet.hit\":                         1242,\n\t},\n}\n"
  },
  {
    "path": "server/registry/stat_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar StatType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:used\": 2,\n\t\t\"minecraft:broken\": 3,\n\t\t\"minecraft:killed_by\": 7,\n\t\t\"minecraft:picked_up\": 4,\n\t\t\"minecraft:killed\": 6,\n\t\t\"minecraft:mined\": 0,\n\t\t\"minecraft:crafted\": 1,\n\t\t\"minecraft:custom\": 8,\n\t\t\"minecraft:dropped\": 5,\n\t},\n}"
  },
  {
    "path": "server/registry/trigger_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar TriggerType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:villager_trade\": 18,\n\t\t\"minecraft:fall_after_explosion\": 55,\n\t\t\"minecraft:kill_mob_near_sculk_catalyst\": 50,\n\t\t\"minecraft:avoid_vibration\": 52,\n\t\t\"minecraft:effects_changed\": 26,\n\t\t\"minecraft:fall_from_height\": 48,\n\t\t\"minecraft:thrown_item_picked_up_by_player\": 43,\n\t\t\"minecraft:allay_drop_item_on_block\": 51,\n\t\t\"minecraft:bee_nest_destroyed\": 36,\n\t\t\"minecraft:entity_hurt_player\": 7,\n\t\t\"minecraft:inventory_changed\": 4,\n\t\t\"minecraft:placed_block\": 24,\n\t\t\"minecraft:player_hurt_entity\": 6,\n\t\t\"minecraft:tame_animal\": 23,\n\t\t\"minecraft:thrown_item_picked_up_by_entity\": 42,\n\t\t\"minecraft:filled_bucket\": 9,\n\t\t\"minecraft:nether_travel\": 28,\n\t\t\"minecraft:started_riding\": 45,\n\t\t\"minecraft:tick\": 22,\n\t\t\"minecraft:any_block_use\": 40,\n\t\t\"minecraft:enter_block\": 3,\n\t\t\"minecraft:lightning_strike\": 46,\n\t\t\"minecraft:player_killed_entity\": 1,\n\t\t\"minecraft:using_item\": 47,\n\t\t\"minecraft:brewed_potion\": 10,\n\t\t\"minecraft:recipe_crafted\": 53,\n\t\t\"minecraft:recipe_unlocked\": 5,\n\t\t\"minecraft:slide_down_block\": 35,\n\t\t\"minecraft:default_block_use\": 39,\n\t\t\"minecraft:player_generates_container_loot\": 41,\n\t\t\"minecraft:ride_entity_in_lava\": 49,\n\t\t\"minecraft:used_totem\": 27,\n\t\t\"minecraft:fishing_rod_hooked\": 29,\n\t\t\"minecraft:hero_of_the_village\": 33,\n\t\t\"minecraft:target_hit\": 37,\n\t\t\"minecraft:player_interacted_with_entity\": 44,\n\t\t\"minecraft:slept_in_bed\": 16,\n\t\t\"minecraft:voluntary_exile\": 34,\n\t\t\"minecraft:channeled_lightning\": 30,\n\t\t\"minecraft:location\": 15,\n\t\t\"minecraft:enchanted_item\": 8,\n\t\t\"minecraft:summoned_entity\": 13,\n\t\t\"minecraft:construct_beacon\": 11,\n\t\t\"minecraft:crafter_recipe_crafted\": 54,\n\t\t\"minecraft:cured_zombie_villager\": 17,\n\t\t\"minecraft:item_durability_changed\": 19,\n\t\t\"minecraft:item_used_on_block\": 38,\n\t\t\"minecraft:consume_item\": 25,\n\t\t\"minecraft:levitation\": 20,\n\t\t\"minecraft:bred_animals\": 14,\n\t\t\"minecraft:changed_dimension\": 21,\n\t\t\"minecraft:entity_killed_player\": 2,\n\t\t\"minecraft:shot_crossbow\": 31,\n\t\t\"minecraft:impossible\": 0,\n\t\t\"minecraft:killed_by_crossbow\": 32,\n\t\t\"minecraft:used_ender_eye\": 12,\n\t},\n}"
  },
  {
    "path": "server/registry/villager_profession.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar VillagerProfession = Registry{\n\tDefault: \"minecraft:none\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:butcher\": 2,\n\t\t\"minecraft:cleric\": 4,\n\t\t\"minecraft:shepherd\": 12,\n\t\t\"minecraft:armorer\": 1,\n\t\t\"minecraft:nitwit\": 11,\n\t\t\"minecraft:toolsmith\": 13,\n\t\t\"minecraft:leatherworker\": 8,\n\t\t\"minecraft:fisherman\": 6,\n\t\t\"minecraft:mason\": 10,\n\t\t\"minecraft:weaponsmith\": 14,\n\t\t\"minecraft:cartographer\": 3,\n\t\t\"minecraft:fletcher\": 7,\n\t\t\"minecraft:librarian\": 9,\n\t\t\"minecraft:none\": 0,\n\t\t\"minecraft:farmer\": 5,\n\t},\n}"
  },
  {
    "path": "server/registry/villager_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar VillagerType = Registry{\n\tDefault: \"minecraft:plains\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:savanna\": 3,\n\t\t\"minecraft:snow\": 4,\n\t\t\"minecraft:swamp\": 5,\n\t\t\"minecraft:taiga\": 6,\n\t\t\"minecraft:desert\": 0,\n\t\t\"minecraft:jungle\": 1,\n\t\t\"minecraft:plains\": 2,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_biome_source.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenBiomeSource = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:checkerboard\": 2,\n\t\t\"minecraft:fixed\": 0,\n\t\t\"minecraft:multi_noise\": 1,\n\t\t\"minecraft:the_end\": 3,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_block_state_provider_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenBlockStateProviderType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:noise_threshold_provider\": 2,\n\t\t\"minecraft:randomized_int_state_provider\": 6,\n\t\t\"minecraft:rotated_block_provider\": 5,\n\t\t\"minecraft:simple_state_provider\": 0,\n\t\t\"minecraft:weighted_state_provider\": 1,\n\t\t\"minecraft:dual_noise_provider\": 4,\n\t\t\"minecraft:noise_provider\": 3,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_carver.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenCarver = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:cave\": 0,\n\t\t\"minecraft:nether_cave\": 1,\n\t\t\"minecraft:canyon\": 2,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_chunk_generator.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenChunkGenerator = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:debug\": 2,\n\t\t\"minecraft:flat\": 1,\n\t\t\"minecraft:noise\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_density_function_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenDensityFunctionType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:spline\": 29,\n\t\t\"minecraft:y_clamped_gradient\": 31,\n\t\t\"minecraft:beardifier\": 2,\n\t\t\"minecraft:blend_alpha\": 0,\n\t\t\"minecraft:blend_density\": 17,\n\t\t\"minecraft:cache_all_in_cell\": 8,\n\t\t\"minecraft:clamp\": 18,\n\t\t\"minecraft:squeeze\": 24,\n\t\t\"minecraft:flat_cache\": 5,\n\t\t\"minecraft:half_negative\": 22,\n\t\t\"minecraft:max\": 28,\n\t\t\"minecraft:noise\": 9,\n\t\t\"minecraft:range_choice\": 13,\n\t\t\"minecraft:blend_offset\": 1,\n\t\t\"minecraft:shift_b\": 15,\n\t\t\"minecraft:shifted_noise\": 12,\n\t\t\"minecraft:end_islands\": 10,\n\t\t\"minecraft:shift\": 16,\n\t\t\"minecraft:shift_a\": 14,\n\t\t\"minecraft:add\": 25,\n\t\t\"minecraft:interpolated\": 4,\n\t\t\"minecraft:mul\": 26,\n\t\t\"minecraft:abs\": 19,\n\t\t\"minecraft:old_blended_noise\": 3,\n\t\t\"minecraft:square\": 20,\n\t\t\"minecraft:weird_scaled_sampler\": 11,\n\t\t\"minecraft:quarter_negative\": 23,\n\t\t\"minecraft:cache_2d\": 6,\n\t\t\"minecraft:cache_once\": 7,\n\t\t\"minecraft:constant\": 30,\n\t\t\"minecraft:cube\": 21,\n\t\t\"minecraft:min\": 27,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_feature.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenFeature = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:nether_forest_vegetation\": 44,\n\t\t\"minecraft:ore\": 30,\n\t\t\"minecraft:spring_feature\": 6,\n\t\t\"minecraft:tree\": 1,\n\t\t\"minecraft:block_pile\": 5,\n\t\t\"minecraft:disk\": 28,\n\t\t\"minecraft:flower\": 2,\n\t\t\"minecraft:geode\": 57,\n\t\t\"minecraft:void_start_platform\": 9,\n\t\t\"minecraft:multiface_growth\": 22,\n\t\t\"minecraft:basalt_columns\": 47,\n\t\t\"minecraft:basalt_pillar\": 52,\n\t\t\"minecraft:fossil\": 11,\n\t\t\"minecraft:glowstone_blob\": 15,\n\t\t\"minecraft:random_patch\": 4,\n\t\t\"minecraft:scattered_ore\": 53,\n\t\t\"minecraft:sculk_patch\": 61,\n\t\t\"minecraft:twisting_vines\": 46,\n\t\t\"minecraft:block_column\": 18,\n\t\t\"minecraft:dripstone_cluster\": 58,\n\t\t\"minecraft:end_spike\": 32,\n\t\t\"minecraft:ice_spike\": 14,\n\t\t\"minecraft:blue_ice\": 25,\n\t\t\"minecraft:vines\": 17,\n\t\t\"minecraft:coral_claw\": 39,\n\t\t\"minecraft:forest_rock\": 27,\n\t\t\"minecraft:random_boolean_selector\": 56,\n\t\t\"minecraft:simple_random_selector\": 55,\n\t\t\"minecraft:huge_brown_mushroom\": 13,\n\t\t\"minecraft:kelp\": 36,\n\t\t\"minecraft:waterlogged_vegetation_patch\": 20,\n\t\t\"minecraft:coral_tree\": 37,\n\t\t\"minecraft:end_gateway\": 34,\n\t\t\"minecraft:underwater_magma\": 23,\n\t\t\"minecraft:fill_layer\": 50,\n\t\t\"minecraft:no_op\": 0,\n\t\t\"minecraft:seagrass\": 35,\n\t\t\"minecraft:simple_block\": 41,\n\t\t\"minecraft:bamboo\": 42,\n\t\t\"minecraft:chorus_plant\": 7,\n\t\t\"minecraft:desert_well\": 10,\n\t\t\"minecraft:end_platform\": 31,\n\t\t\"minecraft:pointed_dripstone\": 60,\n\t\t\"minecraft:root_system\": 21,\n\t\t\"minecraft:monster_room\": 24,\n\t\t\"minecraft:no_bonemeal_flower\": 3,\n\t\t\"minecraft:delta_feature\": 48,\n\t\t\"minecraft:end_island\": 33,\n\t\t\"minecraft:large_dripstone\": 59,\n\t\t\"minecraft:replace_single_block\": 8,\n\t\t\"minecraft:huge_red_mushroom\": 12,\n\t\t\"minecraft:netherrack_replace_blobs\": 49,\n\t\t\"minecraft:sea_pickle\": 40,\n\t\t\"minecraft:vegetation_patch\": 19,\n\t\t\"minecraft:bonus_chest\": 51,\n\t\t\"minecraft:iceberg\": 26,\n\t\t\"minecraft:coral_mushroom\": 38,\n\t\t\"minecraft:freeze_top_layer\": 16,\n\t\t\"minecraft:random_selector\": 54,\n\t\t\"minecraft:huge_fungus\": 43,\n\t\t\"minecraft:lake\": 29,\n\t\t\"minecraft:weeping_vines\": 45,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_feature_size_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenFeatureSizeType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:three_layers_feature_size\": 1,\n\t\t\"minecraft:two_layers_feature_size\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_foliage_placer_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenFoliagePlacerType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:blob_foliage_placer\": 0,\n\t\t\"minecraft:dark_oak_foliage_placer\": 8,\n\t\t\"minecraft:fancy_foliage_placer\": 5,\n\t\t\"minecraft:jungle_foliage_placer\": 6,\n\t\t\"minecraft:mega_pine_foliage_placer\": 7,\n\t\t\"minecraft:pine_foliage_placer\": 2,\n\t\t\"minecraft:random_spread_foliage_placer\": 9,\n\t\t\"minecraft:spruce_foliage_placer\": 1,\n\t\t\"minecraft:acacia_foliage_placer\": 3,\n\t\t\"minecraft:bush_foliage_placer\": 4,\n\t\t\"minecraft:cherry_foliage_placer\": 10,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_material_condition.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenMaterialCondition = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:steep\": 6,\n\t\t\"minecraft:stone_depth\": 10,\n\t\t\"minecraft:temperature\": 5,\n\t\t\"minecraft:vertical_gradient\": 2,\n\t\t\"minecraft:y_above\": 3,\n\t\t\"minecraft:above_preliminary_surface\": 9,\n\t\t\"minecraft:biome\": 0,\n\t\t\"minecraft:hole\": 8,\n\t\t\"minecraft:noise_threshold\": 1,\n\t\t\"minecraft:not\": 7,\n\t\t\"minecraft:water\": 4,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_material_rule.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenMaterialRule = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:block\": 1,\n\t\t\"minecraft:condition\": 3,\n\t\t\"minecraft:sequence\": 2,\n\t\t\"minecraft:bandlands\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_placement_modifier_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenPlacementModifierType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:rarity_filter\": 1,\n\t\t\"minecraft:surface_water_depth_filter\": 3,\n\t\t\"minecraft:block_predicate_filter\": 0,\n\t\t\"minecraft:carving_mask\": 14,\n\t\t\"minecraft:heightmap\": 10,\n\t\t\"minecraft:noise_based_count\": 6,\n\t\t\"minecraft:noise_threshold_count\": 7,\n\t\t\"minecraft:biome\": 4,\n\t\t\"minecraft:in_square\": 12,\n\t\t\"minecraft:random_offset\": 13,\n\t\t\"minecraft:surface_relative_threshold_filter\": 2,\n\t\t\"minecraft:count\": 5,\n\t\t\"minecraft:count_on_every_layer\": 8,\n\t\t\"minecraft:environment_scan\": 9,\n\t\t\"minecraft:fixed_placement\": 15,\n\t\t\"minecraft:height_range\": 11,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_pool_alias_binding.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenPoolAliasBinding = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:direct\": 2,\n\t\t\"minecraft:random\": 0,\n\t\t\"minecraft:random_group\": 1,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_root_placer_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenRootPlacerType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:mangrove_root_placer\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_structure_piece.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenStructurePiece = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:nece\": 9,\n\t\t\"minecraft:omsimple\": 47,\n\t\t\"minecraft:orp\": 33,\n\t\t\"minecraft:nectb\": 8,\n\t\t\"minecraft:nefos\": 54,\n\t\t\"minecraft:shrc\": 27,\n\t\t\"minecraft:shs\": 30,\n\t\t\"minecraft:mscorridor\": 0,\n\t\t\"minecraft:mscrossing\": 1,\n\t\t\"minecraft:nebs\": 6,\n\t\t\"minecraft:ompenthouse\": 46,\n\t\t\"minecraft:shcc\": 19,\n\t\t\"minecraft:shfc\": 20,\n\t\t\"minecraft:omb\": 38,\n\t\t\"minecraft:iglu\": 34,\n\t\t\"minecraft:necsr\": 14,\n\t\t\"minecraft:nesr\": 17,\n\t\t\"minecraft:shsd\": 28,\n\t\t\"minecraft:shstart\": 29,\n\t\t\"minecraft:omcr\": 39,\n\t\t\"minecraft:shpr\": 24,\n\t\t\"minecraft:tejp\": 32,\n\t\t\"minecraft:omdxr\": 40,\n\t\t\"minecraft:omdyzr\": 43,\n\t\t\"minecraft:wmp\": 51,\n\t\t\"minecraft:msroom\": 2,\n\t\t\"minecraft:nebef\": 5,\n\t\t\"minecraft:omdxyr\": 41,\n\t\t\"minecraft:omsimplet\": 48,\n\t\t\"minecraft:tesh\": 36,\n\t\t\"minecraft:nesc\": 12,\n\t\t\"minecraft:shssd\": 31,\n\t\t\"minecraft:btp\": 52,\n\t\t\"minecraft:msstairs\": 3,\n\t\t\"minecraft:rupo\": 35,\n\t\t\"minecraft:shph\": 25,\n\t\t\"minecraft:nemt\": 15,\n\t\t\"minecraft:nerc\": 16,\n\t\t\"minecraft:nestart\": 18,\n\t\t\"minecraft:omdzr\": 44,\n\t\t\"minecraft:omentry\": 45,\n\t\t\"minecraft:shipwreck\": 53,\n\t\t\"minecraft:shlt\": 22,\n\t\t\"minecraft:neccs\": 7,\n\t\t\"minecraft:omdyr\": 42,\n\t\t\"minecraft:nebcr\": 4,\n\t\t\"minecraft:nesclt\": 11,\n\t\t\"minecraft:nescrt\": 13,\n\t\t\"minecraft:sh5c\": 21,\n\t\t\"minecraft:shrt\": 26,\n\t\t\"minecraft:jigsaw\": 55,\n\t\t\"minecraft:nescsc\": 10,\n\t\t\"minecraft:omwr\": 49,\n\t\t\"minecraft:tedp\": 37,\n\t\t\"minecraft:ecp\": 50,\n\t\t\"minecraft:shli\": 23,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_structure_placement.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenStructurePlacement = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:concentric_rings\": 1,\n\t\t\"minecraft:random_spread\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_structure_pool_element.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenStructurePoolElement = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:empty_pool_element\": 3,\n\t\t\"minecraft:feature_pool_element\": 2,\n\t\t\"minecraft:legacy_single_pool_element\": 4,\n\t\t\"minecraft:list_pool_element\": 1,\n\t\t\"minecraft:single_pool_element\": 0,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_structure_processor.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenStructureProcessor = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:lava_submerged_block\": 8,\n\t\t\"minecraft:block_age\": 6,\n\t\t\"minecraft:block_rot\": 1,\n\t\t\"minecraft:gravity\": 2,\n\t\t\"minecraft:jigsaw_replacement\": 3,\n\t\t\"minecraft:nop\": 5,\n\t\t\"minecraft:protected_blocks\": 9,\n\t\t\"minecraft:rule\": 4,\n\t\t\"minecraft:blackstone_replace\": 7,\n\t\t\"minecraft:block_ignore\": 0,\n\t\t\"minecraft:capped\": 10,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_structure_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenStructureType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:swamp_hut\": 14,\n\t\t\"minecraft:desert_pyramid\": 1,\n\t\t\"minecraft:jigsaw\": 5,\n\t\t\"minecraft:nether_fossil\": 8,\n\t\t\"minecraft:ocean_monument\": 9,\n\t\t\"minecraft:ruined_portal\": 11,\n\t\t\"minecraft:shipwreck\": 12,\n\t\t\"minecraft:end_city\": 2,\n\t\t\"minecraft:fortress\": 3,\n\t\t\"minecraft:stronghold\": 13,\n\t\t\"minecraft:ocean_ruin\": 10,\n\t\t\"minecraft:buried_treasure\": 0,\n\t\t\"minecraft:igloo\": 4,\n\t\t\"minecraft:jungle_temple\": 6,\n\t\t\"minecraft:mineshaft\": 7,\n\t\t\"minecraft:woodland_mansion\": 15,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_tree_decorator_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenTreeDecoratorType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:leave_vine\": 1,\n\t\t\"minecraft:trunk_vine\": 0,\n\t\t\"minecraft:alter_ground\": 4,\n\t\t\"minecraft:attached_to_leaves\": 5,\n\t\t\"minecraft:beehive\": 3,\n\t\t\"minecraft:cocoa\": 2,\n\t},\n}"
  },
  {
    "path": "server/registry/worldgen_trunk_placer_type.go",
    "content": "package registry\n\n// Generated by https://github.com/ZeppelinMC/RegistryExtractor\nvar WorldgenTrunkPlacerType = Registry{\n\tDefault: \"\",\n\tEntries: map[string]int32{\n\t\t\"minecraft:dark_oak_trunk_placer\": 4,\n\t\t\"minecraft:forking_trunk_placer\": 1,\n\t\t\"minecraft:mega_jungle_trunk_placer\": 3,\n\t\t\"minecraft:upwards_branching_trunk_placer\": 7,\n\t\t\"minecraft:bending_trunk_placer\": 6,\n\t\t\"minecraft:cherry_trunk_placer\": 8,\n\t\t\"minecraft:fancy_trunk_placer\": 5,\n\t\t\"minecraft:giant_trunk_placer\": 2,\n\t\t\"minecraft:straight_trunk_placer\": 0,\n\t},\n}"
  },
  {
    "path": "server/server.go",
    "content": "package server\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"github.com/zeppelinmc/zeppelin/properties\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/configuration\"\n\t\"github.com/zeppelinmc/zeppelin/server/player\"\n\t\"image/png\"\n\t\"os\"\n\t\"runtime\"\n\t\"slices\"\n\t\"time\"\n\n\tnnet \"net\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/status\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n\t\"github.com/zeppelinmc/zeppelin/server/command\"\n\t\"github.com/zeppelinmc/zeppelin/server/player/state\"\n\t\"github.com/zeppelinmc/zeppelin/server/tick\"\n\n\t\"github.com/zeppelinmc/zeppelin/server/world\"\n\t_ \"github.com/zeppelinmc/zeppelin/server/world/terrain\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net\"\n\t\"github.com/zeppelinmc/zeppelin/util/log\"\n)\n\n// Creates a new server instance using the specified config, returns an error if unable to bind listener\nfunc New(cfg properties.ServerProperties, world *world.World) (*Server, error) {\n\tvar ip = nnet.ParseIP(cfg.ServerIp)\n\tif ip == nil {\n\t\tip = nnet.IPv4(0, 0, 0, 0)\n\t}\n\n\tlcfg := net.Config{\n\t\tIP:                   ip,\n\t\tPort:                 int(cfg.ServerPort),\n\t\tCompressionThreshold: int32(cfg.NetworkCompressionThreshold),\n\t\tEncrypt:              cfg.EnableEncryption || cfg.OnlineMode,\n\t\tAuthenticate:         cfg.OnlineMode,\n\t\tAcceptTransfers:      cfg.AcceptTransfers,\n\t}\n\tif !cfg.OnlineMode {\n\t\tlog.Warnln(\"Server is not enforcing authentication. The server will let anyone log as any username and potentially harm the server. Proceed with caution\")\n\t}\n\n\tlistener, err := lcfg.New()\n\tserver := &Server{\n\t\tlistener:   listener,\n\t\tcfg:        cfg,\n\t\tWorld:      world,\n\t\tPlayers:    state.NewPlayerEntityManager(),\n\t\tstopLoop:   make(chan struct{}),\n\t\tplayerList: player.NewPlayerList(0),\n\t}\n\tserver.icon, err = os.ReadFile(\"server-icon.png\")\n\tif err == nil {\n\t\timg, err := png.Decode(bytes.NewReader(server.icon))\n\t\tif err != nil {\n\t\t\tlog.Warn(\"Server icon must be a 64x64 image in the PNG format\")\n\t\t}\n\t\tb := img.Bounds()\n\t\tif b.Dx() != 64 || b.Dy() != 64 {\n\t\t\tlog.Warn(\"Server icon must be a 64x64 image in the PNG format\")\n\t\t}\n\t}\n\n\t//server.Console = &Console{Server: server}\n\t//server.World.Broadcast.AddDummy(server.Console)\n\tserver.listener.SetStatusProvider(server.provideStatus)\n\n\tif server.cfg.EnforceSecureProfile && !cfg.OnlineMode {\n\t\tserver.cfg.EnforceSecureProfile = false\n\t}\n\n\tcompstr := \"compress everything\"\n\tif cfg.NetworkCompressionThreshold > 0 {\n\t\tcompstr = fmt.Sprintf(\"compress everything starting from %d bytes\", cfg.NetworkCompressionThreshold)\n\t} else if cfg.NetworkCompressionThreshold < 0 {\n\t\tcompstr = \"no compression\"\n\t}\n\n\tlog.Infolnf(\"Network compression threshold is %d (%s)\", cfg.NetworkCompressionThreshold, compstr)\n\t//server.createTicker()\n\treturn server, err\n}\n\ntype Server struct {\n\tcfg         properties.ServerProperties\n\tlistener    *net.Listener\n\tTickManager *tick.TickManager\n\n\tplayerList player.PlayerList\n\n\ttimeStart time.Time\n\n\tWorld *world.World\n\n\ticon []byte\n\n\tCommandManager        *command.Manager\n\tonConnectionIntercept func(conn *net.Conn, stop *bool)\n\n\tclosed   bool\n\tstopLoop chan struct{}\n\n\tPlayers *state.PlayerEntityManager\n}\n\nfunc (srv *Server) setOnConnectionIntercept(i func(conn *net.Conn, stop *bool)) {\n\tsrv.onConnectionIntercept = i\n}\n\nfunc (srv *Server) Listener() *net.Listener {\n\treturn srv.listener\n}\n\nfunc (srv *Server) provideStatus(*net.Conn) status.StatusResponseData {\n\t//count := srv.World.Broadcast.NumSession()\n\tcount := 0\n\tmax := srv.cfg.MaxPlayers\n\tif max == -1 {\n\t\tmax = count + 1\n\t}\n\treturn status.StatusResponseData{\n\t\tVersion: status.StatusVersion{\n\t\t\tName:     \"Zeppelin 1.21.3\",\n\t\t\tProtocol: net.ProtocolVersion,\n\t\t},\n\t\tDescription: text.Unmarshal(srv.cfg.MOTD, srv.cfg.ChatFormatter.Rune()),\n\t\tPlayers: status.StatusPlayers{\n\t\t\tMax:    max,\n\t\t\tOnline: count,\n\t\t\t//Sample: srv.World.Broadcast.Sample(),\n\t\t},\n\t\tFavicon:            srv.icon,\n\t\tEnforcesSecureChat: srv.cfg.EnforceSecureProfile,\n\t}\n}\n\nfunc (srv *Server) SetStatusProvider(sp net.StatusProvider) {\n\tsrv.listener.SetStatusProvider(sp)\n}\n\nfunc (srv *Server) Properties() properties.ServerProperties {\n\treturn srv.cfg\n}\n\nfunc (srv *Server) Start(ts time.Time) {\n\tif slices.Index(os.Args, \"--no-plugins\") == -1 {\n\t\tif runtime.GOOS == \"darwin\" || runtime.GOOS == \"linux\" || runtime.GOOS == \"freebsd\" {\n\t\t\tlog.Infoln(\"Loading plugins\")\n\t\t\tsrv.loadPlugins()\n\t\t}\n\t}\n\n\tlog.Info(\"Preparing world spawn... \")\n\tow := srv.World.Dimension(\"minecraft:overworld\")\n\tvar chunks int32\n\n\tspawnCX, spawnCZ := srv.World.Data.SpawnX>>4, srv.World.Data.SpawnZ>>4\n\tfor x := spawnCX - srv.cfg.ViewDistance; x < spawnCX+srv.cfg.ViewDistance; x++ {\n\t\tfor z := spawnCZ - srv.cfg.ViewDistance; z < spawnCZ+srv.cfg.ViewDistance; z++ {\n\t\t\t_, err := ow.GetChunk(x, z)\n\t\t\tif err == nil {\n\t\t\t\tchunks++\n\t\t\t}\n\t\t}\n\t}\n\n\tfmt.Printf(\"cached %d chunks\\n\\r\", chunks)\n\n\tsrv.timeStart = ts\n\tlog.Infolnf(\"Done! (%s)\", time.Since(ts))\n\tfor {\n\t\tconn, err := srv.listener.Accept()\n\t\tif err != nil {\n\t\t\tif !srv.closed {\n\t\t\t\tlog.Errorln(\"Server error: \", err)\n\t\t\t}\n\t\t\t<-srv.stopLoop\n\t\t\treturn\n\t\t}\n\t\tif srv.onConnectionIntercept != nil {\n\t\t\tvar stop bool\n\t\t\tsrv.onConnectionIntercept(conn, &stop)\n\t\t\tif stop {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tsrv.handleNewConnection(conn)\n\t}\n}\n\nfunc (srv *Server) handleNewConnection(conn *net.Conn) {\n\tlog.Infolnf(\"%sPlayer attempting to connect: %s (%s)\", log.FormatAddr(srv.cfg.LogIPs, conn.RemoteAddr()), conn.Username(), conn.UUID())\n\tif p := srv.playerList.PlayerByUsername(conn.Username()); p != nil {\n\t\t_ = conn.WritePacket(&configuration.Disconnect{\n\t\t\tReason: text.TextComponent{Text: \"You are already connected to the server from another session. Please disconnect then try again\"},\n\t\t})\n\t\treturn\n\t}\n\tplayerData, err := srv.World.PlayerData(conn.UUID().String())\n\tif err != nil {\n\t\tplayerData = srv.World.NewPlayerData(conn.UUID())\n\t}\n\n\tplayerState := srv.Players.New(playerData)\n\n\tgo srv.playerList.New(conn, playerState, &srv.World.DimensionManager, &srv.World.Level, &srv.cfg, srv.CommandManager).Login()\n}\n\nfunc (srv *Server) Stop() {\n\tlog.InfolnClean(\"Stopping server\")\n\tsrv.closed = true\n\tsrv.listener.Close()\n\t//srv.World.Broadcast.DisconnectAll(text.TextComponent{Text: \"Server closed\"})\n\n\tlog.InfolnClean(\"Saving player data\")\n\tsrv.Players.SaveAll()\n\n\tsrv.World.Save()\n\tlog.InfolnfClean(\"Server lasted for %s\", srv.formatTimestart())\n\tsrv.stopLoop <- struct{}{}\n}\n\nfunc (srv *Server) formatTimestart() string {\n\tsub := time.Since(srv.timeStart)\n\treturn fmt.Sprintf(\"%02dhrs %02dmins, %02dsecs\", int(sub.Hours())%60, int(sub.Minutes())%60, int(sub.Seconds())%60)\n}\n\nfunc (srv *Server) createTicker() {\n\t//srv.TickManager = tick.New(20, srv.World.Broadcast)\n\tsrv.TickManager.AddNew(func() {\n\t\tsrv.World.IncrementTime()\n\t})\n}\n"
  },
  {
    "path": "server/tick/tick.go",
    "content": "package tick\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\t//\"github.com/zeppelinmc/zeppelin/server/session\"\n)\n\n// New creates a new tick manager with tps ticks per second\nfunc New(tps int /*b *session.Broadcast*/) *TickManager {\n\tmgr := &TickManager{\n\t\t//b: b,\n\t}\n\tmgr.d.Store(int64(time.Second / time.Duration(tps)))\n\n\treturn mgr\n}\n\ntype TickManager struct {\n\ttickers []*time.Ticker\n\n\tmu sync.RWMutex\n\td  atomic.Int64\n\n\t//b *session.Broadcast\n}\n\nfunc (mgr *TickManager) AddNew(f func()) {\n\ttick := mgr.New()\n\tgo func() {\n\t\tfor range tick.C {\n\t\t\tf()\n\t\t}\n\t}()\n}\n\nfunc (mgr *TickManager) SetFrequency(tps int) error {\n\tmgr.mu.RLock()\n\tdefer mgr.mu.RUnlock()\n\n\tif tps == 0 {\n\t\treturn fmt.Errorf(\"0 tps is not allowed. Use mgr.Freeze instead\")\n\t}\n\n\td := time.Second / time.Duration(tps)\n\tmgr.d.Store(int64(d))\n\n\tfor _, ticker := range mgr.tickers {\n\t\tticker.Reset(d)\n\t}\n\n\t/*mgr.b.Range(func(u uuid.UUID, s session.Session) bool {\n\t\ts.SetTickState(float32(tps), false)\n\t\treturn true\n\t})*/\n\n\treturn nil\n}\n\nfunc (mgr *TickManager) Freeze() {\n\tfor _, ticker := range mgr.tickers {\n\t\tticker.Stop()\n\t}\n\t/*mgr.b.Range(func(u uuid.UUID, s session.Session) bool {\n\t\ts.SetTickState(0, true)\n\t\treturn true\n\t})*/\n}\n\nfunc (mgr *TickManager) Unfreeze() {\n\tfreq := time.Duration(mgr.d.Load())\n\tfor _, ticker := range mgr.tickers {\n\t\tticker.Reset(freq)\n\t}\n\t//tps := 1 / (float32(freq) / float32(time.Second))\n\t/*mgr.b.Range(func(u uuid.UUID, s session.Session) bool {\n\t\ts.SetTickState(tps, false)\n\t\treturn true\n\t})*/\n}\n\nfunc (mgr *TickManager) Add(ticker *time.Ticker) {\n\tmgr.mu.Lock()\n\tdefer mgr.mu.Unlock()\n\tmgr.tickers = append(mgr.tickers, ticker)\n}\n\nfunc (mgr *TickManager) New() *time.Ticker {\n\tticker := time.NewTicker(mgr.Frequency())\n\tmgr.mu.Lock()\n\tdefer mgr.mu.Unlock()\n\tmgr.tickers = append(mgr.tickers, ticker)\n\n\treturn ticker\n}\n\nfunc (mgr *TickManager) Count() int {\n\tmgr.mu.RLock()\n\tdefer mgr.mu.RUnlock()\n\treturn len(mgr.tickers)\n}\n\nfunc (mgr *TickManager) Remove(ticker *time.Ticker) (ok bool) {\n\tfor _, t := range mgr.tickers {\n\t\tif t == ticker {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn\n}\n\nfunc (mgr *TickManager) Frequency() time.Duration {\n\treturn time.Duration(mgr.d.Load())\n}\n"
  },
  {
    "path": "server/world/block/0block.go",
    "content": "package block\n\nimport (\n\t\"slices\"\n\t\"strconv\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/tags\"\n\t\"github.com/zeppelinmc/zeppelin/server/registry\"\n\n\t//\"github.com/zeppelinmc/zeppelin/server/session\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk/section\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/dimension\"\n)\n\ntype BlockProperties = map[string]string\ntype Block = section.Block\n\ntype Axis = string\n\nconst (\n\tAxisX Axis = \"x\"\n\tAxisY Axis = \"y\"\n\tAxisZ Axis = \"z\"\n)\n\ntype Direction = string\n\nconst (\n\tDirectionNorth Direction = \"north\"\n\tDirectionSouth Direction = \"south\"\n\tDirectionWest  Direction = \"west\"\n\tDirectionEast  Direction = \"east\"\n)\n\nfunc atoi(str string) int {\n\tv, _ := strconv.Atoi(str)\n\n\treturn v\n}\n\n// A usable block is a block which performs a certain action when left clicked\ntype Usable interface {\n\tBlock\n\tUse(clicker any, pk play.UseItemOn, dimension *dimension.Dimension)\n}\n\n// A block state haver is one that also has a block state\ntype BlockEntityHaver interface {\n\tBlock\n\tBlockEntity(pos.BlockPosition) chunk.BlockEntity\n}\n\n// A block custom place sound haver is one that has a custom place sound\ntype BlockCustomPlaceSoundHaver interface {\n\tBlock\n\tPlaceSound(pos.BlockPosition) *play.SoundEffect\n}\n\ntype BreakInfo struct {\n\t// The hardness of this block\n\tHardness float32\n\t// Whether this block drops xp when broken\n\tDropsXp bool\n\t// The xp points this block can drop\n\tMinXp, MaxXp float32\n\n\t// The blast resistance of this block\n\tBlastResistance float32\n}\n\n// Is checks if the tag applies to the block\nfunc Is(block Block, tagName string) bool {\n\tname, _ := block.Encode()\n\n\treturn slices.Index(tags.Tags.Tags[\"minecraft:block\"][tagName], registry.Block.Get(name)) != -1\n}\n\n// A block that can be broken\ntype Breakable interface {\n\tBreakInfo() BreakInfo\n}\n\nfunc init() {\n\tsection.RegisterBlock(Cake{})\n\tsection.RegisterBlock(JunglePressurePlate{})\n\tsection.RegisterBlock(StrippedMangroveWood{})\n\tsection.RegisterBlock(StrippedWarpedHyphae{})\n\tsection.RegisterBlock(WaxedOxidizedCopperDoor{})\n\tsection.RegisterBlock(DioriteSlab{})\n\tsection.RegisterBlock(Mud{})\n\tsection.RegisterBlock(SporeBlossom{})\n\tsection.RegisterBlock(StrippedCrimsonHyphae{})\n\tsection.RegisterBlock(DeadBrainCoral{})\n\tsection.RegisterBlock(JungleFence{})\n\tsection.RegisterBlock(Podzol{})\n\tsection.RegisterBlock(PolishedDeepslateWall{})\n\tsection.RegisterBlock(RedCandleCake{})\n\tsection.RegisterBlock(WeatheredChiseledCopper{})\n\tsection.RegisterBlock(WeatheredCopperBulb{})\n\tsection.RegisterBlock(AncientDebris{})\n\tsection.RegisterBlock(Anvil{})\n\tsection.RegisterBlock(OakTrapdoor{})\n\tsection.RegisterBlock(PrismarineWall{})\n\tsection.RegisterBlock(PurpleTerracotta{})\n\tsection.RegisterBlock(RespawnAnchor{})\n\tsection.RegisterBlock(CrimsonFungus{})\n\tsection.RegisterBlock(LightBlueStainedGlass{})\n\tsection.RegisterBlock(MudBricks{})\n\tsection.RegisterBlock(CyanConcretePowder{})\n\tsection.RegisterBlock(NetherBrickStairs{})\n\tsection.RegisterBlock(PowderSnowCauldron{})\n\tsection.RegisterBlock(TwistingVinesPlant{})\n\tsection.RegisterBlock(WaxedWeatheredCutCopperSlab{})\n\tsection.RegisterBlock(Bedrock{})\n\tsection.RegisterBlock(CrimsonTrapdoor{})\n\tsection.RegisterBlock(StoneBrickSlab{})\n\tsection.RegisterBlock(RedSandstoneSlab{})\n\tsection.RegisterBlock(Shroomlight{})\n\tsection.RegisterBlock(YellowCandleCake{})\n\tsection.RegisterBlock(CutCopperStairs{})\n\tsection.RegisterBlock(Lilac{})\n\tsection.RegisterBlock(RedCarpet{})\n\tsection.RegisterBlock(JungleLog{})\n\tsection.RegisterBlock(MuddyMangroveRoots{})\n\tsection.RegisterBlock(PolishedDeepslate{})\n\tsection.RegisterBlock(WeatheredCopperGrate{})\n\tsection.RegisterBlock(ChiseledPolishedBlackstone{})\n\tsection.RegisterBlock(DeepslateIronOre{})\n\tsection.RegisterBlock(MossBlock{})\n\tsection.RegisterBlock(DarkPrismarine{})\n\tsection.RegisterBlock(DeadBubbleCoral{})\n\tsection.RegisterBlock(MangroveFenceGate{})\n\tsection.RegisterBlock(MangroveTrapdoor{})\n\tsection.RegisterBlock(OakDoor{})\n\tsection.RegisterBlock(BirchSlab{})\n\tsection.RegisterBlock(BubbleCoralBlock{})\n\tsection.RegisterBlock(ChiseledBookshelf{})\n\tsection.RegisterBlock(PinkConcretePowder{})\n\tsection.RegisterBlock(LightGrayStainedGlassPane{})\n\tsection.RegisterBlock(SeaPickle{})\n\tsection.RegisterBlock(StructureBlock{})\n\tsection.RegisterBlock(TubeCoralWallFan{})\n\tsection.RegisterBlock(CopperGrate{})\n\tsection.RegisterBlock(PottedCrimsonRoots{})\n\tsection.RegisterBlock(TripwireHook{})\n\tsection.RegisterBlock(PottedBrownMushroom{})\n\tsection.RegisterBlock(AcaciaWallSign{})\n\tsection.RegisterBlock(CrackedDeepslateBricks{})\n\tsection.RegisterBlock(PinkWool{})\n\tsection.RegisterBlock(DeepslateBrickWall{})\n\tsection.RegisterBlock(JungleStairs{})\n\tsection.RegisterBlock(LimeWallBanner{})\n\tsection.RegisterBlock(OrangeStainedGlass{})\n\tsection.RegisterBlock(PottedAzaleaBush{})\n\tsection.RegisterBlock(BlackWallBanner{})\n\tsection.RegisterBlock(CherrySapling{})\n\tsection.RegisterBlock(CrackedPolishedBlackstoneBricks{})\n\tsection.RegisterBlock(Mycelium{})\n\tsection.RegisterBlock(Piston{})\n\tsection.RegisterBlock(AcaciaPressurePlate{})\n\tsection.RegisterBlock(BambooSign{})\n\tsection.RegisterBlock(BirchFence{})\n\tsection.RegisterBlock(BambooPlanks{})\n\tsection.RegisterBlock(CyanConcrete{})\n\tsection.RegisterBlock(LightBlueBanner{})\n\tsection.RegisterBlock(SpruceLeaves{})\n\tsection.RegisterBlock(Andesite{})\n\tsection.RegisterBlock(CherrySign{})\n\tsection.RegisterBlock(BirchSign{})\n\tsection.RegisterBlock(MudBrickStairs{})\n\tsection.RegisterBlock(Torch{})\n\tsection.RegisterBlock(BambooSapling{})\n\tsection.RegisterBlock(MangrovePlanks{})\n\tsection.RegisterBlock(WaxedOxidizedCutCopperSlab{})\n\tsection.RegisterBlock(SugarCane{})\n\tsection.RegisterBlock(AcaciaButton{})\n\tsection.RegisterBlock(DeepslateLapisOre{})\n\tsection.RegisterBlock(Potatoes{})\n\tsection.RegisterBlock(WaxedExposedCutCopperStairs{})\n\tsection.RegisterBlock(YellowGlazedTerracotta{})\n\tsection.RegisterBlock(IronDoor{})\n\tsection.RegisterBlock(JungleSlab{})\n\tsection.RegisterBlock(PinkStainedGlassPane{})\n\tsection.RegisterBlock(SculkCatalyst{})\n\tsection.RegisterBlock(SpruceSlab{})\n\tsection.RegisterBlock(CandleCake{})\n\tsection.RegisterBlock(LapisBlock{})\n\tsection.RegisterBlock(MossyStoneBrickWall{})\n\tsection.RegisterBlock(WeatheredCutCopperStairs{})\n\tsection.RegisterBlock(FloweringAzalea{})\n\tsection.RegisterBlock(OakFence{})\n\tsection.RegisterBlock(PurpleCandle{})\n\tsection.RegisterBlock(IronOre{})\n\tsection.RegisterBlock(LightBlueWallBanner{})\n\tsection.RegisterBlock(Cornflower{})\n\tsection.RegisterBlock(DirtPath{})\n\tsection.RegisterBlock(ExposedCopperDoor{})\n\tsection.RegisterBlock(BrainCoralFan{})\n\tsection.RegisterBlock(ChippedAnvil{})\n\tsection.RegisterBlock(QuartzBlock{})\n\tsection.RegisterBlock(SpruceFenceGate{})\n\tsection.RegisterBlock(StrippedCrimsonStem{})\n\tsection.RegisterBlock(Cobblestone{})\n\tsection.RegisterBlock(DragonHead{})\n\tsection.RegisterBlock(SmoothSandstoneStairs{})\n\tsection.RegisterBlock(BlastFurnace{})\n\tsection.RegisterBlock(OxidizedCopperTrapdoor{})\n\tsection.RegisterBlock(LimeBanner{})\n\tsection.RegisterBlock(PolishedDeepslateSlab{})\n\tsection.RegisterBlock(VerdantFroglight{})\n\tsection.RegisterBlock(BlueConcrete{})\n\tsection.RegisterBlock(CobbledDeepslate{})\n\tsection.RegisterBlock(JungleDoor{})\n\tsection.RegisterBlock(SkeletonWallSkull{})\n\tsection.RegisterBlock(ExposedCopperTrapdoor{})\n\tsection.RegisterBlock(MagentaBanner{})\n\tsection.RegisterBlock(SandstoneStairs{})\n\tsection.RegisterBlock(WaxedOxidizedCopperTrapdoor{})\n\tsection.RegisterBlock(BlackBanner{})\n\tsection.RegisterBlock(CaveAir{})\n\tsection.RegisterBlock(DiamondOre{})\n\tsection.RegisterBlock(BubbleCoralWallFan{})\n\tsection.RegisterBlock(StrippedJungleWood{})\n\tsection.RegisterBlock(WaxedOxidizedCutCopper{})\n\tsection.RegisterBlock(DarkPrismarineStairs{})\n\tsection.RegisterBlock(GrayCarpet{})\n\tsection.RegisterBlock(MossyStoneBrickSlab{})\n\tsection.RegisterBlock(OrangeConcrete{})\n\tsection.RegisterBlock(AttachedMelonStem{})\n\tsection.RegisterBlock(BlueStainedGlass{})\n\tsection.RegisterBlock(Crafter{})\n\tsection.RegisterBlock(SoulSoil{})\n\tsection.RegisterBlock(BrownCandle{})\n\tsection.RegisterBlock(PinkStainedGlass{})\n\tsection.RegisterBlock(SandstoneWall{})\n\tsection.RegisterBlock(SpruceHangingSign{})\n\tsection.RegisterBlock(StrippedBirchWood{})\n\tsection.RegisterBlock(WhiteCarpet{})\n\tsection.RegisterBlock(AcaciaDoor{})\n\tsection.RegisterBlock(DeadBrainCoralFan{})\n\tsection.RegisterBlock(OakLog{})\n\tsection.RegisterBlock(SoulFire{})\n\tsection.RegisterBlock(Target{})\n\tsection.RegisterBlock(CalibratedSculkSensor{})\n\tsection.RegisterBlock(EndStone{})\n\tsection.RegisterBlock(MagentaShulkerBox{})\n\tsection.RegisterBlock(GreenBanner{})\n\tsection.RegisterBlock(OrangeBanner{})\n\tsection.RegisterBlock(LightGrayWool{})\n\tsection.RegisterBlock(OakSapling{})\n\tsection.RegisterBlock(OxeyeDaisy{})\n\tsection.RegisterBlock(WarpedHyphae{})\n\tsection.RegisterBlock(BirchPressurePlate{})\n\tsection.RegisterBlock(BrownConcretePowder{})\n\tsection.RegisterBlock(DarkOakSlab{})\n\tsection.RegisterBlock(DarkOakStairs{})\n\tsection.RegisterBlock(PinkConcrete{})\n\tsection.RegisterBlock(PolishedAndesiteSlab{})\n\tsection.RegisterBlock(SpruceStairs{})\n\tsection.RegisterBlock(GrayShulkerBox{})\n\tsection.RegisterBlock(IronBlock{})\n\tsection.RegisterBlock(NetherWartBlock{})\n\tsection.RegisterBlock(YellowStainedGlass{})\n\tsection.RegisterBlock(CobbledDeepslateWall{})\n\tsection.RegisterBlock(CyanWallBanner{})\n\tsection.RegisterBlock(PurpleStainedGlass{})\n\tsection.RegisterBlock(MagentaWallBanner{})\n\tsection.RegisterBlock(WaxedCopperGrate{})\n\tsection.RegisterBlock(Pumpkin{})\n\tsection.RegisterBlock(ChiseledSandstone{})\n\tsection.RegisterBlock(CyanStainedGlass{})\n\tsection.RegisterBlock(NetherPortal{})\n\tsection.RegisterBlock(WarpedButton{})\n\tsection.RegisterBlock(WaterCauldron{})\n\tsection.RegisterBlock(EndGateway{})\n\tsection.RegisterBlock(RedStainedGlass{})\n\tsection.RegisterBlock(SoulTorch{})\n\tsection.RegisterBlock(OrangeShulkerBox{})\n\tsection.RegisterBlock(PlayerWallHead{})\n\tsection.RegisterBlock(Rail{})\n\tsection.RegisterBlock(SnifferEgg{})\n\tsection.RegisterBlock(WarpedSlab{})\n\tsection.RegisterBlock(ExposedCutCopperSlab{})\n\tsection.RegisterBlock(ExposedCutCopperStairs{})\n\tsection.RegisterBlock(LimeStainedGlassPane{})\n\tsection.RegisterBlock(SlimeBlock{})\n\tsection.RegisterBlock(ChorusPlant{})\n\tsection.RegisterBlock(MangroveRoots{})\n\tsection.RegisterBlock(ShortGrass{})\n\tsection.RegisterBlock(GoldOre{})\n\tsection.RegisterBlock(LightGrayShulkerBox{})\n\tsection.RegisterBlock(PottedRedMushroom{})\n\tsection.RegisterBlock(BlueCarpet{})\n\tsection.RegisterBlock(CraftingTable{})\n\tsection.RegisterBlock(DeadHornCoralBlock{})\n\tsection.RegisterBlock(PurpleShulkerBox{})\n\tsection.RegisterBlock(BambooButton{})\n\tsection.RegisterBlock(CobblestoneWall{})\n\tsection.RegisterBlock(DragonWallHead{})\n\tsection.RegisterBlock(LightGrayBed{})\n\tsection.RegisterBlock(MangrovePressurePlate{})\n\tsection.RegisterBlock(BlueOrchid{})\n\tsection.RegisterBlock(BrownStainedGlass{})\n\tsection.RegisterBlock(ChiseledQuartzBlock{})\n\tsection.RegisterBlock(DeadTubeCoralWallFan{})\n\tsection.RegisterBlock(Terracotta{})\n\tsection.RegisterBlock(BlueWool{})\n\tsection.RegisterBlock(CutRedSandstone{})\n\tsection.RegisterBlock(DarkOakSapling{})\n\tsection.RegisterBlock(WaxedCopperTrapdoor{})\n\tsection.RegisterBlock(BrickStairs{})\n\tsection.RegisterBlock(PolishedTuffSlab{})\n\tsection.RegisterBlock(WarpedHangingSign{})\n\tsection.RegisterBlock(CyanBed{})\n\tsection.RegisterBlock(DeadBush{})\n\tsection.RegisterBlock(RedTerracotta{})\n\tsection.RegisterBlock(PolishedBasalt{})\n\tsection.RegisterBlock(WaxedCutCopper{})\n\tsection.RegisterBlock(BambooSlab{})\n\tsection.RegisterBlock(CherryWallHangingSign{})\n\tsection.RegisterBlock(GrayConcrete{})\n\tsection.RegisterBlock(PistonHead{})\n\tsection.RegisterBlock(TubeCoralBlock{})\n\tsection.RegisterBlock(OrangeBed{})\n\tsection.RegisterBlock(PolishedGraniteStairs{})\n\tsection.RegisterBlock(PottedFloweringAzaleaBush{})\n\tsection.RegisterBlock(BambooFenceGate{})\n\tsection.RegisterBlock(BlackWool{})\n\tsection.RegisterBlock(CoarseDirt{})\n\tsection.RegisterBlock(AcaciaFenceGate{})\n\tsection.RegisterBlock(Sandstone{})\n\tsection.RegisterBlock(BambooMosaicSlab{})\n\tsection.RegisterBlock(MangroveLeaves{})\n\tsection.RegisterBlock(WhiteCandle{})\n\tsection.RegisterBlock(PottedSpruceSapling{})\n\tsection.RegisterBlock(StoneBrickStairs{})\n\tsection.RegisterBlock(WhiteTerracotta{})\n\tsection.RegisterBlock(EnderChest{})\n\tsection.RegisterBlock(FireCoral{})\n\tsection.RegisterBlock(PolishedTuffStairs{})\n\tsection.RegisterBlock(CutSandstone{})\n\tsection.RegisterBlock(GreenWool{})\n\tsection.RegisterBlock(SmoothQuartzSlab{})\n\tsection.RegisterBlock(JungleTrapdoor{})\n\tsection.RegisterBlock(MangroveButton{})\n\tsection.RegisterBlock(PinkBed{})\n\tsection.RegisterBlock(AcaciaSapling{})\n\tsection.RegisterBlock(ActivatorRail{})\n\tsection.RegisterBlock(Furnace{})\n\tsection.RegisterBlock(DeadTubeCoral{})\n\tsection.RegisterBlock(PurpleCarpet{})\n\tsection.RegisterBlock(WarpedStem{})\n\tsection.RegisterBlock(Deepslate{})\n\tsection.RegisterBlock(LimeWool{})\n\tsection.RegisterBlock(MagentaConcrete{})\n\tsection.RegisterBlock(SpruceSign{})\n\tsection.RegisterBlock(BirchLog{})\n\tsection.RegisterBlock(BrownBed{})\n\tsection.RegisterBlock(CopperOre{})\n\tsection.RegisterBlock(PottedWarpedFungus{})\n\tsection.RegisterBlock(LimeConcrete{})\n\tsection.RegisterBlock(LimeGlazedTerracotta{})\n\tsection.RegisterBlock(PointedDripstone{})\n\tsection.RegisterBlock(PurpurSlab{})\n\tsection.RegisterBlock(WeepingVinesPlant{})\n\tsection.RegisterBlock(Glass{})\n\tsection.RegisterBlock(Hopper{})\n\tsection.RegisterBlock(OxidizedChiseledCopper{})\n\tsection.RegisterBlock(WhiteWallBanner{})\n\tsection.RegisterBlock(WitherSkeletonSkull{})\n\tsection.RegisterBlock(LimeCarpet{})\n\tsection.RegisterBlock(Observer{})\n\tsection.RegisterBlock(PolishedBlackstoneBrickWall{})\n\tsection.RegisterBlock(Loom{})\n\tsection.RegisterBlock(PolishedBlackstoneBrickStairs{})\n\tsection.RegisterBlock(Cauldron{})\n\tsection.RegisterBlock(DeadTubeCoralBlock{})\n\tsection.RegisterBlock(LightBlueGlazedTerracotta{})\n\tsection.RegisterBlock(LargeAmethystBud{})\n\tsection.RegisterBlock(Candle{})\n\tsection.RegisterBlock(DeadFireCoralBlock{})\n\tsection.RegisterBlock(KelpPlant{})\n\tsection.RegisterBlock(PottedOxeyeDaisy{})\n\tsection.RegisterBlock(Sunflower{})\n\tsection.RegisterBlock(BirchPlanks{})\n\tsection.RegisterBlock(HoneycombBlock{})\n\tsection.RegisterBlock(PottedCrimsonFungus{})\n\tsection.RegisterBlock(BrewingStand{})\n\tsection.RegisterBlock(RedSand{})\n\tsection.RegisterBlock(PurpurStairs{})\n\tsection.RegisterBlock(WarpedPressurePlate{})\n\tsection.RegisterBlock(WhiteGlazedTerracotta{})\n\tsection.RegisterBlock(IronBars{})\n\tsection.RegisterBlock(JungleFenceGate{})\n\tsection.RegisterBlock(LightBlueConcretePowder{})\n\tsection.RegisterBlock(PottedDeadBush{})\n\tsection.RegisterBlock(SuspiciousSand{})\n\tsection.RegisterBlock(CobblestoneStairs{})\n\tsection.RegisterBlock(CrimsonNylium{})\n\tsection.RegisterBlock(GrayConcretePowder{})\n\tsection.RegisterBlock(Tuff{})\n\tsection.RegisterBlock(WarpedFenceGate{})\n\tsection.RegisterBlock(BlackCandleCake{})\n\tsection.RegisterBlock(CobbledDeepslateSlab{})\n\tsection.RegisterBlock(Prismarine{})\n\tsection.RegisterBlock(CherryWood{})\n\tsection.RegisterBlock(Comparator{})\n\tsection.RegisterBlock(SmoothQuartzStairs{})\n\tsection.RegisterBlock(SoulSand{})\n\tsection.RegisterBlock(EndStoneBrickWall{})\n\tsection.RegisterBlock(MangroveSign{})\n\tsection.RegisterBlock(PottedAzureBluet{})\n\tsection.RegisterBlock(SweetBerryBush{})\n\tsection.RegisterBlock(Azalea{})\n\tsection.RegisterBlock(CyanShulkerBox{})\n\tsection.RegisterBlock(EndStoneBricks{})\n\tsection.RegisterBlock(MovingPiston{})\n\tsection.RegisterBlock(PolishedAndesite{})\n\tsection.RegisterBlock(QuartzSlab{})\n\tsection.RegisterBlock(BigDripleafStem{})\n\tsection.RegisterBlock(ChiseledRedSandstone{})\n\tsection.RegisterBlock(GrayWallBanner{})\n\tsection.RegisterBlock(PolishedBlackstonePressurePlate{})\n\tsection.RegisterBlock(Seagrass{})\n\tsection.RegisterBlock(RedWool{})\n\tsection.RegisterBlock(WarpedStairs{})\n\tsection.RegisterBlock(CrimsonHyphae{})\n\tsection.RegisterBlock(CutCopper{})\n\tsection.RegisterBlock(DarkOakWallHangingSign{})\n\tsection.RegisterBlock(ReinforcedDeepslate{})\n\tsection.RegisterBlock(StrippedBambooBlock{})\n\tsection.RegisterBlock(WaxedExposedCopperTrapdoor{})\n\tsection.RegisterBlock(WeatheredCopperDoor{})\n\tsection.RegisterBlock(Air{})\n\tsection.RegisterBlock(DarkOakSign{})\n\tsection.RegisterBlock(MossyCobblestoneSlab{})\n\tsection.RegisterBlock(GraniteStairs{})\n\tsection.RegisterBlock(MagentaConcretePowder{})\n\tsection.RegisterBlock(MangroveWood{})\n\tsection.RegisterBlock(MossyStoneBrickStairs{})\n\tsection.RegisterBlock(PottedCornflower{})\n\tsection.RegisterBlock(AcaciaStairs{})\n\tsection.RegisterBlock(BirchHangingSign{})\n\tsection.RegisterBlock(CreeperWallHead{})\n\tsection.RegisterBlock(SmithingTable{})\n\tsection.RegisterBlock(PurpleConcretePowder{})\n\tsection.RegisterBlock(SpruceLog{})\n\tsection.RegisterBlock(WaxedExposedCopperGrate{})\n\tsection.RegisterBlock(DarkOakPressurePlate{})\n\tsection.RegisterBlock(ExposedCopperGrate{})\n\tsection.RegisterBlock(GreenCandle{})\n\tsection.RegisterBlock(ExposedCutCopper{})\n\tsection.RegisterBlock(PottedWhiteTulip{})\n\tsection.RegisterBlock(TuffBrickWall{})\n\tsection.RegisterBlock(WeatheredCutCopperSlab{})\n\tsection.RegisterBlock(YellowConcrete{})\n\tsection.RegisterBlock(DeepslateRedstoneOre{})\n\tsection.RegisterBlock(SmoothStoneSlab{})\n\tsection.RegisterBlock(SuspiciousGravel{})\n\tsection.RegisterBlock(ExposedCopper{})\n\tsection.RegisterBlock(GreenCarpet{})\n\tsection.RegisterBlock(GreenGlazedTerracotta{})\n\tsection.RegisterBlock(LilyPad{})\n\tsection.RegisterBlock(OakStairs{})\n\tsection.RegisterBlock(BlueShulkerBox{})\n\tsection.RegisterBlock(Carrots{})\n\tsection.RegisterBlock(DarkPrismarineSlab{})\n\tsection.RegisterBlock(PurpleWallBanner{})\n\tsection.RegisterBlock(WaxedWeatheredCopperTrapdoor{})\n\tsection.RegisterBlock(LimeBed{})\n\tsection.RegisterBlock(WaxedWeatheredCopperDoor{})\n\tsection.RegisterBlock(GreenConcrete{})\n\tsection.RegisterBlock(IronTrapdoor{})\n\tsection.RegisterBlock(JungleWallSign{})\n\tsection.RegisterBlock(WaxedCopperBulb{})\n\tsection.RegisterBlock(Blackstone{})\n\tsection.RegisterBlock(CyanWool{})\n\tsection.RegisterBlock(OakWallSign{})\n\tsection.RegisterBlock(StonePressurePlate{})\n\tsection.RegisterBlock(StrippedDarkOakLog{})\n\tsection.RegisterBlock(DeepslateBrickSlab{})\n\tsection.RegisterBlock(LimeStainedGlass{})\n\tsection.RegisterBlock(PolishedDiorite{})\n\tsection.RegisterBlock(PottedOakSapling{})\n\tsection.RegisterBlock(RedStainedGlassPane{})\n\tsection.RegisterBlock(Allium{})\n\tsection.RegisterBlock(CopperTrapdoor{})\n\tsection.RegisterBlock(DeadFireCoralFan{})\n\tsection.RegisterBlock(TintedGlass{})\n\tsection.RegisterBlock(WarpedWallSign{})\n\tsection.RegisterBlock(WaxedExposedChiseledCopper{})\n\tsection.RegisterBlock(DioriteStairs{})\n\tsection.RegisterBlock(PurpleCandleCake{})\n\tsection.RegisterBlock(SmoothRedSandstoneStairs{})\n\tsection.RegisterBlock(Beetroots{})\n\tsection.RegisterBlock(CommandBlock{})\n\tsection.RegisterBlock(GreenWallBanner{})\n\tsection.RegisterBlock(PottedCherrySapling{})\n\tsection.RegisterBlock(StoneBricks{})\n\tsection.RegisterBlock(WarpedPlanks{})\n\tsection.RegisterBlock(BambooPressurePlate{})\n\tsection.RegisterBlock(CherryPlanks{})\n\tsection.RegisterBlock(LilyOfTheValley{})\n\tsection.RegisterBlock(PottedFern{})\n\tsection.RegisterBlock(YellowConcretePowder{})\n\tsection.RegisterBlock(GrassBlock{})\n\tsection.RegisterBlock(LightGrayConcrete{})\n\tsection.RegisterBlock(Melon{})\n\tsection.RegisterBlock(Lectern{})\n\tsection.RegisterBlock(PinkTulip{})\n\tsection.RegisterBlock(RedMushroomBlock{})\n\tsection.RegisterBlock(Wheat{})\n\tsection.RegisterBlock(WhiteConcrete{})\n\tsection.RegisterBlock(BambooMosaicStairs{})\n\tsection.RegisterBlock(CyanTerracotta{})\n\tsection.RegisterBlock(InfestedChiseledStoneBricks{})\n\tsection.RegisterBlock(FletchingTable{})\n\tsection.RegisterBlock(PottedCactus{})\n\tsection.RegisterBlock(WarpedDoor{})\n\tsection.RegisterBlock(StrippedOakLog{})\n\tsection.RegisterBlock(Composter{})\n\tsection.RegisterBlock(MagentaCandle{})\n\tsection.RegisterBlock(OchreFroglight{})\n\tsection.RegisterBlock(GreenShulkerBox{})\n\tsection.RegisterBlock(Sand{})\n\tsection.RegisterBlock(StoneBrickWall{})\n\tsection.RegisterBlock(WaxedExposedCutCopper{})\n\tsection.RegisterBlock(ChiseledStoneBricks{})\n\tsection.RegisterBlock(EnchantingTable{})\n\tsection.RegisterBlock(GildedBlackstone{})\n\tsection.RegisterBlock(MagentaStainedGlass{})\n\tsection.RegisterBlock(PurpleBanner{})\n\tsection.RegisterBlock(PolishedBlackstoneSlab{})\n\tsection.RegisterBlock(PurpleGlazedTerracotta{})\n\tsection.RegisterBlock(PurpurBlock{})\n\tsection.RegisterBlock(BrownStainedGlassPane{})\n\tsection.RegisterBlock(LightBlueWool{})\n\tsection.RegisterBlock(PinkPetals{})\n\tsection.RegisterBlock(StrippedOakWood{})\n\tsection.RegisterBlock(WaxedCutCopperSlab{})\n\tsection.RegisterBlock(CyanGlazedTerracotta{})\n\tsection.RegisterBlock(DioriteWall{})\n\tsection.RegisterBlock(RawIronBlock{})\n\tsection.RegisterBlock(ChiseledDeepslate{})\n\tsection.RegisterBlock(LightGrayConcretePowder{})\n\tsection.RegisterBlock(Torchflower{})\n\tsection.RegisterBlock(WeatheredCopper{})\n\tsection.RegisterBlock(BlackShulkerBox{})\n\tsection.RegisterBlock(PackedMud{})\n\tsection.RegisterBlock(RedstoneLamp{})\n\tsection.RegisterBlock(WarpedWartBlock{})\n\tsection.RegisterBlock(BlueCandle{})\n\tsection.RegisterBlock(DeadBubbleCoralFan{})\n\tsection.RegisterBlock(VoidAir{})\n\tsection.RegisterBlock(YellowCandle{})\n\tsection.RegisterBlock(GlowLichen{})\n\tsection.RegisterBlock(LapisOre{})\n\tsection.RegisterBlock(PottedPinkTulip{})\n\tsection.RegisterBlock(PottedPoppy{})\n\tsection.RegisterBlock(Bookshelf{})\n\tsection.RegisterBlock(FloweringAzaleaLeaves{})\n\tsection.RegisterBlock(LightBlueCarpet{})\n\tsection.RegisterBlock(GrayWool{})\n\tsection.RegisterBlock(JungleButton{})\n\tsection.RegisterBlock(NetheriteBlock{})\n\tsection.RegisterBlock(GoldBlock{})\n\tsection.RegisterBlock(MagentaCarpet{})\n\tsection.RegisterBlock(BambooFence{})\n\tsection.RegisterBlock(CoalOre{})\n\tsection.RegisterBlock(CopperDoor{})\n\tsection.RegisterBlock(RedNetherBrickWall{})\n\tsection.RegisterBlock(GraniteSlab{})\n\tsection.RegisterBlock(SpruceSapling{})\n\tsection.RegisterBlock(CherryPressurePlate{})\n\tsection.RegisterBlock(YellowCarpet{})\n\tsection.RegisterBlock(GlassPane{})\n\tsection.RegisterBlock(PolishedDeepslateStairs{})\n\tsection.RegisterBlock(PottedMangrovePropagule{})\n\tsection.RegisterBlock(BambooHangingSign{})\n\tsection.RegisterBlock(Dropper{})\n\tsection.RegisterBlock(EmeraldBlock{})\n\tsection.RegisterBlock(PinkWallBanner{})\n\tsection.RegisterBlock(StrippedAcaciaWood{})\n\tsection.RegisterBlock(AcaciaLog{})\n\tsection.RegisterBlock(BambooMosaic{})\n\tsection.RegisterBlock(OakLeaves{})\n\tsection.RegisterBlock(PinkCarpet{})\n\tsection.RegisterBlock(SandstoneSlab{})\n\tsection.RegisterBlock(CyanBanner{})\n\tsection.RegisterBlock(DeepslateTiles{})\n\tsection.RegisterBlock(DetectorRail{})\n\tsection.RegisterBlock(NetherBrickFence{})\n\tsection.RegisterBlock(PurpleBed{})\n\tsection.RegisterBlock(SoulCampfire{})\n\tsection.RegisterBlock(BirchLeaves{})\n\tsection.RegisterBlock(BrownWallBanner{})\n\tsection.RegisterBlock(CyanStainedGlassPane{})\n\tsection.RegisterBlock(GrayGlazedTerracotta{})\n\tsection.RegisterBlock(StickyPiston{})\n\tsection.RegisterBlock(TallGrass{})\n\tsection.RegisterBlock(AcaciaSlab{})\n\tsection.RegisterBlock(AmethystBlock{})\n\tsection.RegisterBlock(CrimsonRoots{})\n\tsection.RegisterBlock(SmallAmethystBud{})\n\tsection.RegisterBlock(TubeCoralFan{})\n\tsection.RegisterBlock(WhiteConcretePowder{})\n\tsection.RegisterBlock(BlackTerracotta{})\n\tsection.RegisterBlock(WaxedOxidizedCopperBulb{})\n\tsection.RegisterBlock(PetrifiedOakSlab{})\n\tsection.RegisterBlock(PolishedBlackstoneBricks{})\n\tsection.RegisterBlock(PumpkinStem{})\n\tsection.RegisterBlock(YellowShulkerBox{})\n\tsection.RegisterBlock(DecoratedPot{})\n\tsection.RegisterBlock(Kelp{})\n\tsection.RegisterBlock(RedSandstone{})\n\tsection.RegisterBlock(MagentaStainedGlassPane{})\n\tsection.RegisterBlock(PinkShulkerBox{})\n\tsection.RegisterBlock(PottedBirchSapling{})\n\tsection.RegisterBlock(SmoothBasalt{})\n\tsection.RegisterBlock(WaxedCopperBlock{})\n\tsection.RegisterBlock(DiamondBlock{})\n\tsection.RegisterBlock(GrayTerracotta{})\n\tsection.RegisterBlock(LightGrayCarpet{})\n\tsection.RegisterBlock(AzaleaLeaves{})\n\tsection.RegisterBlock(QuartzStairs{})\n\tsection.RegisterBlock(SoulLantern{})\n\tsection.RegisterBlock(MelonStem{})\n\tsection.RegisterBlock(Peony{})\n\tsection.RegisterBlock(CherryLeaves{})\n\tsection.RegisterBlock(Lantern{})\n\tsection.RegisterBlock(Lever{})\n\tsection.RegisterBlock(JackOLantern{})\n\tsection.RegisterBlock(MossyCobblestoneWall{})\n\tsection.RegisterBlock(OrangeWool{})\n\tsection.RegisterBlock(YellowWool{})\n\tsection.RegisterBlock(BlueIce{})\n\tsection.RegisterBlock(GreenTerracotta{})\n\tsection.RegisterBlock(LightBlueStainedGlassPane{})\n\tsection.RegisterBlock(GreenBed{})\n\tsection.RegisterBlock(SculkShrieker{})\n\tsection.RegisterBlock(BrownCarpet{})\n\tsection.RegisterBlock(DarkOakFence{})\n\tsection.RegisterBlock(Gravel{})\n\tsection.RegisterBlock(PolishedTuff{})\n\tsection.RegisterBlock(Sponge{})\n\tsection.RegisterBlock(WaxedOxidizedCopperGrate{})\n\tsection.RegisterBlock(CyanCarpet{})\n\tsection.RegisterBlock(DeepslateTileSlab{})\n\tsection.RegisterBlock(Farmland{})\n\tsection.RegisterBlock(NetherQuartzOre{})\n\tsection.RegisterBlock(TwistingVines{})\n\tsection.RegisterBlock(PrismarineBrickStairs{})\n\tsection.RegisterBlock(Snow{})\n\tsection.RegisterBlock(CrimsonFence{})\n\tsection.RegisterBlock(LightGrayCandleCake{})\n\tsection.RegisterBlock(PottedLilyOfTheValley{})\n\tsection.RegisterBlock(RawCopperBlock{})\n\tsection.RegisterBlock(SpruceWallHangingSign{})\n\tsection.RegisterBlock(AcaciaWallHangingSign{})\n\tsection.RegisterBlock(GreenStainedGlass{})\n\tsection.RegisterBlock(JungleSapling{})\n\tsection.RegisterBlock(AndesiteStairs{})\n\tsection.RegisterBlock(CrackedDeepslateTiles{})\n\tsection.RegisterBlock(DamagedAnvil{})\n\tsection.RegisterBlock(PoweredRail{})\n\tsection.RegisterBlock(CreeperHead{})\n\tsection.RegisterBlock(InfestedStone{})\n\tsection.RegisterBlock(OxidizedCopperGrate{})\n\tsection.RegisterBlock(BubbleColumn{})\n\tsection.RegisterBlock(LightGrayWallBanner{})\n\tsection.RegisterBlock(SculkVein{})\n\tsection.RegisterBlock(PolishedBlackstoneStairs{})\n\tsection.RegisterBlock(CrimsonStem{})\n\tsection.RegisterBlock(EndStoneBrickStairs{})\n\tsection.RegisterBlock(OxidizedCopper{})\n\tsection.RegisterBlock(WaxedWeatheredCutCopper{})\n\tsection.RegisterBlock(BlueTerracotta{})\n\tsection.RegisterBlock(Cobweb{})\n\tsection.RegisterBlock(PolishedGranite{})\n\tsection.RegisterBlock(BirchButton{})\n\tsection.RegisterBlock(CyanCandleCake{})\n\tsection.RegisterBlock(RedstoneBlock{})\n\tsection.RegisterBlock(MudBrickWall{})\n\tsection.RegisterBlock(PinkCandleCake{})\n\tsection.RegisterBlock(TuffBricks{})\n\tsection.RegisterBlock(WallTorch{})\n\tsection.RegisterBlock(Beacon{})\n\tsection.RegisterBlock(MangroveLog{})\n\tsection.RegisterBlock(RedTulip{})\n\tsection.RegisterBlock(WhiteShulkerBox{})\n\tsection.RegisterBlock(BigDripleaf{})\n\tsection.RegisterBlock(BrainCoral{})\n\tsection.RegisterBlock(ChiseledTuff{})\n\tsection.RegisterBlock(RedMushroom{})\n\tsection.RegisterBlock(SmoothStone{})\n\tsection.RegisterBlock(BlackStainedGlass{})\n\tsection.RegisterBlock(Poppy{})\n\tsection.RegisterBlock(PottedOrangeTulip{})\n\tsection.RegisterBlock(Ice{})\n\tsection.RegisterBlock(SprucePlanks{})\n\tsection.RegisterBlock(TuffWall{})\n\tsection.RegisterBlock(CrimsonFenceGate{})\n\tsection.RegisterBlock(EndStoneBrickSlab{})\n\tsection.RegisterBlock(SnowBlock{})\n\tsection.RegisterBlock(PolishedBlackstoneBrickSlab{})\n\tsection.RegisterBlock(TorchflowerCrop{})\n\tsection.RegisterBlock(WhiteCandleCake{})\n\tsection.RegisterBlock(BrownConcrete{})\n\tsection.RegisterBlock(ExposedCopperBulb{})\n\tsection.RegisterBlock(LightBlueBed{})\n\tsection.RegisterBlock(PottedTorchflower{})\n\tsection.RegisterBlock(RedCandle{})\n\tsection.RegisterBlock(BlackConcrete{})\n\tsection.RegisterBlock(Dandelion{})\n\tsection.RegisterBlock(PackedIce{})\n\tsection.RegisterBlock(DeepslateTileStairs{})\n\tsection.RegisterBlock(BrownWool{})\n\tsection.RegisterBlock(Fire{})\n\tsection.RegisterBlock(BirchFenceGate{})\n\tsection.RegisterBlock(PurpurPillar{})\n\tsection.RegisterBlock(SpruceFence{})\n\tsection.RegisterBlock(AmethystCluster{})\n\tsection.RegisterBlock(RepeatingCommandBlock{})\n\tsection.RegisterBlock(Vine{})\n\tsection.RegisterBlock(TallSeagrass{})\n\tsection.RegisterBlock(AcaciaLeaves{})\n\tsection.RegisterBlock(DarkOakWallSign{})\n\tsection.RegisterBlock(MushroomStem{})\n\tsection.RegisterBlock(CarvedPumpkin{})\n\tsection.RegisterBlock(NoteBlock{})\n\tsection.RegisterBlock(Stone{})\n\tsection.RegisterBlock(Chain{})\n\tsection.RegisterBlock(CherryTrapdoor{})\n\tsection.RegisterBlock(ChorusFlower{})\n\tsection.RegisterBlock(Glowstone{})\n\tsection.RegisterBlock(InfestedDeepslate{})\n\tsection.RegisterBlock(RedGlazedTerracotta{})\n\tsection.RegisterBlock(CrackedNetherBricks{})\n\tsection.RegisterBlock(DeadBrainCoralBlock{})\n\tsection.RegisterBlock(Diorite{})\n\tsection.RegisterBlock(CherryStairs{})\n\tsection.RegisterBlock(PolishedDioriteSlab{})\n\tsection.RegisterBlock(TuffBrickStairs{})\n\tsection.RegisterBlock(WaxedExposedCutCopperSlab{})\n\tsection.RegisterBlock(BirchSapling{})\n\tsection.RegisterBlock(BlueCandleCake{})\n\tsection.RegisterBlock(CherrySlab{})\n\tsection.RegisterBlock(CrimsonSign{})\n\tsection.RegisterBlock(PitcherPlant{})\n\tsection.RegisterBlock(RedNetherBrickStairs{})\n\tsection.RegisterBlock(CrackedStoneBricks{})\n\tsection.RegisterBlock(CutSandstoneSlab{})\n\tsection.RegisterBlock(LightBlueConcrete{})\n\tsection.RegisterBlock(PitcherCrop{})\n\tsection.RegisterBlock(LimeCandleCake{})\n\tsection.RegisterBlock(MangroveHangingSign{})\n\tsection.RegisterBlock(WaxedCopperDoor{})\n\tsection.RegisterBlock(DeepslateCoalOre{})\n\tsection.RegisterBlock(Light{})\n\tsection.RegisterBlock(LightGrayCandle{})\n\tsection.RegisterBlock(StoneStairs{})\n\tsection.RegisterBlock(EndRod{})\n\tsection.RegisterBlock(SmallDripleaf{})\n\tsection.RegisterBlock(SpruceButton{})\n\tsection.RegisterBlock(BeeNest{})\n\tsection.RegisterBlock(MagentaBed{})\n\tsection.RegisterBlock(OakPressurePlate{})\n\tsection.RegisterBlock(PiglinHead{})\n\tsection.RegisterBlock(SculkSensor{})\n\tsection.RegisterBlock(AttachedPumpkinStem{})\n\tsection.RegisterBlock(CrimsonPlanks{})\n\tsection.RegisterBlock(Frogspawn{})\n\tsection.RegisterBlock(GrayCandleCake{})\n\tsection.RegisterBlock(MangroveWallHangingSign{})\n\tsection.RegisterBlock(DeepslateBrickStairs{})\n\tsection.RegisterBlock(DeepslateEmeraldOre{})\n\tsection.RegisterBlock(Fern{})\n\tsection.RegisterBlock(WhiteStainedGlassPane{})\n\tsection.RegisterBlock(GrayStainedGlassPane{})\n\tsection.RegisterBlock(RedstoneTorch{})\n\tsection.RegisterBlock(StrippedCherryWood{})\n\tsection.RegisterBlock(CrimsonWallSign{})\n\tsection.RegisterBlock(InfestedMossyStoneBricks{})\n\tsection.RegisterBlock(PolishedBlackstone{})\n\tsection.RegisterBlock(Basalt{})\n\tsection.RegisterBlock(BrainCoralBlock{})\n\tsection.RegisterBlock(CherryButton{})\n\tsection.RegisterBlock(SpruceWood{})\n\tsection.RegisterBlock(StoneSlab{})\n\tsection.RegisterBlock(WarpedWallHangingSign{})\n\tsection.RegisterBlock(DarkOakButton{})\n\tsection.RegisterBlock(PottedWarpedRoots{})\n\tsection.RegisterBlock(QuartzBricks{})\n\tsection.RegisterBlock(PowderSnow{})\n\tsection.RegisterBlock(Cactus{})\n\tsection.RegisterBlock(CobbledDeepslateStairs{})\n\tsection.RegisterBlock(PinkTerracotta{})\n\tsection.RegisterBlock(SprucePressurePlate{})\n\tsection.RegisterBlock(AcaciaTrapdoor{})\n\tsection.RegisterBlock(EndPortalFrame{})\n\tsection.RegisterBlock(OrangeStainedGlassPane{})\n\tsection.RegisterBlock(Smoker{})\n\tsection.RegisterBlock(StrippedBirchLog{})\n\tsection.RegisterBlock(BoneBlock{})\n\tsection.RegisterBlock(BrainCoralWallFan{})\n\tsection.RegisterBlock(Bricks{})\n\tsection.RegisterBlock(OakSlab{})\n\tsection.RegisterBlock(BlueWallBanner{})\n\tsection.RegisterBlock(Chest{})\n\tsection.RegisterBlock(DeadBrainCoralWallFan{})\n\tsection.RegisterBlock(BirchWallHangingSign{})\n\tsection.RegisterBlock(HeavyCore{})\n\tsection.RegisterBlock(StrippedCherryLog{})\n\tsection.RegisterBlock(BrownMushroomBlock{})\n\tsection.RegisterBlock(DeadBubbleCoralBlock{})\n\tsection.RegisterBlock(LargeFern{})\n\tsection.RegisterBlock(RedSandstoneWall{})\n\tsection.RegisterBlock(Spawner{})\n\tsection.RegisterBlock(GrayCandle{})\n\tsection.RegisterBlock(JungleWood{})\n\tsection.RegisterBlock(OrangeConcretePowder{})\n\tsection.RegisterBlock(OrangeTulip{})\n\tsection.RegisterBlock(SpruceTrapdoor{})\n\tsection.RegisterBlock(Barrel{})\n\tsection.RegisterBlock(LightBlueShulkerBox{})\n\tsection.RegisterBlock(Lodestone{})\n\tsection.RegisterBlock(MagentaWool{})\n\tsection.RegisterBlock(OrangeCandleCake{})\n\tsection.RegisterBlock(ShulkerBox{})\n\tsection.RegisterBlock(SmoothSandstone{})\n\tsection.RegisterBlock(SoulWallTorch{})\n\tsection.RegisterBlock(BubbleCoralFan{})\n\tsection.RegisterBlock(ChainCommandBlock{})\n\tsection.RegisterBlock(HornCoralWallFan{})\n\tsection.RegisterBlock(Calcite{})\n\tsection.RegisterBlock(AcaciaWood{})\n\tsection.RegisterBlock(DeadBubbleCoralWallFan{})\n\tsection.RegisterBlock(Scaffolding{})\n\tsection.RegisterBlock(WarpedFence{})\n\tsection.RegisterBlock(JungleLeaves{})\n\tsection.RegisterBlock(LightWeightedPressurePlate{})\n\tsection.RegisterBlock(StrippedDarkOakWood{})\n\tsection.RegisterBlock(InfestedCrackedStoneBricks{})\n\tsection.RegisterBlock(PottedAcaciaSapling{})\n\tsection.RegisterBlock(RedstoneWire{})\n\tsection.RegisterBlock(WaxedExposedCopper{})\n\tsection.RegisterBlock(BambooTrapdoor{})\n\tsection.RegisterBlock(FireCoralFan{})\n\tsection.RegisterBlock(GrayStainedGlass{})\n\tsection.RegisterBlock(BirchWood{})\n\tsection.RegisterBlock(GreenStainedGlassPane{})\n\tsection.RegisterBlock(TrialSpawner{})\n\tsection.RegisterBlock(GreenCandleCake{})\n\tsection.RegisterBlock(OxidizedCutCopperStairs{})\n\tsection.RegisterBlock(PolishedDioriteStairs{})\n\tsection.RegisterBlock(OrangeCarpet{})\n\tsection.RegisterBlock(TrappedChest{})\n\tsection.RegisterBlock(WhiteWool{})\n\tsection.RegisterBlock(BlackGlazedTerracotta{})\n\tsection.RegisterBlock(ChiseledTuffBricks{})\n\tsection.RegisterBlock(NetherBrickWall{})\n\tsection.RegisterBlock(Obsidian{})\n\tsection.RegisterBlock(ZombieHead{})\n\tsection.RegisterBlock(BambooWallHangingSign{})\n\tsection.RegisterBlock(GrayBed{})\n\tsection.RegisterBlock(MossCarpet{})\n\tsection.RegisterBlock(WeepingVines{})\n\tsection.RegisterBlock(CobblestoneSlab{})\n\tsection.RegisterBlock(RedConcretePowder{})\n\tsection.RegisterBlock(WaxedWeatheredChiseledCopper{})\n\tsection.RegisterBlock(CutCopperSlab{})\n\tsection.RegisterBlock(DripstoneBlock{})\n\tsection.RegisterBlock(LightGrayGlazedTerracotta{})\n\tsection.RegisterBlock(OakHangingSign{})\n\tsection.RegisterBlock(CrimsonWallHangingSign{})\n\tsection.RegisterBlock(DarkOakLog{})\n\tsection.RegisterBlock(DarkOakWood{})\n\tsection.RegisterBlock(RootedDirt{})\n\tsection.RegisterBlock(WitherSkeletonWallSkull{})\n\tsection.RegisterBlock(BambooDoor{})\n\tsection.RegisterBlock(HornCoralFan{})\n\tsection.RegisterBlock(MagmaBlock{})\n\tsection.RegisterBlock(LightBlueTerracotta{})\n\tsection.RegisterBlock(LightGrayBanner{})\n\tsection.RegisterBlock(Netherrack{})\n\tsection.RegisterBlock(AndesiteSlab{})\n\tsection.RegisterBlock(BrownShulkerBox{})\n\tsection.RegisterBlock(DeepslateTileWall{})\n\tsection.RegisterBlock(BrickSlab{})\n\tsection.RegisterBlock(Conduit{})\n\tsection.RegisterBlock(FireCoralBlock{})\n\tsection.RegisterBlock(InfestedStoneBricks{})\n\tsection.RegisterBlock(BrickWall{})\n\tsection.RegisterBlock(GraniteWall{})\n\tsection.RegisterBlock(PottedBamboo{})\n\tsection.RegisterBlock(DeadHornCoral{})\n\tsection.RegisterBlock(QuartzPillar{})\n\tsection.RegisterBlock(WetSponge{})\n\tsection.RegisterBlock(BlackBed{})\n\tsection.RegisterBlock(BlackConcretePowder{})\n\tsection.RegisterBlock(CherryFenceGate{})\n\tsection.RegisterBlock(DarkOakFenceGate{})\n\tsection.RegisterBlock(SmoothRedSandstone{})\n\tsection.RegisterBlock(Stonecutter{})\n\tsection.RegisterBlock(TurtleEgg{})\n\tsection.RegisterBlock(DeadHornCoralFan{})\n\tsection.RegisterBlock(DeepslateGoldOre{})\n\tsection.RegisterBlock(MossyCobblestone{})\n\tsection.RegisterBlock(PolishedGraniteSlab{})\n\tsection.RegisterBlock(AcaciaSign{})\n\tsection.RegisterBlock(BrownMushroom{})\n\tsection.RegisterBlock(Grindstone{})\n\tsection.RegisterBlock(WhiteBanner{})\n\tsection.RegisterBlock(PinkGlazedTerracotta{})\n\tsection.RegisterBlock(Tnt{})\n\tsection.RegisterBlock(WarpedNylium{})\n\tsection.RegisterBlock(RedstoneOre{})\n\tsection.RegisterBlock(BlackCarpet{})\n\tsection.RegisterBlock(OakPlanks{})\n\tsection.RegisterBlock(RedConcrete{})\n\tsection.RegisterBlock(PrismarineSlab{})\n\tsection.RegisterBlock(BambooWallSign{})\n\tsection.RegisterBlock(DarkOakDoor{})\n\tsection.RegisterBlock(DeepslateDiamondOre{})\n\tsection.RegisterBlock(HornCoralBlock{})\n\tsection.RegisterBlock(RedNetherBricks{})\n\tsection.RegisterBlock(YellowWallBanner{})\n\tsection.RegisterBlock(LightBlueCandle{})\n\tsection.RegisterBlock(OxidizedCopperBulb{})\n\tsection.RegisterBlock(RawGoldBlock{})\n\tsection.RegisterBlock(WhiteStainedGlass{})\n\tsection.RegisterBlock(BrownBanner{})\n\tsection.RegisterBlock(CrimsonHangingSign{})\n\tsection.RegisterBlock(HoneyBlock{})\n\tsection.RegisterBlock(PrismarineBrickSlab{})\n\tsection.RegisterBlock(TubeCoral{})\n\tsection.RegisterBlock(WaxedWeatheredCutCopperStairs{})\n\tsection.RegisterBlock(Bamboo{})\n\tsection.RegisterBlock(MangrovePropagule{})\n\tsection.RegisterBlock(PottedJungleSapling{})\n\tsection.RegisterBlock(OxidizedCutCopper{})\n\tsection.RegisterBlock(RoseBush{})\n\tsection.RegisterBlock(WaxedWeatheredCopperGrate{})\n\tsection.RegisterBlock(RedSandstoneStairs{})\n\tsection.RegisterBlock(WarpedFungus{})\n\tsection.RegisterBlock(WaxedWeatheredCopper{})\n\tsection.RegisterBlock(AcaciaFence{})\n\tsection.RegisterBlock(MagentaTerracotta{})\n\tsection.RegisterBlock(PlayerHead{})\n\tsection.RegisterBlock(Dispenser{})\n\tsection.RegisterBlock(PottedDandelion{})\n\tsection.RegisterBlock(WeatheredCutCopper{})\n\tsection.RegisterBlock(AcaciaHangingSign{})\n\tsection.RegisterBlock(CherryFence{})\n\tsection.RegisterBlock(CrimsonPressurePlate{})\n\tsection.RegisterBlock(NetherBrickSlab{})\n\tsection.RegisterBlock(SpruceWallSign{})\n\tsection.RegisterBlock(WitherRose{})\n\tsection.RegisterBlock(BirchDoor{})\n\tsection.RegisterBlock(BlackCandle{})\n\tsection.RegisterBlock(CartographyTable{})\n\tsection.RegisterBlock(OakWood{})\n\tsection.RegisterBlock(TuffStairs{})\n\tsection.RegisterBlock(WeatheredCopperTrapdoor{})\n\tsection.RegisterBlock(PiglinWallHead{})\n\tsection.RegisterBlock(PurpleWool{})\n\tsection.RegisterBlock(StoneButton{})\n\tsection.RegisterBlock(WaxedOxidizedCutCopperStairs{})\n\tsection.RegisterBlock(AzureBluet{})\n\tsection.RegisterBlock(BlueConcretePowder{})\n\tsection.RegisterBlock(DeadFireCoralWallFan{})\n\tsection.RegisterBlock(SkeletonSkull{})\n\tsection.RegisterBlock(DarkOakLeaves{})\n\tsection.RegisterBlock(JungleHangingSign{})\n\tsection.RegisterBlock(MangroveSlab{})\n\tsection.RegisterBlock(CaveVines{})\n\tsection.RegisterBlock(Cocoa{})\n\tsection.RegisterBlock(JungleSign{})\n\tsection.RegisterBlock(Vault{})\n\tsection.RegisterBlock(WaxedChiseledCopper{})\n\tsection.RegisterBlock(BlackStainedGlassPane{})\n\tsection.RegisterBlock(FlowerPot{})\n\tsection.RegisterBlock(MangroveFence{})\n\tsection.RegisterBlock(WaxedCutCopperStairs{})\n\tsection.RegisterBlock(YellowBed{})\n\tsection.RegisterBlock(CyanCandle{})\n\tsection.RegisterBlock(GreenConcretePowder{})\n\tsection.RegisterBlock(PrismarineBricks{})\n\tsection.RegisterBlock(DarkOakPlanks{})\n\tsection.RegisterBlock(DeadFireCoral{})\n\tsection.RegisterBlock(Dirt{})\n\tsection.RegisterBlock(DragonEgg{})\n\tsection.RegisterBlock(FireCoralWallFan{})\n\tsection.RegisterBlock(Beehive{})\n\tsection.RegisterBlock(BrownCandleCake{})\n\tsection.RegisterBlock(Clay{})\n\tsection.RegisterBlock(MagentaCandleCake{})\n\tsection.RegisterBlock(OrangeWallBanner{})\n\tsection.RegisterBlock(LightningRod{})\n\tsection.RegisterBlock(MossyStoneBricks{})\n\tsection.RegisterBlock(OrangeTerracotta{})\n\tsection.RegisterBlock(PurpleConcrete{})\n\tsection.RegisterBlock(StrippedAcaciaLog{})\n\tsection.RegisterBlock(AndesiteWall{})\n\tsection.RegisterBlock(BlueGlazedTerracotta{})\n\tsection.RegisterBlock(CherryWallSign{})\n\tsection.RegisterBlock(ZombieWallHead{})\n\tsection.RegisterBlock(HornCoral{})\n\tsection.RegisterBlock(AcaciaPlanks{})\n\tsection.RegisterBlock(DaylightDetector{})\n\tsection.RegisterBlock(WaxedOxidizedCopper{})\n\tsection.RegisterBlock(RedstoneWallTorch{})\n\tsection.RegisterBlock(SmoothQuartz{})\n\tsection.RegisterBlock(EmeraldOre{})\n\tsection.RegisterBlock(HayBlock{})\n\tsection.RegisterBlock(OxidizedCopperDoor{})\n\tsection.RegisterBlock(MangroveWallSign{})\n\tsection.RegisterBlock(PearlescentFroglight{})\n\tsection.RegisterBlock(HangingRoots{})\n\tsection.RegisterBlock(InfestedCobblestone{})\n\tsection.RegisterBlock(Jigsaw{})\n\tsection.RegisterBlock(WarpedTrapdoor{})\n\tsection.RegisterBlock(ChiseledNetherBricks{})\n\tsection.RegisterBlock(HeavyWeightedPressurePlate{})\n\tsection.RegisterBlock(StrippedSpruceLog{})\n\tsection.RegisterBlock(RedBanner{})\n\tsection.RegisterBlock(StructureVoid{})\n\tsection.RegisterBlock(NetherBricks{})\n\tsection.RegisterBlock(PottedDarkOakSapling{})\n\tsection.RegisterBlock(PurpleStainedGlassPane{})\n\tsection.RegisterBlock(SmoothSandstoneSlab{})\n\tsection.RegisterBlock(FrostedIce{})\n\tsection.RegisterBlock(PolishedAndesiteStairs{})\n\tsection.RegisterBlock(PottedWitherRose{})\n\tsection.RegisterBlock(YellowBanner{})\n\tsection.RegisterBlock(YellowTerracotta{})\n\tsection.RegisterBlock(CopperBulb{})\n\tsection.RegisterBlock(DeadTubeCoralFan{})\n\tsection.RegisterBlock(OrangeCandle{})\n\tsection.RegisterBlock(CherryLog{})\n\tsection.RegisterBlock(MangroveDoor{})\n\tsection.RegisterBlock(DriedKelpBlock{})\n\tsection.RegisterBlock(StrippedJungleLog{})\n\tsection.RegisterBlock(MangroveStairs{})\n\tsection.RegisterBlock(OakButton{})\n\tsection.RegisterBlock(OakWallHangingSign{})\n\tsection.RegisterBlock(Repeater{})\n\tsection.RegisterBlock(BlackstoneStairs{})\n\tsection.RegisterBlock(CaveVinesPlant{})\n\tsection.RegisterBlock(NetherGoldOre{})\n\tsection.RegisterBlock(DarkOakHangingSign{})\n\tsection.RegisterBlock(Lava{})\n\tsection.RegisterBlock(LightGrayStainedGlass{})\n\tsection.RegisterBlock(Water{})\n\tsection.RegisterBlock(BambooBlock{})\n\tsection.RegisterBlock(BirchStairs{})\n\tsection.RegisterBlock(BlueStainedGlassPane{})\n\tsection.RegisterBlock(RedWallBanner{})\n\tsection.RegisterBlock(BlueBed{})\n\tsection.RegisterBlock(EndPortal{})\n\tsection.RegisterBlock(NetherSprouts{})\n\tsection.RegisterBlock(RedNetherBrickSlab{})\n\tsection.RegisterBlock(WaxedOxidizedChiseledCopper{})\n\tsection.RegisterBlock(DeadHornCoralWallFan{})\n\tsection.RegisterBlock(DeepslateCopperOre{})\n\tsection.RegisterBlock(JungleWallHangingSign{})\n\tsection.RegisterBlock(TuffBrickSlab{})\n\tsection.RegisterBlock(Bell{})\n\tsection.RegisterBlock(MediumAmethystBud{})\n\tsection.RegisterBlock(OakFenceGate{})\n\tsection.RegisterBlock(SpruceDoor{})\n\tsection.RegisterBlock(StrippedWarpedStem{})\n\tsection.RegisterBlock(WaxedExposedCopperDoor{})\n\tsection.RegisterBlock(Barrier{})\n\tsection.RegisterBlock(DeepslateBricks{})\n\tsection.RegisterBlock(ExposedChiseledCopper{})\n\tsection.RegisterBlock(WhiteBed{})\n\tsection.RegisterBlock(CherryHangingSign{})\n\tsection.RegisterBlock(StrippedSpruceWood{})\n\tsection.RegisterBlock(WaxedWeatheredCopperBulb{})\n\tsection.RegisterBlock(LimeCandle{})\n\tsection.RegisterBlock(MossyCobblestoneStairs{})\n\tsection.RegisterBlock(OxidizedCutCopperSlab{})\n\tsection.RegisterBlock(Sculk{})\n\tsection.RegisterBlock(BrownGlazedTerracotta{})\n\tsection.RegisterBlock(BuddingAmethyst{})\n\tsection.RegisterBlock(LavaCauldron{})\n\tsection.RegisterBlock(SeaLantern{})\n\tsection.RegisterBlock(BlackstoneWall{})\n\tsection.RegisterBlock(Campfire{})\n\tsection.RegisterBlock(LimeTerracotta{})\n\tsection.RegisterBlock(Jukebox{})\n\tsection.RegisterBlock(TuffSlab{})\n\tsection.RegisterBlock(MagentaGlazedTerracotta{})\n\tsection.RegisterBlock(RedBed{})\n\tsection.RegisterBlock(BlackstoneSlab{})\n\tsection.RegisterBlock(ChiseledCopper{})\n\tsection.RegisterBlock(Ladder{})\n\tsection.RegisterBlock(WarpedSign{})\n\tsection.RegisterBlock(BlueBanner{})\n\tsection.RegisterBlock(LightGrayTerracotta{})\n\tsection.RegisterBlock(NetherWart{})\n\tsection.RegisterBlock(PinkBanner{})\n\tsection.RegisterBlock(PinkCandle{})\n\tsection.RegisterBlock(PolishedBlackstoneButton{})\n\tsection.RegisterBlock(PrismarineStairs{})\n\tsection.RegisterBlock(BubbleCoral{})\n\tsection.RegisterBlock(CrimsonSlab{})\n\tsection.RegisterBlock(OakSign{})\n\tsection.RegisterBlock(LimeShulkerBox{})\n\tsection.RegisterBlock(BrownTerracotta{})\n\tsection.RegisterBlock(CrimsonStairs{})\n\tsection.RegisterBlock(GrayBanner{})\n\tsection.RegisterBlock(CoalBlock{})\n\tsection.RegisterBlock(CrimsonButton{})\n\tsection.RegisterBlock(StrippedMangroveLog{})\n\tsection.RegisterBlock(CherryDoor{})\n\tsection.RegisterBlock(PottedRedTulip{})\n\tsection.RegisterBlock(WarpedRoots{})\n\tsection.RegisterBlock(CrimsonDoor{})\n\tsection.RegisterBlock(JunglePlanks{})\n\tsection.RegisterBlock(CryingObsidian{})\n\tsection.RegisterBlock(SmoothRedSandstoneSlab{})\n\tsection.RegisterBlock(YellowStainedGlassPane{})\n\tsection.RegisterBlock(BambooStairs{})\n\tsection.RegisterBlock(BirchTrapdoor{})\n\tsection.RegisterBlock(Tripwire{})\n\tsection.RegisterBlock(Granite{})\n\tsection.RegisterBlock(LimeConcretePowder{})\n\tsection.RegisterBlock(PolishedBlackstoneWall{})\n\tsection.RegisterBlock(RedShulkerBox{})\n\tsection.RegisterBlock(WaxedExposedCopperBulb{})\n\tsection.RegisterBlock(WhiteTulip{})\n\tsection.RegisterBlock(BirchWallSign{})\n\tsection.RegisterBlock(CutRedSandstoneSlab{})\n\tsection.RegisterBlock(LightBlueCandleCake{})\n\tsection.RegisterBlock(PottedAllium{})\n\tsection.RegisterBlock(PottedBlueOrchid{})\n\tsection.RegisterBlock(OrangeGlazedTerracotta{})\n\tsection.RegisterBlock(PolishedTuffWall{})\n\tsection.RegisterBlock(CopperBlock{})\n\tsection.RegisterBlock(DarkOakTrapdoor{})\n\tsection.RegisterBlock(MudBrickSlab{})\n\n}\n"
  },
  {
    "path": "server/world/block/acaciaButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaButton struct {\r\n\tFacing string\r\n\tPowered bool\r\n\tFace string\r\n}\r\n\r\nfunc (b AcaciaButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_button\", BlockProperties{\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaButton) New(props BlockProperties) Block {\r\n\treturn AcaciaButton{\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaDoor struct {\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n}\r\n\r\nfunc (b AcaciaDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_door\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaDoor) New(props BlockProperties) Block {\r\n\treturn AcaciaDoor{\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaFence struct {\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n}\r\n\r\nfunc (b AcaciaFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_fence\", BlockProperties{\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaFence) New(props BlockProperties) Block {\r\n\treturn AcaciaFence{\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaFenceGate struct {\r\n\tInWall bool\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b AcaciaFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_fence_gate\", BlockProperties{\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaFenceGate) New(props BlockProperties) Block {\r\n\treturn AcaciaFenceGate{\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaHangingSign struct {\r\n\tAttached bool\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b AcaciaHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_hanging_sign\", BlockProperties{\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaHangingSign) New(props BlockProperties) Block {\r\n\treturn AcaciaHangingSign{\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaLeaves.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaLeaves struct {\r\n\tWaterlogged bool\r\n\tDistance int\r\n\tPersistent bool\r\n}\r\n\r\nfunc (b AcaciaLeaves) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_leaves\", BlockProperties{\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t\t\"persistent\": strconv.FormatBool(b.Persistent),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaLeaves) New(props BlockProperties) Block {\r\n\treturn AcaciaLeaves{\r\n\t\tPersistent: props[\"persistent\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaLog.go",
    "content": "package block\r\n\r\ntype AcaciaLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b AcaciaLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaLog) New(props BlockProperties) Block {\r\n\treturn AcaciaLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaPlanks.go",
    "content": "package block\r\n\r\ntype AcaciaPlanks struct {\r\n}\r\n\r\nfunc (b AcaciaPlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b AcaciaPlanks) New(props BlockProperties) Block {\r\n\treturn AcaciaPlanks{}\r\n}"
  },
  {
    "path": "server/world/block/acaciaPressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaPressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b AcaciaPressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaPressurePlate) New(props BlockProperties) Block {\r\n\treturn AcaciaPressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaSapling.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaSapling struct {\r\n\tStage int\r\n}\r\n\r\nfunc (b AcaciaSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_sapling\", BlockProperties{\r\n\t\t\"stage\": strconv.Itoa(b.Stage),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaSapling) New(props BlockProperties) Block {\r\n\treturn AcaciaSapling{\r\n\t\tStage: atoi(props[\"stage\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaSign struct {\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b AcaciaSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_sign\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaSign) New(props BlockProperties) Block {\r\n\treturn AcaciaSign{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b AcaciaSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaSlab) New(props BlockProperties) Block {\r\n\treturn AcaciaSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b AcaciaStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaStairs) New(props BlockProperties) Block {\r\n\treturn AcaciaStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaTrapdoor struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b AcaciaTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_trapdoor\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaTrapdoor) New(props BlockProperties) Block {\r\n\treturn AcaciaTrapdoor{\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaWallHangingSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b AcaciaWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_wall_hanging_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaWallHangingSign) New(props BlockProperties) Block {\r\n\treturn AcaciaWallHangingSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AcaciaWallSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b AcaciaWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_wall_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaWallSign) New(props BlockProperties) Block {\r\n\treturn AcaciaWallSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/acaciaWood.go",
    "content": "package block\r\n\r\ntype AcaciaWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b AcaciaWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:acacia_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b AcaciaWood) New(props BlockProperties) Block {\r\n\treturn AcaciaWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/activatorRail.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ActivatorRail struct {\r\n\tPowered bool\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b ActivatorRail) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:activator_rail\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b ActivatorRail) New(props BlockProperties) Block {\r\n\treturn ActivatorRail{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/air.go",
    "content": "package block\r\n\r\ntype Air struct {\r\n}\r\n\r\nfunc (b Air) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:air\", BlockProperties{}\r\n}\r\n\r\nfunc (b Air) New(props BlockProperties) Block {\r\n\treturn Air{}\r\n}"
  },
  {
    "path": "server/world/block/allium.go",
    "content": "package block\r\n\r\ntype Allium struct {\r\n}\r\n\r\nfunc (b Allium) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:allium\", BlockProperties{}\r\n}\r\n\r\nfunc (b Allium) New(props BlockProperties) Block {\r\n\treturn Allium{}\r\n}"
  },
  {
    "path": "server/world/block/amethystBlock.go",
    "content": "package block\r\n\r\ntype AmethystBlock struct {\r\n}\r\n\r\nfunc (b AmethystBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:amethyst_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b AmethystBlock) New(props BlockProperties) Block {\r\n\treturn AmethystBlock{}\r\n}"
  },
  {
    "path": "server/world/block/amethystCluster.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AmethystCluster struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b AmethystCluster) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:amethyst_cluster\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b AmethystCluster) New(props BlockProperties) Block {\r\n\treturn AmethystCluster{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/ancientDebris.go",
    "content": "package block\r\n\r\ntype AncientDebris struct {\r\n}\r\n\r\nfunc (b AncientDebris) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:ancient_debris\", BlockProperties{}\r\n}\r\n\r\nfunc (b AncientDebris) New(props BlockProperties) Block {\r\n\treturn AncientDebris{}\r\n}"
  },
  {
    "path": "server/world/block/andesite.go",
    "content": "package block\r\n\r\ntype Andesite struct {\r\n}\r\n\r\nfunc (b Andesite) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:andesite\", BlockProperties{}\r\n}\r\n\r\nfunc (b Andesite) New(props BlockProperties) Block {\r\n\treturn Andesite{}\r\n}"
  },
  {
    "path": "server/world/block/andesiteSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AndesiteSlab struct {\r\n\tWaterlogged bool\r\n\tType string\r\n}\r\n\r\nfunc (b AndesiteSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:andesite_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b AndesiteSlab) New(props BlockProperties) Block {\r\n\treturn AndesiteSlab{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/andesiteStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AndesiteStairs struct {\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n}\r\n\r\nfunc (b AndesiteStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:andesite_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b AndesiteStairs) New(props BlockProperties) Block {\r\n\treturn AndesiteStairs{\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/andesiteWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AndesiteWall struct {\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n}\r\n\r\nfunc (b AndesiteWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:andesite_wall\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t}\r\n}\r\n\r\nfunc (b AndesiteWall) New(props BlockProperties) Block {\r\n\treturn AndesiteWall{\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/anvil.go",
    "content": "package block\r\n\r\ntype Anvil struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b Anvil) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:anvil\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Anvil) New(props BlockProperties) Block {\r\n\treturn Anvil{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/attachedMelonStem.go",
    "content": "package block\r\n\r\ntype AttachedMelonStem struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b AttachedMelonStem) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:attached_melon_stem\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b AttachedMelonStem) New(props BlockProperties) Block {\r\n\treturn AttachedMelonStem{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/attachedPumpkinStem.go",
    "content": "package block\r\n\r\ntype AttachedPumpkinStem struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b AttachedPumpkinStem) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:attached_pumpkin_stem\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b AttachedPumpkinStem) New(props BlockProperties) Block {\r\n\treturn AttachedPumpkinStem{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/azalea.go",
    "content": "package block\r\n\r\ntype Azalea struct {\r\n}\r\n\r\nfunc (b Azalea) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:azalea\", BlockProperties{}\r\n}\r\n\r\nfunc (b Azalea) New(props BlockProperties) Block {\r\n\treturn Azalea{}\r\n}"
  },
  {
    "path": "server/world/block/azaleaLeaves.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype AzaleaLeaves struct {\r\n\tPersistent bool\r\n\tWaterlogged bool\r\n\tDistance int\r\n}\r\n\r\nfunc (b AzaleaLeaves) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:azalea_leaves\", BlockProperties{\r\n\t\t\"persistent\": strconv.FormatBool(b.Persistent),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t}\r\n}\r\n\r\nfunc (b AzaleaLeaves) New(props BlockProperties) Block {\r\n\treturn AzaleaLeaves{\r\n\t\tPersistent: props[\"persistent\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/azureBluet.go",
    "content": "package block\r\n\r\ntype AzureBluet struct {\r\n}\r\n\r\nfunc (b AzureBluet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:azure_bluet\", BlockProperties{}\r\n}\r\n\r\nfunc (b AzureBluet) New(props BlockProperties) Block {\r\n\treturn AzureBluet{}\r\n}"
  },
  {
    "path": "server/world/block/bamboo.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Bamboo struct {\r\n\tAge int\r\n\tLeaves string\r\n\tStage int\r\n}\r\n\r\nfunc (b Bamboo) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo\", BlockProperties{\r\n\t\t\"stage\": strconv.Itoa(b.Stage),\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t\t\"leaves\": b.Leaves,\r\n\t}\r\n}\r\n\r\nfunc (b Bamboo) New(props BlockProperties) Block {\r\n\treturn Bamboo{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t\tLeaves: props[\"leaves\"],\r\n\t\tStage: atoi(props[\"stage\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooBlock.go",
    "content": "package block\r\n\r\ntype BambooBlock struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b BambooBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_block\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b BambooBlock) New(props BlockProperties) Block {\r\n\treturn BambooBlock{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooButton struct {\r\n\tFace string\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b BambooButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_button\", BlockProperties{\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b BambooButton) New(props BlockProperties) Block {\r\n\treturn BambooButton{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFace: props[\"face\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooDoor struct {\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n}\r\n\r\nfunc (b BambooDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_door\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BambooDoor) New(props BlockProperties) Block {\r\n\treturn BambooDoor{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooFence struct {\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n}\r\n\r\nfunc (b BambooFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_fence\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t}\r\n}\r\n\r\nfunc (b BambooFence) New(props BlockProperties) Block {\r\n\treturn BambooFence{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooFenceGate struct {\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n\tInWall bool\r\n}\r\n\r\nfunc (b BambooFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_fence_gate\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b BambooFenceGate) New(props BlockProperties) Block {\r\n\treturn BambooFenceGate{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooHangingSign struct {\r\n\tAttached bool\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BambooHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_hanging_sign\", BlockProperties{\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BambooHangingSign) New(props BlockProperties) Block {\r\n\treturn BambooHangingSign{\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooMosaic.go",
    "content": "package block\r\n\r\ntype BambooMosaic struct {\r\n}\r\n\r\nfunc (b BambooMosaic) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_mosaic\", BlockProperties{}\r\n}\r\n\r\nfunc (b BambooMosaic) New(props BlockProperties) Block {\r\n\treturn BambooMosaic{}\r\n}"
  },
  {
    "path": "server/world/block/bambooMosaicSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooMosaicSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BambooMosaicSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_mosaic_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BambooMosaicSlab) New(props BlockProperties) Block {\r\n\treturn BambooMosaicSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooMosaicStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooMosaicStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b BambooMosaicStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_mosaic_stairs\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BambooMosaicStairs) New(props BlockProperties) Block {\r\n\treturn BambooMosaicStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooPlanks.go",
    "content": "package block\r\n\r\ntype BambooPlanks struct {\r\n}\r\n\r\nfunc (b BambooPlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b BambooPlanks) New(props BlockProperties) Block {\r\n\treturn BambooPlanks{}\r\n}"
  },
  {
    "path": "server/world/block/bambooPressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooPressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b BambooPressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b BambooPressurePlate) New(props BlockProperties) Block {\r\n\treturn BambooPressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooSapling.go",
    "content": "package block\r\n\r\ntype BambooSapling struct {\r\n}\r\n\r\nfunc (b BambooSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_sapling\", BlockProperties{}\r\n}\r\n\r\nfunc (b BambooSapling) New(props BlockProperties) Block {\r\n\treturn BambooSapling{}\r\n}"
  },
  {
    "path": "server/world/block/bambooSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooSign struct {\r\n\tWaterlogged bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b BambooSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_sign\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BambooSign) New(props BlockProperties) Block {\r\n\treturn BambooSign{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BambooSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BambooSlab) New(props BlockProperties) Block {\r\n\treturn BambooSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b BambooStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_stairs\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t}\r\n}\r\n\r\nfunc (b BambooStairs) New(props BlockProperties) Block {\r\n\treturn BambooStairs{\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooTrapdoor struct {\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BambooTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_trapdoor\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BambooTrapdoor) New(props BlockProperties) Block {\r\n\treturn BambooTrapdoor{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooWallHangingSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BambooWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_wall_hanging_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BambooWallHangingSign) New(props BlockProperties) Block {\r\n\treturn BambooWallHangingSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bambooWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BambooWallSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BambooWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bamboo_wall_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BambooWallSign) New(props BlockProperties) Block {\r\n\treturn BambooWallSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/barrel.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Barrel struct {\r\n\tFacing string\r\n\tOpen bool\r\n}\r\n\r\nfunc (b Barrel) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:barrel\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t}\r\n}\r\n\r\nfunc (b Barrel) New(props BlockProperties) Block {\r\n\treturn Barrel{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b Barrel) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:barrel\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/barrier.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Barrier struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b Barrier) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:barrier\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b Barrier) New(props BlockProperties) Block {\r\n\treturn Barrier{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/basalt.go",
    "content": "package block\r\n\r\ntype Basalt struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b Basalt) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:basalt\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b Basalt) New(props BlockProperties) Block {\r\n\treturn Basalt{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/beacon.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Beacon struct {\r\n}\r\n\r\nfunc (b Beacon) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:beacon\", BlockProperties{}\r\n}\r\n\r\nfunc (b Beacon) New(props BlockProperties) Block {\r\n\treturn Beacon{}\r\n}\r\n\r\nfunc (b Beacon) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:beacon\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bedrock.go",
    "content": "package block\r\n\r\ntype Bedrock struct {\r\n}\r\n\r\nfunc (b Bedrock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bedrock\", BlockProperties{}\r\n}\r\n\r\nfunc (b Bedrock) New(props BlockProperties) Block {\r\n\treturn Bedrock{}\r\n}"
  },
  {
    "path": "server/world/block/beeNest.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BeeNest struct {\r\n\tFacing string\r\n\tHoneyLevel int\r\n}\r\n\r\nfunc (b BeeNest) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bee_nest\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"honey_level\": strconv.Itoa(b.HoneyLevel),\r\n\t}\r\n}\r\n\r\nfunc (b BeeNest) New(props BlockProperties) Block {\r\n\treturn BeeNest{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHoneyLevel: atoi(props[\"honey_level\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/beehive.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Beehive struct {\r\n\tFacing string\r\n\tHoneyLevel int\r\n}\r\n\r\nfunc (b Beehive) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:beehive\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"honey_level\": strconv.Itoa(b.HoneyLevel),\r\n\t}\r\n}\r\n\r\nfunc (b Beehive) New(props BlockProperties) Block {\r\n\treturn Beehive{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHoneyLevel: atoi(props[\"honey_level\"]),\r\n\t}\r\n}\r\n\r\nfunc (b Beehive) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:beehive\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/beetroots.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Beetroots struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b Beetroots) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:beetroots\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b Beetroots) New(props BlockProperties) Block {\r\n\treturn Beetroots{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bell.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Bell struct {\r\n\tFacing string\r\n\tPowered bool\r\n\tAttachment string\r\n}\r\n\r\nfunc (b Bell) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bell\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"attachment\": b.Attachment,\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Bell) New(props BlockProperties) Block {\r\n\treturn Bell{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tAttachment: props[\"attachment\"],\r\n\t}\r\n}\r\n\r\nfunc (b Bell) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:bell\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bigDripleaf.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BigDripleaf struct {\r\n\tTilt string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b BigDripleaf) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:big_dripleaf\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"tilt\": b.Tilt,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BigDripleaf) New(props BlockProperties) Block {\r\n\treturn BigDripleaf{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tTilt: props[\"tilt\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bigDripleafStem.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BigDripleafStem struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BigDripleafStem) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:big_dripleaf_stem\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BigDripleafStem) New(props BlockProperties) Block {\r\n\treturn BigDripleafStem{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchButton struct {\r\n\tFace string\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b BirchButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_button\", BlockProperties{\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b BirchButton) New(props BlockProperties) Block {\r\n\treturn BirchButton{\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchDoor struct {\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b BirchDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_door\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t}\r\n}\r\n\r\nfunc (b BirchDoor) New(props BlockProperties) Block {\r\n\treturn BirchDoor{\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchFence struct {\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BirchFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_fence\", BlockProperties{\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t}\r\n}\r\n\r\nfunc (b BirchFence) New(props BlockProperties) Block {\r\n\treturn BirchFence{\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchFenceGate struct {\r\n\tFacing string\r\n\tInWall bool\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b BirchFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_fence_gate\", BlockProperties{\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t}\r\n}\r\n\r\nfunc (b BirchFenceGate) New(props BlockProperties) Block {\r\n\treturn BirchFenceGate{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchHangingSign struct {\r\n\tWaterlogged bool\r\n\tAttached bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b BirchHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_hanging_sign\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b BirchHangingSign) New(props BlockProperties) Block {\r\n\treturn BirchHangingSign{\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchLeaves.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchLeaves struct {\r\n\tPersistent bool\r\n\tWaterlogged bool\r\n\tDistance int\r\n}\r\n\r\nfunc (b BirchLeaves) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_leaves\", BlockProperties{\r\n\t\t\"persistent\": strconv.FormatBool(b.Persistent),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t}\r\n}\r\n\r\nfunc (b BirchLeaves) New(props BlockProperties) Block {\r\n\treturn BirchLeaves{\r\n\t\tPersistent: props[\"persistent\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchLog.go",
    "content": "package block\r\n\r\ntype BirchLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b BirchLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b BirchLog) New(props BlockProperties) Block {\r\n\treturn BirchLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchPlanks.go",
    "content": "package block\r\n\r\ntype BirchPlanks struct {\r\n}\r\n\r\nfunc (b BirchPlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b BirchPlanks) New(props BlockProperties) Block {\r\n\treturn BirchPlanks{}\r\n}"
  },
  {
    "path": "server/world/block/birchPressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchPressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b BirchPressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b BirchPressurePlate) New(props BlockProperties) Block {\r\n\treturn BirchPressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchSapling.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchSapling struct {\r\n\tStage int\r\n}\r\n\r\nfunc (b BirchSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_sapling\", BlockProperties{\r\n\t\t\"stage\": strconv.Itoa(b.Stage),\r\n\t}\r\n}\r\n\r\nfunc (b BirchSapling) New(props BlockProperties) Block {\r\n\treturn BirchSapling{\r\n\t\tStage: atoi(props[\"stage\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchSign struct {\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BirchSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_sign\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b BirchSign) New(props BlockProperties) Block {\r\n\treturn BirchSign{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BirchSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BirchSlab) New(props BlockProperties) Block {\r\n\treturn BirchSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b BirchStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b BirchStairs) New(props BlockProperties) Block {\r\n\treturn BirchStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchTrapdoor struct {\r\n\tPowered bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n}\r\n\r\nfunc (b BirchTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_trapdoor\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b BirchTrapdoor) New(props BlockProperties) Block {\r\n\treturn BirchTrapdoor{\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchWallHangingSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BirchWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_wall_hanging_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BirchWallHangingSign) New(props BlockProperties) Block {\r\n\treturn BirchWallHangingSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BirchWallSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BirchWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_wall_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BirchWallSign) New(props BlockProperties) Block {\r\n\treturn BirchWallSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/birchWood.go",
    "content": "package block\r\n\r\ntype BirchWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b BirchWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:birch_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b BirchWood) New(props BlockProperties) Block {\r\n\treturn BirchWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlackBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b BlackBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b BlackBanner) New(props BlockProperties) Block {\r\n\treturn BlackBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlackBed struct {\r\n\tOccupied bool\r\n\tPart string\r\n\tFacing string\r\n}\r\n\r\nfunc (b BlackBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_bed\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t}\r\n}\r\n\r\nfunc (b BlackBed) New(props BlockProperties) Block {\r\n\treturn BlackBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlackCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BlackCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BlackCandle) New(props BlockProperties) Block {\r\n\treturn BlackCandle{\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlackCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b BlackCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b BlackCandleCake) New(props BlockProperties) Block {\r\n\treturn BlackCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackCarpet.go",
    "content": "package block\r\n\r\ntype BlackCarpet struct {\r\n}\r\n\r\nfunc (b BlackCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlackCarpet) New(props BlockProperties) Block {\r\n\treturn BlackCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/blackConcrete.go",
    "content": "package block\r\n\r\ntype BlackConcrete struct {\r\n}\r\n\r\nfunc (b BlackConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlackConcrete) New(props BlockProperties) Block {\r\n\treturn BlackConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/blackConcretePowder.go",
    "content": "package block\r\n\r\ntype BlackConcretePowder struct {\r\n}\r\n\r\nfunc (b BlackConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlackConcretePowder) New(props BlockProperties) Block {\r\n\treturn BlackConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/blackGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype BlackGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b BlackGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BlackGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn BlackGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackShulkerBox.go",
    "content": "package block\r\n\r\ntype BlackShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b BlackShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BlackShulkerBox) New(props BlockProperties) Block {\r\n\treturn BlackShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackStainedGlass.go",
    "content": "package block\r\n\r\ntype BlackStainedGlass struct {\r\n}\r\n\r\nfunc (b BlackStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlackStainedGlass) New(props BlockProperties) Block {\r\n\treturn BlackStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/blackStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlackStainedGlassPane struct {\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n}\r\n\r\nfunc (b BlackStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_stained_glass_pane\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t}\r\n}\r\n\r\nfunc (b BlackStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn BlackStainedGlassPane{\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackTerracotta.go",
    "content": "package block\r\n\r\ntype BlackTerracotta struct {\r\n}\r\n\r\nfunc (b BlackTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlackTerracotta) New(props BlockProperties) Block {\r\n\treturn BlackTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/blackWallBanner.go",
    "content": "package block\r\n\r\ntype BlackWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b BlackWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BlackWallBanner) New(props BlockProperties) Block {\r\n\treturn BlackWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackWool.go",
    "content": "package block\r\n\r\ntype BlackWool struct {\r\n}\r\n\r\nfunc (b BlackWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:black_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlackWool) New(props BlockProperties) Block {\r\n\treturn BlackWool{}\r\n}"
  },
  {
    "path": "server/world/block/blackstone.go",
    "content": "package block\r\n\r\ntype Blackstone struct {\r\n}\r\n\r\nfunc (b Blackstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blackstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b Blackstone) New(props BlockProperties) Block {\r\n\treturn Blackstone{}\r\n}"
  },
  {
    "path": "server/world/block/blackstoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlackstoneSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BlackstoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blackstone_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BlackstoneSlab) New(props BlockProperties) Block {\r\n\treturn BlackstoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackstoneStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlackstoneStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b BlackstoneStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blackstone_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BlackstoneStairs) New(props BlockProperties) Block {\r\n\treturn BlackstoneStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blackstoneWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlackstoneWall struct {\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n}\r\n\r\nfunc (b BlackstoneWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blackstone_wall\", BlockProperties{\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t}\r\n}\r\n\r\nfunc (b BlackstoneWall) New(props BlockProperties) Block {\r\n\treturn BlackstoneWall{\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blastFurnace.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype BlastFurnace struct {\r\n\tFacing string\r\n\tLit bool\r\n}\r\n\r\nfunc (b BlastFurnace) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blast_furnace\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b BlastFurnace) New(props BlockProperties) Block {\r\n\treturn BlastFurnace{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}\r\n\r\nfunc (b BlastFurnace) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:blast_furnace\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blueBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlueBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b BlueBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b BlueBanner) New(props BlockProperties) Block {\r\n\treturn BlueBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blueBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlueBed struct {\r\n\tPart string\r\n\tFacing string\r\n\tOccupied bool\r\n}\r\n\r\nfunc (b BlueBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_bed\", BlockProperties{\r\n\t\t\"part\": b.Part,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t}\r\n}\r\n\r\nfunc (b BlueBed) New(props BlockProperties) Block {\r\n\treturn BlueBed{\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blueCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlueCandle struct {\r\n\tWaterlogged bool\r\n\tCandles int\r\n\tLit bool\r\n}\r\n\r\nfunc (b BlueCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_candle\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t}\r\n}\r\n\r\nfunc (b BlueCandle) New(props BlockProperties) Block {\r\n\treturn BlueCandle{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blueCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlueCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b BlueCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b BlueCandleCake) New(props BlockProperties) Block {\r\n\treturn BlueCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blueCarpet.go",
    "content": "package block\r\n\r\ntype BlueCarpet struct {\r\n}\r\n\r\nfunc (b BlueCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlueCarpet) New(props BlockProperties) Block {\r\n\treturn BlueCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/blueConcrete.go",
    "content": "package block\r\n\r\ntype BlueConcrete struct {\r\n}\r\n\r\nfunc (b BlueConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlueConcrete) New(props BlockProperties) Block {\r\n\treturn BlueConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/blueConcretePowder.go",
    "content": "package block\r\n\r\ntype BlueConcretePowder struct {\r\n}\r\n\r\nfunc (b BlueConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlueConcretePowder) New(props BlockProperties) Block {\r\n\treturn BlueConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/blueGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype BlueGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b BlueGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BlueGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn BlueGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blueIce.go",
    "content": "package block\r\n\r\ntype BlueIce struct {\r\n}\r\n\r\nfunc (b BlueIce) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_ice\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlueIce) New(props BlockProperties) Block {\r\n\treturn BlueIce{}\r\n}"
  },
  {
    "path": "server/world/block/blueOrchid.go",
    "content": "package block\r\n\r\ntype BlueOrchid struct {\r\n}\r\n\r\nfunc (b BlueOrchid) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_orchid\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlueOrchid) New(props BlockProperties) Block {\r\n\treturn BlueOrchid{}\r\n}"
  },
  {
    "path": "server/world/block/blueShulkerBox.go",
    "content": "package block\r\n\r\ntype BlueShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b BlueShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BlueShulkerBox) New(props BlockProperties) Block {\r\n\treturn BlueShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blueStainedGlass.go",
    "content": "package block\r\n\r\ntype BlueStainedGlass struct {\r\n}\r\n\r\nfunc (b BlueStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlueStainedGlass) New(props BlockProperties) Block {\r\n\treturn BlueStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/blueStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BlueStainedGlassPane struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b BlueStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_stained_glass_pane\", BlockProperties{\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t}\r\n}\r\n\r\nfunc (b BlueStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn BlueStainedGlassPane{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blueTerracotta.go",
    "content": "package block\r\n\r\ntype BlueTerracotta struct {\r\n}\r\n\r\nfunc (b BlueTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlueTerracotta) New(props BlockProperties) Block {\r\n\treturn BlueTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/blueWallBanner.go",
    "content": "package block\r\n\r\ntype BlueWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b BlueWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BlueWallBanner) New(props BlockProperties) Block {\r\n\treturn BlueWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/blueWool.go",
    "content": "package block\r\n\r\ntype BlueWool struct {\r\n}\r\n\r\nfunc (b BlueWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:blue_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b BlueWool) New(props BlockProperties) Block {\r\n\treturn BlueWool{}\r\n}"
  },
  {
    "path": "server/world/block/boneBlock.go",
    "content": "package block\r\n\r\ntype BoneBlock struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b BoneBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bone_block\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b BoneBlock) New(props BlockProperties) Block {\r\n\treturn BoneBlock{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bookshelf.go",
    "content": "package block\r\n\r\ntype Bookshelf struct {\r\n}\r\n\r\nfunc (b Bookshelf) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bookshelf\", BlockProperties{}\r\n}\r\n\r\nfunc (b Bookshelf) New(props BlockProperties) Block {\r\n\treturn Bookshelf{}\r\n}"
  },
  {
    "path": "server/world/block/brainCoral.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrainCoral struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BrainCoral) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brain_coral\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BrainCoral) New(props BlockProperties) Block {\r\n\treturn BrainCoral{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brainCoralBlock.go",
    "content": "package block\r\n\r\ntype BrainCoralBlock struct {\r\n}\r\n\r\nfunc (b BrainCoralBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brain_coral_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b BrainCoralBlock) New(props BlockProperties) Block {\r\n\treturn BrainCoralBlock{}\r\n}"
  },
  {
    "path": "server/world/block/brainCoralFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrainCoralFan struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BrainCoralFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brain_coral_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BrainCoralFan) New(props BlockProperties) Block {\r\n\treturn BrainCoralFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brainCoralWallFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrainCoralWallFan struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b BrainCoralWallFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brain_coral_wall_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BrainCoralWallFan) New(props BlockProperties) Block {\r\n\treturn BrainCoralWallFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brewingStand.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype BrewingStand struct {\r\n\tHasBottle0 bool\r\n\tHasBottle1 bool\r\n\tHasBottle2 bool\r\n}\r\n\r\nfunc (b BrewingStand) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brewing_stand\", BlockProperties{\r\n\t\t\"has_bottle_0\": strconv.FormatBool(b.HasBottle0),\r\n\t\t\"has_bottle_1\": strconv.FormatBool(b.HasBottle1),\r\n\t\t\"has_bottle_2\": strconv.FormatBool(b.HasBottle2),\r\n\t}\r\n}\r\n\r\nfunc (b BrewingStand) New(props BlockProperties) Block {\r\n\treturn BrewingStand{\r\n\t\tHasBottle0: props[\"has_bottle_0\"] != \"false\",\r\n\t\tHasBottle1: props[\"has_bottle_1\"] != \"false\",\r\n\t\tHasBottle2: props[\"has_bottle_2\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b BrewingStand) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:brewing_stand\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrickSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brick_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BrickSlab) New(props BlockProperties) Block {\r\n\treturn BrickSlab{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrickStairs struct {\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n}\r\n\r\nfunc (b BrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brick_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b BrickStairs) New(props BlockProperties) Block {\r\n\treturn BrickStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brickWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrickWall struct {\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n}\r\n\r\nfunc (b BrickWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brick_wall\", BlockProperties{\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t}\r\n}\r\n\r\nfunc (b BrickWall) New(props BlockProperties) Block {\r\n\treturn BrickWall{\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bricks.go",
    "content": "package block\r\n\r\ntype Bricks struct {\r\n}\r\n\r\nfunc (b Bricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b Bricks) New(props BlockProperties) Block {\r\n\treturn Bricks{}\r\n}"
  },
  {
    "path": "server/world/block/brownBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrownBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b BrownBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b BrownBanner) New(props BlockProperties) Block {\r\n\treturn BrownBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brownBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrownBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b BrownBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_bed\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t}\r\n}\r\n\r\nfunc (b BrownBed) New(props BlockProperties) Block {\r\n\treturn BrownBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brownCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrownCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BrownCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BrownCandle) New(props BlockProperties) Block {\r\n\treturn BrownCandle{\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brownCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrownCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b BrownCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b BrownCandleCake) New(props BlockProperties) Block {\r\n\treturn BrownCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brownCarpet.go",
    "content": "package block\r\n\r\ntype BrownCarpet struct {\r\n}\r\n\r\nfunc (b BrownCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b BrownCarpet) New(props BlockProperties) Block {\r\n\treturn BrownCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/brownConcrete.go",
    "content": "package block\r\n\r\ntype BrownConcrete struct {\r\n}\r\n\r\nfunc (b BrownConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b BrownConcrete) New(props BlockProperties) Block {\r\n\treturn BrownConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/brownConcretePowder.go",
    "content": "package block\r\n\r\ntype BrownConcretePowder struct {\r\n}\r\n\r\nfunc (b BrownConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b BrownConcretePowder) New(props BlockProperties) Block {\r\n\treturn BrownConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/brownGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype BrownGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b BrownGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BrownGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn BrownGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brownMushroom.go",
    "content": "package block\r\n\r\ntype BrownMushroom struct {\r\n}\r\n\r\nfunc (b BrownMushroom) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_mushroom\", BlockProperties{}\r\n}\r\n\r\nfunc (b BrownMushroom) New(props BlockProperties) Block {\r\n\treturn BrownMushroom{}\r\n}"
  },
  {
    "path": "server/world/block/brownMushroomBlock.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrownMushroomBlock struct {\r\n\tWest bool\r\n\tDown bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tUp bool\r\n}\r\n\r\nfunc (b BrownMushroomBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_mushroom_block\", BlockProperties{\r\n\t\t\"down\": strconv.FormatBool(b.Down),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t}\r\n}\r\n\r\nfunc (b BrownMushroomBlock) New(props BlockProperties) Block {\r\n\treturn BrownMushroomBlock{\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tDown: props[\"down\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brownShulkerBox.go",
    "content": "package block\r\n\r\ntype BrownShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b BrownShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BrownShulkerBox) New(props BlockProperties) Block {\r\n\treturn BrownShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brownStainedGlass.go",
    "content": "package block\r\n\r\ntype BrownStainedGlass struct {\r\n}\r\n\r\nfunc (b BrownStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b BrownStainedGlass) New(props BlockProperties) Block {\r\n\treturn BrownStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/brownStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BrownStainedGlassPane struct {\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n}\r\n\r\nfunc (b BrownStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_stained_glass_pane\", BlockProperties{\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BrownStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn BrownStainedGlassPane{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brownTerracotta.go",
    "content": "package block\r\n\r\ntype BrownTerracotta struct {\r\n}\r\n\r\nfunc (b BrownTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b BrownTerracotta) New(props BlockProperties) Block {\r\n\treturn BrownTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/brownWallBanner.go",
    "content": "package block\r\n\r\ntype BrownWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b BrownWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b BrownWallBanner) New(props BlockProperties) Block {\r\n\treturn BrownWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/brownWool.go",
    "content": "package block\r\n\r\ntype BrownWool struct {\r\n}\r\n\r\nfunc (b BrownWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:brown_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b BrownWool) New(props BlockProperties) Block {\r\n\treturn BrownWool{}\r\n}"
  },
  {
    "path": "server/world/block/bubbleColumn.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BubbleColumn struct {\r\n\tDrag bool\r\n}\r\n\r\nfunc (b BubbleColumn) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bubble_column\", BlockProperties{\r\n\t\t\"drag\": strconv.FormatBool(b.Drag),\r\n\t}\r\n}\r\n\r\nfunc (b BubbleColumn) New(props BlockProperties) Block {\r\n\treturn BubbleColumn{\r\n\t\tDrag: props[\"drag\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bubbleCoral.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BubbleCoral struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BubbleCoral) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bubble_coral\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BubbleCoral) New(props BlockProperties) Block {\r\n\treturn BubbleCoral{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bubbleCoralBlock.go",
    "content": "package block\r\n\r\ntype BubbleCoralBlock struct {\r\n}\r\n\r\nfunc (b BubbleCoralBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bubble_coral_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b BubbleCoralBlock) New(props BlockProperties) Block {\r\n\treturn BubbleCoralBlock{}\r\n}"
  },
  {
    "path": "server/world/block/bubbleCoralFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BubbleCoralFan struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BubbleCoralFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bubble_coral_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BubbleCoralFan) New(props BlockProperties) Block {\r\n\treturn BubbleCoralFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/bubbleCoralWallFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype BubbleCoralWallFan struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b BubbleCoralWallFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:bubble_coral_wall_fan\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b BubbleCoralWallFan) New(props BlockProperties) Block {\r\n\treturn BubbleCoralWallFan{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/buddingAmethyst.go",
    "content": "package block\r\n\r\ntype BuddingAmethyst struct {\r\n}\r\n\r\nfunc (b BuddingAmethyst) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:budding_amethyst\", BlockProperties{}\r\n}\r\n\r\nfunc (b BuddingAmethyst) New(props BlockProperties) Block {\r\n\treturn BuddingAmethyst{}\r\n}"
  },
  {
    "path": "server/world/block/cactus.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Cactus struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b Cactus) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cactus\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b Cactus) New(props BlockProperties) Block {\r\n\treturn Cactus{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Cake struct {\r\n\tBites int\r\n}\r\n\r\nfunc (b Cake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cake\", BlockProperties{\r\n\t\t\"bites\": strconv.Itoa(b.Bites),\r\n\t}\r\n}\r\n\r\nfunc (b Cake) New(props BlockProperties) Block {\r\n\treturn Cake{\r\n\t\tBites: atoi(props[\"bites\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/calcite.go",
    "content": "package block\r\n\r\ntype Calcite struct {\r\n}\r\n\r\nfunc (b Calcite) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:calcite\", BlockProperties{}\r\n}\r\n\r\nfunc (b Calcite) New(props BlockProperties) Block {\r\n\treturn Calcite{}\r\n}"
  },
  {
    "path": "server/world/block/calibratedSculkSensor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype CalibratedSculkSensor struct {\r\n\tFacing string\r\n\tPower int\r\n\tSculkSensorPhase string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CalibratedSculkSensor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:calibrated_sculk_sensor\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"power\": strconv.Itoa(b.Power),\r\n\t\t\"sculk_sensor_phase\": b.SculkSensorPhase,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CalibratedSculkSensor) New(props BlockProperties) Block {\r\n\treturn CalibratedSculkSensor{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPower: atoi(props[\"power\"]),\r\n\t\tSculkSensorPhase: props[\"sculk_sensor_phase\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b CalibratedSculkSensor) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:calibrated_sculk_sensor\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/campfire.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Campfire struct {\r\n\tSignalFire bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tLit bool\r\n}\r\n\r\nfunc (b Campfire) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:campfire\", BlockProperties{\r\n\t\t\"signal_fire\": strconv.FormatBool(b.SignalFire),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b Campfire) New(props BlockProperties) Block {\r\n\treturn Campfire{\r\n\t\tSignalFire: props[\"signal_fire\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b Campfire) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:campfire\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/candle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Candle struct {\r\n\tLit bool\r\n\tWaterlogged bool\r\n\tCandles int\r\n}\r\n\r\nfunc (b Candle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b Candle) New(props BlockProperties) Block {\r\n\treturn Candle{\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/candleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b CandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b CandleCake) New(props BlockProperties) Block {\r\n\treturn CandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/carrots.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Carrots struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b Carrots) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:carrots\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b Carrots) New(props BlockProperties) Block {\r\n\treturn Carrots{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cartographyTable.go",
    "content": "package block\r\n\r\ntype CartographyTable struct {\r\n}\r\n\r\nfunc (b CartographyTable) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cartography_table\", BlockProperties{}\r\n}\r\n\r\nfunc (b CartographyTable) New(props BlockProperties) Block {\r\n\treturn CartographyTable{}\r\n}"
  },
  {
    "path": "server/world/block/carvedPumpkin.go",
    "content": "package block\r\n\r\ntype CarvedPumpkin struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b CarvedPumpkin) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:carved_pumpkin\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b CarvedPumpkin) New(props BlockProperties) Block {\r\n\treturn CarvedPumpkin{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cauldron.go",
    "content": "package block\r\n\r\ntype Cauldron struct {\r\n}\r\n\r\nfunc (b Cauldron) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cauldron\", BlockProperties{}\r\n}\r\n\r\nfunc (b Cauldron) New(props BlockProperties) Block {\r\n\treturn Cauldron{}\r\n}"
  },
  {
    "path": "server/world/block/caveAir.go",
    "content": "package block\r\n\r\ntype CaveAir struct {\r\n}\r\n\r\nfunc (b CaveAir) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cave_air\", BlockProperties{}\r\n}\r\n\r\nfunc (b CaveAir) New(props BlockProperties) Block {\r\n\treturn CaveAir{}\r\n}"
  },
  {
    "path": "server/world/block/caveVines.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CaveVines struct {\r\n\tAge int\r\n\tBerries bool\r\n}\r\n\r\nfunc (b CaveVines) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cave_vines\", BlockProperties{\r\n\t\t\"berries\": strconv.FormatBool(b.Berries),\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b CaveVines) New(props BlockProperties) Block {\r\n\treturn CaveVines{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t\tBerries: props[\"berries\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/caveVinesPlant.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CaveVinesPlant struct {\r\n\tBerries bool\r\n}\r\n\r\nfunc (b CaveVinesPlant) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cave_vines_plant\", BlockProperties{\r\n\t\t\"berries\": strconv.FormatBool(b.Berries),\r\n\t}\r\n}\r\n\r\nfunc (b CaveVinesPlant) New(props BlockProperties) Block {\r\n\treturn CaveVinesPlant{\r\n\t\tBerries: props[\"berries\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/chain.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Chain struct {\r\n\tAxis string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b Chain) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chain\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b Chain) New(props BlockProperties) Block {\r\n\treturn Chain{\r\n\t\tAxis: props[\"axis\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/chainCommandBlock.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ChainCommandBlock struct {\r\n\tFacing string\r\n\tConditional bool\r\n}\r\n\r\nfunc (b ChainCommandBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chain_command_block\", BlockProperties{\r\n\t\t\"conditional\": strconv.FormatBool(b.Conditional),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b ChainCommandBlock) New(props BlockProperties) Block {\r\n\treturn ChainCommandBlock{\r\n\t\tConditional: props[\"conditional\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryButton struct {\r\n\tFacing string\r\n\tPowered bool\r\n\tFace string\r\n}\r\n\r\nfunc (b CherryButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_button\", BlockProperties{\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b CherryButton) New(props BlockProperties) Block {\r\n\treturn CherryButton{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFace: props[\"face\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryDoor struct {\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b CherryDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_door\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b CherryDoor) New(props BlockProperties) Block {\r\n\treturn CherryDoor{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryFence struct {\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n}\r\n\r\nfunc (b CherryFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_fence\", BlockProperties{\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t}\r\n}\r\n\r\nfunc (b CherryFence) New(props BlockProperties) Block {\r\n\treturn CherryFence{\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryFenceGate struct {\r\n\tFacing string\r\n\tInWall bool\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b CherryFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_fence_gate\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b CherryFenceGate) New(props BlockProperties) Block {\r\n\treturn CherryFenceGate{\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryHangingSign struct {\r\n\tAttached bool\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CherryHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_hanging_sign\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b CherryHangingSign) New(props BlockProperties) Block {\r\n\treturn CherryHangingSign{\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryLeaves.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryLeaves struct {\r\n\tDistance int\r\n\tPersistent bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CherryLeaves) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_leaves\", BlockProperties{\r\n\t\t\"persistent\": strconv.FormatBool(b.Persistent),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t}\r\n}\r\n\r\nfunc (b CherryLeaves) New(props BlockProperties) Block {\r\n\treturn CherryLeaves{\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t\tPersistent: props[\"persistent\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryLog.go",
    "content": "package block\r\n\r\ntype CherryLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b CherryLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b CherryLog) New(props BlockProperties) Block {\r\n\treturn CherryLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryPlanks.go",
    "content": "package block\r\n\r\ntype CherryPlanks struct {\r\n}\r\n\r\nfunc (b CherryPlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b CherryPlanks) New(props BlockProperties) Block {\r\n\treturn CherryPlanks{}\r\n}"
  },
  {
    "path": "server/world/block/cherryPressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryPressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b CherryPressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b CherryPressurePlate) New(props BlockProperties) Block {\r\n\treturn CherryPressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherrySapling.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherrySapling struct {\r\n\tStage int\r\n}\r\n\r\nfunc (b CherrySapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_sapling\", BlockProperties{\r\n\t\t\"stage\": strconv.Itoa(b.Stage),\r\n\t}\r\n}\r\n\r\nfunc (b CherrySapling) New(props BlockProperties) Block {\r\n\treturn CherrySapling{\r\n\t\tStage: atoi(props[\"stage\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherrySign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherrySign struct {\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CherrySign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_sign\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CherrySign) New(props BlockProperties) Block {\r\n\treturn CherrySign{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherrySlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherrySlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CherrySlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b CherrySlab) New(props BlockProperties) Block {\r\n\treturn CherrySlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b CherryStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b CherryStairs) New(props BlockProperties) Block {\r\n\treturn CherryStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryTrapdoor struct {\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CherryTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_trapdoor\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CherryTrapdoor) New(props BlockProperties) Block {\r\n\treturn CherryTrapdoor{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryWallHangingSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CherryWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_wall_hanging_sign\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b CherryWallHangingSign) New(props BlockProperties) Block {\r\n\treturn CherryWallHangingSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CherryWallSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CherryWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_wall_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CherryWallSign) New(props BlockProperties) Block {\r\n\treturn CherryWallSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cherryWood.go",
    "content": "package block\r\n\r\ntype CherryWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b CherryWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cherry_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b CherryWood) New(props BlockProperties) Block {\r\n\treturn CherryWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/chest.go",
    "content": "package block\n\nimport (\n\t\"strconv\"\n\n\t\"github.com/zeppelinmc/zeppelin/server/container\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\n)\n\ntype Chest struct {\n\tFacing      string\n\tType        string\n\tWaterlogged bool\n}\n\nfunc (g Chest) Encode() (string, BlockProperties) {\n\treturn \"minecraft:chest\", BlockProperties{\n\t\t\"facing\":      g.Facing,\n\t\t\"type\":        g.Type,\n\t\t\"waterlogged\": strconv.FormatBool(g.Waterlogged),\n\t}\n}\n\nfunc (g Chest) New(props BlockProperties) Block {\n\tif props[\"type\"] == \"\" {\n\t\tprops[\"type\"] = \"single\"\n\t}\n\treturn Chest{\n\t\tFacing:      props[\"facing\"],\n\t\tType:        props[\"type\"],\n\t\tWaterlogged: props[\"waterlogged\"] == \"true\",\n\t}\n}\n\nfunc (g Chest) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\n\treturn chunk.BlockEntity{\n\t\tId:    \"minecraft:chest\",\n\t\tItems: make(container.Container, 0),\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\n\t}\n}\n\n/*\n\tfunc (g Chest) PlaceSound(pos pos.BlockPosition) *play.SoundEffect {\n\t\treturn session.SoundEffect(\"minecraft:block.wood.place\", false, nil, play.SoundCategoryBlock, pos.X(), pos.Y(), pos.Z(), 1, 1)\n\t}\n\n\tfunc (g Chest) Use(clicker session.Session, pk play.UseItemOn, dimension *dimension.Dimension) {\n\t\tw, ok := dimension.WindowManager.At(pk.BlockX, pk.BlockY, pk.BlockZ)\n\t\tif !ok {\n\t\t\tstate, ok := dimension.BlockEntity(pk.BlockX, pk.BlockY, pk.BlockZ)\n\t\t\tif !ok {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif state.Id != \"minecraft:chest\" {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tw = dimension.WindowManager.New(\"minecraft:generic_9x3\", state.Id, state.Items, text.Sprint(\"Chest\"))\n\t\t\tdimension.WindowManager.AddWindow([3]int32{pk.BlockX, pk.BlockY, pk.BlockZ}, w)\n\t\t}\n\n\t\toldViewers := w.Viewers\n\n\t\tclicker.OpenWindow(w)\n\t\tclicker.Broadcast().BlockAction(pk.BlockX, pk.BlockY, pk.BlockZ, dimension.Name(), 1, w.Viewers)\n\n\t\tif oldViewers == 0 && w.Viewers > 0 { // chest was opened\n\t\t\tclicker.Broadcast().PlaySound(session.SoundEffect(\n\t\t\t\t\"minecraft:block.chest.open\", false, nil, play.SoundCategoryBlock, pk.BlockX, pk.BlockY, pk.BlockZ, 1, 1,\n\t\t\t), dimension.Name())\n\t\t}\n\t}\n*/\nvar _ Block = (*Chest)(nil)\n"
  },
  {
    "path": "server/world/block/chippedAnvil.go",
    "content": "package block\r\n\r\ntype ChippedAnvil struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b ChippedAnvil) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chipped_anvil\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b ChippedAnvil) New(props BlockProperties) Block {\r\n\treturn ChippedAnvil{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/chiseledBookshelf.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype ChiseledBookshelf struct {\r\n\tSlot4Occupied bool\r\n\tSlot5Occupied bool\r\n\tFacing string\r\n\tSlot0Occupied bool\r\n\tSlot1Occupied bool\r\n\tSlot2Occupied bool\r\n\tSlot3Occupied bool\r\n}\r\n\r\nfunc (b ChiseledBookshelf) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_bookshelf\", BlockProperties{\r\n\t\t\"slot_1_occupied\": strconv.FormatBool(b.Slot1Occupied),\r\n\t\t\"slot_2_occupied\": strconv.FormatBool(b.Slot2Occupied),\r\n\t\t\"slot_3_occupied\": strconv.FormatBool(b.Slot3Occupied),\r\n\t\t\"slot_4_occupied\": strconv.FormatBool(b.Slot4Occupied),\r\n\t\t\"slot_5_occupied\": strconv.FormatBool(b.Slot5Occupied),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"slot_0_occupied\": strconv.FormatBool(b.Slot0Occupied),\r\n\t}\r\n}\r\n\r\nfunc (b ChiseledBookshelf) New(props BlockProperties) Block {\r\n\treturn ChiseledBookshelf{\r\n\t\tSlot0Occupied: props[\"slot_0_occupied\"] != \"false\",\r\n\t\tSlot1Occupied: props[\"slot_1_occupied\"] != \"false\",\r\n\t\tSlot2Occupied: props[\"slot_2_occupied\"] != \"false\",\r\n\t\tSlot3Occupied: props[\"slot_3_occupied\"] != \"false\",\r\n\t\tSlot4Occupied: props[\"slot_4_occupied\"] != \"false\",\r\n\t\tSlot5Occupied: props[\"slot_5_occupied\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}\r\n\r\nfunc (b ChiseledBookshelf) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:chiseled_bookshelf\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/chiseledCopper.go",
    "content": "package block\r\n\r\ntype ChiseledCopper struct {\r\n}\r\n\r\nfunc (b ChiseledCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b ChiseledCopper) New(props BlockProperties) Block {\r\n\treturn ChiseledCopper{}\r\n}"
  },
  {
    "path": "server/world/block/chiseledDeepslate.go",
    "content": "package block\r\n\r\ntype ChiseledDeepslate struct {\r\n}\r\n\r\nfunc (b ChiseledDeepslate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_deepslate\", BlockProperties{}\r\n}\r\n\r\nfunc (b ChiseledDeepslate) New(props BlockProperties) Block {\r\n\treturn ChiseledDeepslate{}\r\n}"
  },
  {
    "path": "server/world/block/chiseledNetherBricks.go",
    "content": "package block\r\n\r\ntype ChiseledNetherBricks struct {\r\n}\r\n\r\nfunc (b ChiseledNetherBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_nether_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b ChiseledNetherBricks) New(props BlockProperties) Block {\r\n\treturn ChiseledNetherBricks{}\r\n}"
  },
  {
    "path": "server/world/block/chiseledPolishedBlackstone.go",
    "content": "package block\r\n\r\ntype ChiseledPolishedBlackstone struct {\r\n}\r\n\r\nfunc (b ChiseledPolishedBlackstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_polished_blackstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b ChiseledPolishedBlackstone) New(props BlockProperties) Block {\r\n\treturn ChiseledPolishedBlackstone{}\r\n}"
  },
  {
    "path": "server/world/block/chiseledQuartzBlock.go",
    "content": "package block\r\n\r\ntype ChiseledQuartzBlock struct {\r\n}\r\n\r\nfunc (b ChiseledQuartzBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_quartz_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b ChiseledQuartzBlock) New(props BlockProperties) Block {\r\n\treturn ChiseledQuartzBlock{}\r\n}"
  },
  {
    "path": "server/world/block/chiseledRedSandstone.go",
    "content": "package block\r\n\r\ntype ChiseledRedSandstone struct {\r\n}\r\n\r\nfunc (b ChiseledRedSandstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_red_sandstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b ChiseledRedSandstone) New(props BlockProperties) Block {\r\n\treturn ChiseledRedSandstone{}\r\n}"
  },
  {
    "path": "server/world/block/chiseledSandstone.go",
    "content": "package block\r\n\r\ntype ChiseledSandstone struct {\r\n}\r\n\r\nfunc (b ChiseledSandstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_sandstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b ChiseledSandstone) New(props BlockProperties) Block {\r\n\treturn ChiseledSandstone{}\r\n}"
  },
  {
    "path": "server/world/block/chiseledStoneBricks.go",
    "content": "package block\r\n\r\ntype ChiseledStoneBricks struct {\r\n}\r\n\r\nfunc (b ChiseledStoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_stone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b ChiseledStoneBricks) New(props BlockProperties) Block {\r\n\treturn ChiseledStoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/chiseledTuff.go",
    "content": "package block\r\n\r\ntype ChiseledTuff struct {\r\n}\r\n\r\nfunc (b ChiseledTuff) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_tuff\", BlockProperties{}\r\n}\r\n\r\nfunc (b ChiseledTuff) New(props BlockProperties) Block {\r\n\treturn ChiseledTuff{}\r\n}"
  },
  {
    "path": "server/world/block/chiseledTuffBricks.go",
    "content": "package block\r\n\r\ntype ChiseledTuffBricks struct {\r\n}\r\n\r\nfunc (b ChiseledTuffBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chiseled_tuff_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b ChiseledTuffBricks) New(props BlockProperties) Block {\r\n\treturn ChiseledTuffBricks{}\r\n}"
  },
  {
    "path": "server/world/block/chorusFlower.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ChorusFlower struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b ChorusFlower) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chorus_flower\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b ChorusFlower) New(props BlockProperties) Block {\r\n\treturn ChorusFlower{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/chorusPlant.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ChorusPlant struct {\r\n\tUp bool\r\n\tWest bool\r\n\tDown bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n}\r\n\r\nfunc (b ChorusPlant) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:chorus_plant\", BlockProperties{\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"down\": strconv.FormatBool(b.Down),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t}\r\n}\r\n\r\nfunc (b ChorusPlant) New(props BlockProperties) Block {\r\n\treturn ChorusPlant{\r\n\t\tDown: props[\"down\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/clay.go",
    "content": "package block\r\n\r\ntype Clay struct {\r\n}\r\n\r\nfunc (b Clay) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:clay\", BlockProperties{}\r\n}\r\n\r\nfunc (b Clay) New(props BlockProperties) Block {\r\n\treturn Clay{}\r\n}"
  },
  {
    "path": "server/world/block/coalBlock.go",
    "content": "package block\r\n\r\ntype CoalBlock struct {\r\n}\r\n\r\nfunc (b CoalBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:coal_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b CoalBlock) New(props BlockProperties) Block {\r\n\treturn CoalBlock{}\r\n}"
  },
  {
    "path": "server/world/block/coalOre.go",
    "content": "package block\r\n\r\ntype CoalOre struct {\r\n}\r\n\r\nfunc (b CoalOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:coal_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b CoalOre) New(props BlockProperties) Block {\r\n\treturn CoalOre{}\r\n}"
  },
  {
    "path": "server/world/block/coarseDirt.go",
    "content": "package block\r\n\r\ntype CoarseDirt struct {\r\n}\r\n\r\nfunc (b CoarseDirt) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:coarse_dirt\", BlockProperties{}\r\n}\r\n\r\nfunc (b CoarseDirt) New(props BlockProperties) Block {\r\n\treturn CoarseDirt{}\r\n}"
  },
  {
    "path": "server/world/block/cobbledDeepslate.go",
    "content": "package block\r\n\r\ntype CobbledDeepslate struct {\r\n}\r\n\r\nfunc (b CobbledDeepslate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cobbled_deepslate\", BlockProperties{}\r\n}\r\n\r\nfunc (b CobbledDeepslate) New(props BlockProperties) Block {\r\n\treturn CobbledDeepslate{}\r\n}"
  },
  {
    "path": "server/world/block/cobbledDeepslateSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CobbledDeepslateSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CobbledDeepslateSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cobbled_deepslate_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CobbledDeepslateSlab) New(props BlockProperties) Block {\r\n\treturn CobbledDeepslateSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cobbledDeepslateStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CobbledDeepslateStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CobbledDeepslateStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cobbled_deepslate_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CobbledDeepslateStairs) New(props BlockProperties) Block {\r\n\treturn CobbledDeepslateStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cobbledDeepslateWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CobbledDeepslateWall struct {\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n}\r\n\r\nfunc (b CobbledDeepslateWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cobbled_deepslate_wall\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t}\r\n}\r\n\r\nfunc (b CobbledDeepslateWall) New(props BlockProperties) Block {\r\n\treturn CobbledDeepslateWall{\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cobblestone.go",
    "content": "package block\r\n\r\ntype Cobblestone struct {\r\n}\r\n\r\nfunc (b Cobblestone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cobblestone\", BlockProperties{}\r\n}\r\n\r\nfunc (b Cobblestone) New(props BlockProperties) Block {\r\n\treturn Cobblestone{}\r\n}"
  },
  {
    "path": "server/world/block/cobblestoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CobblestoneSlab struct {\r\n\tWaterlogged bool\r\n\tType string\r\n}\r\n\r\nfunc (b CobblestoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cobblestone_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b CobblestoneSlab) New(props BlockProperties) Block {\r\n\treturn CobblestoneSlab{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cobblestoneStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CobblestoneStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b CobblestoneStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cobblestone_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b CobblestoneStairs) New(props BlockProperties) Block {\r\n\treturn CobblestoneStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cobblestoneWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CobblestoneWall struct {\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CobblestoneWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cobblestone_wall\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t}\r\n}\r\n\r\nfunc (b CobblestoneWall) New(props BlockProperties) Block {\r\n\treturn CobblestoneWall{\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cobweb.go",
    "content": "package block\r\n\r\ntype Cobweb struct {\r\n}\r\n\r\nfunc (b Cobweb) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cobweb\", BlockProperties{}\r\n}\r\n\r\nfunc (b Cobweb) New(props BlockProperties) Block {\r\n\treturn Cobweb{}\r\n}"
  },
  {
    "path": "server/world/block/cocoa.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Cocoa struct {\r\n\tAge int\r\n\tFacing string\r\n}\r\n\r\nfunc (b Cocoa) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cocoa\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Cocoa) New(props BlockProperties) Block {\r\n\treturn Cocoa{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/commandBlock.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype CommandBlock struct {\r\n\tConditional bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b CommandBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:command_block\", BlockProperties{\r\n\t\t\"conditional\": strconv.FormatBool(b.Conditional),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b CommandBlock) New(props BlockProperties) Block {\r\n\treturn CommandBlock{\r\n\t\tConditional: props[\"conditional\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}\r\n\r\nfunc (b CommandBlock) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:command_block\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/comparator.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Comparator struct {\r\n\tFacing string\r\n\tMode string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b Comparator) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:comparator\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"mode\": b.Mode,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b Comparator) New(props BlockProperties) Block {\r\n\treturn Comparator{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tMode: props[\"mode\"],\r\n\t}\r\n}\r\n\r\nfunc (b Comparator) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:comparator\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/composter.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Composter struct {\r\n\tLevel int\r\n}\r\n\r\nfunc (b Composter) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:composter\", BlockProperties{\r\n\t\t\"level\": strconv.Itoa(b.Level),\r\n\t}\r\n}\r\n\r\nfunc (b Composter) New(props BlockProperties) Block {\r\n\treturn Composter{\r\n\t\tLevel: atoi(props[\"level\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/conduit.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Conduit struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b Conduit) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:conduit\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b Conduit) New(props BlockProperties) Block {\r\n\treturn Conduit{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b Conduit) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:conduit\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/copperBlock.go",
    "content": "package block\r\n\r\ntype CopperBlock struct {\r\n}\r\n\r\nfunc (b CopperBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:copper_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b CopperBlock) New(props BlockProperties) Block {\r\n\treturn CopperBlock{}\r\n}"
  },
  {
    "path": "server/world/block/copperBulb.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CopperBulb struct {\r\n\tLit bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b CopperBulb) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:copper_bulb\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b CopperBulb) New(props BlockProperties) Block {\r\n\treturn CopperBulb{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/copperDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CopperDoor struct {\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n}\r\n\r\nfunc (b CopperDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:copper_door\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t}\r\n}\r\n\r\nfunc (b CopperDoor) New(props BlockProperties) Block {\r\n\treturn CopperDoor{\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/copperGrate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CopperGrate struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CopperGrate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:copper_grate\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CopperGrate) New(props BlockProperties) Block {\r\n\treturn CopperGrate{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/copperOre.go",
    "content": "package block\r\n\r\ntype CopperOre struct {\r\n}\r\n\r\nfunc (b CopperOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:copper_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b CopperOre) New(props BlockProperties) Block {\r\n\treturn CopperOre{}\r\n}"
  },
  {
    "path": "server/world/block/copperTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CopperTrapdoor struct {\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n}\r\n\r\nfunc (b CopperTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:copper_trapdoor\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CopperTrapdoor) New(props BlockProperties) Block {\r\n\treturn CopperTrapdoor{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cornflower.go",
    "content": "package block\r\n\r\ntype Cornflower struct {\r\n}\r\n\r\nfunc (b Cornflower) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cornflower\", BlockProperties{}\r\n}\r\n\r\nfunc (b Cornflower) New(props BlockProperties) Block {\r\n\treturn Cornflower{}\r\n}"
  },
  {
    "path": "server/world/block/crackedDeepslateBricks.go",
    "content": "package block\r\n\r\ntype CrackedDeepslateBricks struct {\r\n}\r\n\r\nfunc (b CrackedDeepslateBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cracked_deepslate_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b CrackedDeepslateBricks) New(props BlockProperties) Block {\r\n\treturn CrackedDeepslateBricks{}\r\n}"
  },
  {
    "path": "server/world/block/crackedDeepslateTiles.go",
    "content": "package block\r\n\r\ntype CrackedDeepslateTiles struct {\r\n}\r\n\r\nfunc (b CrackedDeepslateTiles) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cracked_deepslate_tiles\", BlockProperties{}\r\n}\r\n\r\nfunc (b CrackedDeepslateTiles) New(props BlockProperties) Block {\r\n\treturn CrackedDeepslateTiles{}\r\n}"
  },
  {
    "path": "server/world/block/crackedNetherBricks.go",
    "content": "package block\r\n\r\ntype CrackedNetherBricks struct {\r\n}\r\n\r\nfunc (b CrackedNetherBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cracked_nether_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b CrackedNetherBricks) New(props BlockProperties) Block {\r\n\treturn CrackedNetherBricks{}\r\n}"
  },
  {
    "path": "server/world/block/crackedPolishedBlackstoneBricks.go",
    "content": "package block\r\n\r\ntype CrackedPolishedBlackstoneBricks struct {\r\n}\r\n\r\nfunc (b CrackedPolishedBlackstoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cracked_polished_blackstone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b CrackedPolishedBlackstoneBricks) New(props BlockProperties) Block {\r\n\treturn CrackedPolishedBlackstoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/crackedStoneBricks.go",
    "content": "package block\r\n\r\ntype CrackedStoneBricks struct {\r\n}\r\n\r\nfunc (b CrackedStoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cracked_stone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b CrackedStoneBricks) New(props BlockProperties) Block {\r\n\treturn CrackedStoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/crafter.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Crafter struct {\r\n\tCrafting bool\r\n\tOrientation string\r\n\tTriggered bool\r\n}\r\n\r\nfunc (b Crafter) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crafter\", BlockProperties{\r\n\t\t\"crafting\": strconv.FormatBool(b.Crafting),\r\n\t\t\"orientation\": b.Orientation,\r\n\t\t\"triggered\": strconv.FormatBool(b.Triggered),\r\n\t}\r\n}\r\n\r\nfunc (b Crafter) New(props BlockProperties) Block {\r\n\treturn Crafter{\r\n\t\tCrafting: props[\"crafting\"] != \"false\",\r\n\t\tOrientation: props[\"orientation\"],\r\n\t\tTriggered: props[\"triggered\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b Crafter) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:crafter\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/craftingTable.go",
    "content": "package block\r\n\r\ntype CraftingTable struct {\r\n}\r\n\r\nfunc (b CraftingTable) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crafting_table\", BlockProperties{}\r\n}\r\n\r\nfunc (b CraftingTable) New(props BlockProperties) Block {\r\n\treturn CraftingTable{}\r\n}"
  },
  {
    "path": "server/world/block/creeperHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CreeperHead struct {\r\n\tPowered bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b CreeperHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:creeper_head\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b CreeperHead) New(props BlockProperties) Block {\r\n\treturn CreeperHead{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/creeperWallHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CreeperWallHead struct {\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b CreeperWallHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:creeper_wall_head\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b CreeperWallHead) New(props BlockProperties) Block {\r\n\treturn CreeperWallHead{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonButton struct {\r\n\tFace string\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b CrimsonButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_button\", BlockProperties{\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonButton) New(props BlockProperties) Block {\r\n\treturn CrimsonButton{\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonDoor struct {\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b CrimsonDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_door\", BlockProperties{\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonDoor) New(props BlockProperties) Block {\r\n\treturn CrimsonDoor{\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonFence struct {\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n}\r\n\r\nfunc (b CrimsonFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_fence\", BlockProperties{\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonFence) New(props BlockProperties) Block {\r\n\treturn CrimsonFence{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonFenceGate struct {\r\n\tInWall bool\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b CrimsonFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_fence_gate\", BlockProperties{\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonFenceGate) New(props BlockProperties) Block {\r\n\treturn CrimsonFenceGate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonFungus.go",
    "content": "package block\r\n\r\ntype CrimsonFungus struct {\r\n}\r\n\r\nfunc (b CrimsonFungus) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_fungus\", BlockProperties{}\r\n}\r\n\r\nfunc (b CrimsonFungus) New(props BlockProperties) Block {\r\n\treturn CrimsonFungus{}\r\n}"
  },
  {
    "path": "server/world/block/crimsonHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonHangingSign struct {\r\n\tAttached bool\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CrimsonHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_hanging_sign\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonHangingSign) New(props BlockProperties) Block {\r\n\treturn CrimsonHangingSign{\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonHyphae.go",
    "content": "package block\r\n\r\ntype CrimsonHyphae struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b CrimsonHyphae) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_hyphae\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonHyphae) New(props BlockProperties) Block {\r\n\treturn CrimsonHyphae{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonNylium.go",
    "content": "package block\r\n\r\ntype CrimsonNylium struct {\r\n}\r\n\r\nfunc (b CrimsonNylium) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_nylium\", BlockProperties{}\r\n}\r\n\r\nfunc (b CrimsonNylium) New(props BlockProperties) Block {\r\n\treturn CrimsonNylium{}\r\n}"
  },
  {
    "path": "server/world/block/crimsonPlanks.go",
    "content": "package block\r\n\r\ntype CrimsonPlanks struct {\r\n}\r\n\r\nfunc (b CrimsonPlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b CrimsonPlanks) New(props BlockProperties) Block {\r\n\treturn CrimsonPlanks{}\r\n}"
  },
  {
    "path": "server/world/block/crimsonPressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonPressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b CrimsonPressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonPressurePlate) New(props BlockProperties) Block {\r\n\treturn CrimsonPressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonRoots.go",
    "content": "package block\r\n\r\ntype CrimsonRoots struct {\r\n}\r\n\r\nfunc (b CrimsonRoots) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_roots\", BlockProperties{}\r\n}\r\n\r\nfunc (b CrimsonRoots) New(props BlockProperties) Block {\r\n\treturn CrimsonRoots{}\r\n}"
  },
  {
    "path": "server/world/block/crimsonSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonSign struct {\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CrimsonSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_sign\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonSign) New(props BlockProperties) Block {\r\n\treturn CrimsonSign{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CrimsonSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonSlab) New(props BlockProperties) Block {\r\n\treturn CrimsonSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b CrimsonStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonStairs) New(props BlockProperties) Block {\r\n\treturn CrimsonStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonStem.go",
    "content": "package block\r\n\r\ntype CrimsonStem struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b CrimsonStem) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_stem\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonStem) New(props BlockProperties) Block {\r\n\treturn CrimsonStem{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonTrapdoor struct {\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b CrimsonTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_trapdoor\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonTrapdoor) New(props BlockProperties) Block {\r\n\treturn CrimsonTrapdoor{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonWallHangingSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CrimsonWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_wall_hanging_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonWallHangingSign) New(props BlockProperties) Block {\r\n\treturn CrimsonWallHangingSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/crimsonWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CrimsonWallSign struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b CrimsonWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crimson_wall_sign\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b CrimsonWallSign) New(props BlockProperties) Block {\r\n\treturn CrimsonWallSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cryingObsidian.go",
    "content": "package block\r\n\r\ntype CryingObsidian struct {\r\n}\r\n\r\nfunc (b CryingObsidian) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:crying_obsidian\", BlockProperties{}\r\n}\r\n\r\nfunc (b CryingObsidian) New(props BlockProperties) Block {\r\n\treturn CryingObsidian{}\r\n}"
  },
  {
    "path": "server/world/block/cutCopper.go",
    "content": "package block\r\n\r\ntype CutCopper struct {\r\n}\r\n\r\nfunc (b CutCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cut_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b CutCopper) New(props BlockProperties) Block {\r\n\treturn CutCopper{}\r\n}"
  },
  {
    "path": "server/world/block/cutCopperSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CutCopperSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CutCopperSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cut_copper_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b CutCopperSlab) New(props BlockProperties) Block {\r\n\treturn CutCopperSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cutCopperStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CutCopperStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CutCopperStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cut_copper_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CutCopperStairs) New(props BlockProperties) Block {\r\n\treturn CutCopperStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cutRedSandstone.go",
    "content": "package block\r\n\r\ntype CutRedSandstone struct {\r\n}\r\n\r\nfunc (b CutRedSandstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cut_red_sandstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b CutRedSandstone) New(props BlockProperties) Block {\r\n\treturn CutRedSandstone{}\r\n}"
  },
  {
    "path": "server/world/block/cutRedSandstoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CutRedSandstoneSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CutRedSandstoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cut_red_sandstone_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CutRedSandstoneSlab) New(props BlockProperties) Block {\r\n\treturn CutRedSandstoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cutSandstone.go",
    "content": "package block\r\n\r\ntype CutSandstone struct {\r\n}\r\n\r\nfunc (b CutSandstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cut_sandstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b CutSandstone) New(props BlockProperties) Block {\r\n\treturn CutSandstone{}\r\n}"
  },
  {
    "path": "server/world/block/cutSandstoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CutSandstoneSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CutSandstoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cut_sandstone_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b CutSandstoneSlab) New(props BlockProperties) Block {\r\n\treturn CutSandstoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cyanBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CyanBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b CyanBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b CyanBanner) New(props BlockProperties) Block {\r\n\treturn CyanBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cyanBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CyanBed struct {\r\n\tOccupied bool\r\n\tPart string\r\n\tFacing string\r\n}\r\n\r\nfunc (b CyanBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_bed\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t}\r\n}\r\n\r\nfunc (b CyanBed) New(props BlockProperties) Block {\r\n\treturn CyanBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cyanCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CyanCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b CyanCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b CyanCandle) New(props BlockProperties) Block {\r\n\treturn CyanCandle{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cyanCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CyanCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b CyanCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b CyanCandleCake) New(props BlockProperties) Block {\r\n\treturn CyanCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cyanCarpet.go",
    "content": "package block\r\n\r\ntype CyanCarpet struct {\r\n}\r\n\r\nfunc (b CyanCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b CyanCarpet) New(props BlockProperties) Block {\r\n\treturn CyanCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/cyanConcrete.go",
    "content": "package block\r\n\r\ntype CyanConcrete struct {\r\n}\r\n\r\nfunc (b CyanConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b CyanConcrete) New(props BlockProperties) Block {\r\n\treturn CyanConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/cyanConcretePowder.go",
    "content": "package block\r\n\r\ntype CyanConcretePowder struct {\r\n}\r\n\r\nfunc (b CyanConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b CyanConcretePowder) New(props BlockProperties) Block {\r\n\treturn CyanConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/cyanGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype CyanGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b CyanGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b CyanGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn CyanGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cyanShulkerBox.go",
    "content": "package block\r\n\r\ntype CyanShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b CyanShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b CyanShulkerBox) New(props BlockProperties) Block {\r\n\treturn CyanShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cyanStainedGlass.go",
    "content": "package block\r\n\r\ntype CyanStainedGlass struct {\r\n}\r\n\r\nfunc (b CyanStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b CyanStainedGlass) New(props BlockProperties) Block {\r\n\treturn CyanStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/cyanStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype CyanStainedGlassPane struct {\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n}\r\n\r\nfunc (b CyanStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_stained_glass_pane\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t}\r\n}\r\n\r\nfunc (b CyanStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn CyanStainedGlassPane{\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cyanTerracotta.go",
    "content": "package block\r\n\r\ntype CyanTerracotta struct {\r\n}\r\n\r\nfunc (b CyanTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b CyanTerracotta) New(props BlockProperties) Block {\r\n\treturn CyanTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/cyanWallBanner.go",
    "content": "package block\r\n\r\ntype CyanWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b CyanWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b CyanWallBanner) New(props BlockProperties) Block {\r\n\treturn CyanWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/cyanWool.go",
    "content": "package block\r\n\r\ntype CyanWool struct {\r\n}\r\n\r\nfunc (b CyanWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:cyan_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b CyanWool) New(props BlockProperties) Block {\r\n\treturn CyanWool{}\r\n}"
  },
  {
    "path": "server/world/block/damagedAnvil.go",
    "content": "package block\r\n\r\ntype DamagedAnvil struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b DamagedAnvil) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:damaged_anvil\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b DamagedAnvil) New(props BlockProperties) Block {\r\n\treturn DamagedAnvil{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/dandelion.go",
    "content": "package block\r\n\r\ntype Dandelion struct {\r\n}\r\n\r\nfunc (b Dandelion) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dandelion\", BlockProperties{}\r\n}\r\n\r\nfunc (b Dandelion) New(props BlockProperties) Block {\r\n\treturn Dandelion{}\r\n}"
  },
  {
    "path": "server/world/block/darkOakButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakButton struct {\r\n\tPowered bool\r\n\tFace string\r\n\tFacing string\r\n}\r\n\r\nfunc (b DarkOakButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_button\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakButton) New(props BlockProperties) Block {\r\n\treturn DarkOakButton{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakDoor struct {\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b DarkOakDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_door\", BlockProperties{\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakDoor) New(props BlockProperties) Block {\r\n\treturn DarkOakDoor{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakFence struct {\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n}\r\n\r\nfunc (b DarkOakFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_fence\", BlockProperties{\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakFence) New(props BlockProperties) Block {\r\n\treturn DarkOakFence{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakFenceGate struct {\r\n\tPowered bool\r\n\tFacing string\r\n\tInWall bool\r\n\tOpen bool\r\n}\r\n\r\nfunc (b DarkOakFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_fence_gate\", BlockProperties{\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakFenceGate) New(props BlockProperties) Block {\r\n\treturn DarkOakFenceGate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakHangingSign struct {\r\n\tAttached bool\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DarkOakHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_hanging_sign\", BlockProperties{\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakHangingSign) New(props BlockProperties) Block {\r\n\treturn DarkOakHangingSign{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakLeaves.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakLeaves struct {\r\n\tDistance int\r\n\tPersistent bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DarkOakLeaves) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_leaves\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t\t\"persistent\": strconv.FormatBool(b.Persistent),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakLeaves) New(props BlockProperties) Block {\r\n\treturn DarkOakLeaves{\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t\tPersistent: props[\"persistent\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakLog.go",
    "content": "package block\r\n\r\ntype DarkOakLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b DarkOakLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakLog) New(props BlockProperties) Block {\r\n\treturn DarkOakLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakPlanks.go",
    "content": "package block\r\n\r\ntype DarkOakPlanks struct {\r\n}\r\n\r\nfunc (b DarkOakPlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b DarkOakPlanks) New(props BlockProperties) Block {\r\n\treturn DarkOakPlanks{}\r\n}"
  },
  {
    "path": "server/world/block/darkOakPressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakPressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b DarkOakPressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakPressurePlate) New(props BlockProperties) Block {\r\n\treturn DarkOakPressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakSapling.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakSapling struct {\r\n\tStage int\r\n}\r\n\r\nfunc (b DarkOakSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_sapling\", BlockProperties{\r\n\t\t\"stage\": strconv.Itoa(b.Stage),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakSapling) New(props BlockProperties) Block {\r\n\treturn DarkOakSapling{\r\n\t\tStage: atoi(props[\"stage\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakSign struct {\r\n\tWaterlogged bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b DarkOakSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_sign\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakSign) New(props BlockProperties) Block {\r\n\treturn DarkOakSign{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakSlab struct {\r\n\tWaterlogged bool\r\n\tType string\r\n}\r\n\r\nfunc (b DarkOakSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakSlab) New(props BlockProperties) Block {\r\n\treturn DarkOakSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DarkOakStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakStairs) New(props BlockProperties) Block {\r\n\treturn DarkOakStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakTrapdoor struct {\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b DarkOakTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_trapdoor\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakTrapdoor) New(props BlockProperties) Block {\r\n\treturn DarkOakTrapdoor{\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakWallHangingSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DarkOakWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_wall_hanging_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakWallHangingSign) New(props BlockProperties) Block {\r\n\treturn DarkOakWallHangingSign{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkOakWallSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DarkOakWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_wall_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakWallSign) New(props BlockProperties) Block {\r\n\treturn DarkOakWallSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkOakWood.go",
    "content": "package block\r\n\r\ntype DarkOakWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b DarkOakWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_oak_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b DarkOakWood) New(props BlockProperties) Block {\r\n\treturn DarkOakWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkPrismarine.go",
    "content": "package block\r\n\r\ntype DarkPrismarine struct {\r\n}\r\n\r\nfunc (b DarkPrismarine) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_prismarine\", BlockProperties{}\r\n}\r\n\r\nfunc (b DarkPrismarine) New(props BlockProperties) Block {\r\n\treturn DarkPrismarine{}\r\n}"
  },
  {
    "path": "server/world/block/darkPrismarineSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkPrismarineSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DarkPrismarineSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_prismarine_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DarkPrismarineSlab) New(props BlockProperties) Block {\r\n\treturn DarkPrismarineSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/darkPrismarineStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DarkPrismarineStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DarkPrismarineStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dark_prismarine_stairs\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b DarkPrismarineStairs) New(props BlockProperties) Block {\r\n\treturn DarkPrismarineStairs{\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/daylightDetector.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype DaylightDetector struct {\r\n\tPower int\r\n\tInverted bool\r\n}\r\n\r\nfunc (b DaylightDetector) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:daylight_detector\", BlockProperties{\r\n\t\t\"inverted\": strconv.FormatBool(b.Inverted),\r\n\t\t\"power\": strconv.Itoa(b.Power),\r\n\t}\r\n}\r\n\r\nfunc (b DaylightDetector) New(props BlockProperties) Block {\r\n\treturn DaylightDetector{\r\n\t\tInverted: props[\"inverted\"] != \"false\",\r\n\t\tPower: atoi(props[\"power\"]),\r\n\t}\r\n}\r\n\r\nfunc (b DaylightDetector) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:daylight_detector\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadBrainCoral.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadBrainCoral struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadBrainCoral) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_brain_coral\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadBrainCoral) New(props BlockProperties) Block {\r\n\treturn DeadBrainCoral{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadBrainCoralBlock.go",
    "content": "package block\r\n\r\ntype DeadBrainCoralBlock struct {\r\n}\r\n\r\nfunc (b DeadBrainCoralBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_brain_coral_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeadBrainCoralBlock) New(props BlockProperties) Block {\r\n\treturn DeadBrainCoralBlock{}\r\n}"
  },
  {
    "path": "server/world/block/deadBrainCoralFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadBrainCoralFan struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadBrainCoralFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_brain_coral_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadBrainCoralFan) New(props BlockProperties) Block {\r\n\treturn DeadBrainCoralFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadBrainCoralWallFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadBrainCoralWallFan struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadBrainCoralWallFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_brain_coral_wall_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b DeadBrainCoralWallFan) New(props BlockProperties) Block {\r\n\treturn DeadBrainCoralWallFan{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadBubbleCoral.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadBubbleCoral struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadBubbleCoral) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_bubble_coral\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadBubbleCoral) New(props BlockProperties) Block {\r\n\treturn DeadBubbleCoral{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadBubbleCoralBlock.go",
    "content": "package block\r\n\r\ntype DeadBubbleCoralBlock struct {\r\n}\r\n\r\nfunc (b DeadBubbleCoralBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_bubble_coral_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeadBubbleCoralBlock) New(props BlockProperties) Block {\r\n\treturn DeadBubbleCoralBlock{}\r\n}"
  },
  {
    "path": "server/world/block/deadBubbleCoralFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadBubbleCoralFan struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadBubbleCoralFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_bubble_coral_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadBubbleCoralFan) New(props BlockProperties) Block {\r\n\treturn DeadBubbleCoralFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadBubbleCoralWallFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadBubbleCoralWallFan struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadBubbleCoralWallFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_bubble_coral_wall_fan\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadBubbleCoralWallFan) New(props BlockProperties) Block {\r\n\treturn DeadBubbleCoralWallFan{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadBush.go",
    "content": "package block\r\n\r\ntype DeadBush struct {\r\n}\r\n\r\nfunc (b DeadBush) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_bush\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeadBush) New(props BlockProperties) Block {\r\n\treturn DeadBush{}\r\n}"
  },
  {
    "path": "server/world/block/deadFireCoral.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadFireCoral struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadFireCoral) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_fire_coral\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadFireCoral) New(props BlockProperties) Block {\r\n\treturn DeadFireCoral{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadFireCoralBlock.go",
    "content": "package block\r\n\r\ntype DeadFireCoralBlock struct {\r\n}\r\n\r\nfunc (b DeadFireCoralBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_fire_coral_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeadFireCoralBlock) New(props BlockProperties) Block {\r\n\treturn DeadFireCoralBlock{}\r\n}"
  },
  {
    "path": "server/world/block/deadFireCoralFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadFireCoralFan struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadFireCoralFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_fire_coral_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadFireCoralFan) New(props BlockProperties) Block {\r\n\treturn DeadFireCoralFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadFireCoralWallFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadFireCoralWallFan struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadFireCoralWallFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_fire_coral_wall_fan\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadFireCoralWallFan) New(props BlockProperties) Block {\r\n\treturn DeadFireCoralWallFan{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadHornCoral.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadHornCoral struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadHornCoral) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_horn_coral\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadHornCoral) New(props BlockProperties) Block {\r\n\treturn DeadHornCoral{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadHornCoralBlock.go",
    "content": "package block\r\n\r\ntype DeadHornCoralBlock struct {\r\n}\r\n\r\nfunc (b DeadHornCoralBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_horn_coral_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeadHornCoralBlock) New(props BlockProperties) Block {\r\n\treturn DeadHornCoralBlock{}\r\n}"
  },
  {
    "path": "server/world/block/deadHornCoralFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadHornCoralFan struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadHornCoralFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_horn_coral_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadHornCoralFan) New(props BlockProperties) Block {\r\n\treturn DeadHornCoralFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadHornCoralWallFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadHornCoralWallFan struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadHornCoralWallFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_horn_coral_wall_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b DeadHornCoralWallFan) New(props BlockProperties) Block {\r\n\treturn DeadHornCoralWallFan{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadTubeCoral.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadTubeCoral struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadTubeCoral) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_tube_coral\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadTubeCoral) New(props BlockProperties) Block {\r\n\treturn DeadTubeCoral{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadTubeCoralBlock.go",
    "content": "package block\r\n\r\ntype DeadTubeCoralBlock struct {\r\n}\r\n\r\nfunc (b DeadTubeCoralBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_tube_coral_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeadTubeCoralBlock) New(props BlockProperties) Block {\r\n\treturn DeadTubeCoralBlock{}\r\n}"
  },
  {
    "path": "server/world/block/deadTubeCoralFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadTubeCoralFan struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadTubeCoralFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_tube_coral_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadTubeCoralFan) New(props BlockProperties) Block {\r\n\treturn DeadTubeCoralFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deadTubeCoralWallFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeadTubeCoralWallFan struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeadTubeCoralWallFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dead_tube_coral_wall_fan\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeadTubeCoralWallFan) New(props BlockProperties) Block {\r\n\treturn DeadTubeCoralWallFan{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/decoratedPot.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype DecoratedPot struct {\r\n\tCracked bool\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DecoratedPot) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:decorated_pot\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"cracked\": strconv.FormatBool(b.Cracked),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b DecoratedPot) New(props BlockProperties) Block {\r\n\treturn DecoratedPot{\r\n\t\tCracked: props[\"cracked\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b DecoratedPot) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:decorated_pot\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deepslate.go",
    "content": "package block\r\n\r\ntype Deepslate struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b Deepslate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b Deepslate) New(props BlockProperties) Block {\r\n\treturn Deepslate{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}\r\n"
  },
  {
    "path": "server/world/block/deepslateBrickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeepslateBrickSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeepslateBrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_brick_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeepslateBrickSlab) New(props BlockProperties) Block {\r\n\treturn DeepslateBrickSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deepslateBrickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeepslateBrickStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeepslateBrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_brick_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeepslateBrickStairs) New(props BlockProperties) Block {\r\n\treturn DeepslateBrickStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deepslateBrickWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeepslateBrickWall struct {\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n}\r\n\r\nfunc (b DeepslateBrickWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_brick_wall\", BlockProperties{\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeepslateBrickWall) New(props BlockProperties) Block {\r\n\treturn DeepslateBrickWall{\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deepslateBricks.go",
    "content": "package block\r\n\r\ntype DeepslateBricks struct {\r\n}\r\n\r\nfunc (b DeepslateBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeepslateBricks) New(props BlockProperties) Block {\r\n\treturn DeepslateBricks{}\r\n}"
  },
  {
    "path": "server/world/block/deepslateCoalOre.go",
    "content": "package block\r\n\r\ntype DeepslateCoalOre struct {\r\n}\r\n\r\nfunc (b DeepslateCoalOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_coal_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeepslateCoalOre) New(props BlockProperties) Block {\r\n\treturn DeepslateCoalOre{}\r\n}"
  },
  {
    "path": "server/world/block/deepslateCopperOre.go",
    "content": "package block\r\n\r\ntype DeepslateCopperOre struct {\r\n}\r\n\r\nfunc (b DeepslateCopperOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_copper_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeepslateCopperOre) New(props BlockProperties) Block {\r\n\treturn DeepslateCopperOre{}\r\n}"
  },
  {
    "path": "server/world/block/deepslateDiamondOre.go",
    "content": "package block\r\n\r\ntype DeepslateDiamondOre struct {\r\n}\r\n\r\nfunc (b DeepslateDiamondOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_diamond_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeepslateDiamondOre) New(props BlockProperties) Block {\r\n\treturn DeepslateDiamondOre{}\r\n}"
  },
  {
    "path": "server/world/block/deepslateEmeraldOre.go",
    "content": "package block\r\n\r\ntype DeepslateEmeraldOre struct {\r\n}\r\n\r\nfunc (b DeepslateEmeraldOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_emerald_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeepslateEmeraldOre) New(props BlockProperties) Block {\r\n\treturn DeepslateEmeraldOre{}\r\n}"
  },
  {
    "path": "server/world/block/deepslateGoldOre.go",
    "content": "package block\r\n\r\ntype DeepslateGoldOre struct {\r\n}\r\n\r\nfunc (b DeepslateGoldOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_gold_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeepslateGoldOre) New(props BlockProperties) Block {\r\n\treturn DeepslateGoldOre{}\r\n}"
  },
  {
    "path": "server/world/block/deepslateIronOre.go",
    "content": "package block\r\n\r\ntype DeepslateIronOre struct {\r\n}\r\n\r\nfunc (b DeepslateIronOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_iron_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeepslateIronOre) New(props BlockProperties) Block {\r\n\treturn DeepslateIronOre{}\r\n}"
  },
  {
    "path": "server/world/block/deepslateLapisOre.go",
    "content": "package block\r\n\r\ntype DeepslateLapisOre struct {\r\n}\r\n\r\nfunc (b DeepslateLapisOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_lapis_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeepslateLapisOre) New(props BlockProperties) Block {\r\n\treturn DeepslateLapisOre{}\r\n}"
  },
  {
    "path": "server/world/block/deepslateRedstoneOre.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeepslateRedstoneOre struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b DeepslateRedstoneOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_redstone_ore\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b DeepslateRedstoneOre) New(props BlockProperties) Block {\r\n\treturn DeepslateRedstoneOre{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deepslateTileSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeepslateTileSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeepslateTileSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_tile_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DeepslateTileSlab) New(props BlockProperties) Block {\r\n\treturn DeepslateTileSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deepslateTileStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeepslateTileStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeepslateTileStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_tile_stairs\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t}\r\n}\r\n\r\nfunc (b DeepslateTileStairs) New(props BlockProperties) Block {\r\n\treturn DeepslateTileStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deepslateTileWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DeepslateTileWall struct {\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DeepslateTileWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_tile_wall\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t}\r\n}\r\n\r\nfunc (b DeepslateTileWall) New(props BlockProperties) Block {\r\n\treturn DeepslateTileWall{\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/deepslateTiles.go",
    "content": "package block\r\n\r\ntype DeepslateTiles struct {\r\n}\r\n\r\nfunc (b DeepslateTiles) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:deepslate_tiles\", BlockProperties{}\r\n}\r\n\r\nfunc (b DeepslateTiles) New(props BlockProperties) Block {\r\n\treturn DeepslateTiles{}\r\n}"
  },
  {
    "path": "server/world/block/detectorRail.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DetectorRail struct {\r\n\tPowered bool\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DetectorRail) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:detector_rail\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DetectorRail) New(props BlockProperties) Block {\r\n\treturn DetectorRail{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/diamondBlock.go",
    "content": "package block\r\n\r\ntype DiamondBlock struct {\r\n}\r\n\r\nfunc (b DiamondBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:diamond_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b DiamondBlock) New(props BlockProperties) Block {\r\n\treturn DiamondBlock{}\r\n}"
  },
  {
    "path": "server/world/block/diamondOre.go",
    "content": "package block\r\n\r\ntype DiamondOre struct {\r\n}\r\n\r\nfunc (b DiamondOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:diamond_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b DiamondOre) New(props BlockProperties) Block {\r\n\treturn DiamondOre{}\r\n}"
  },
  {
    "path": "server/world/block/diorite.go",
    "content": "package block\r\n\r\ntype Diorite struct {\r\n}\r\n\r\nfunc (b Diorite) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:diorite\", BlockProperties{}\r\n}\r\n\r\nfunc (b Diorite) New(props BlockProperties) Block {\r\n\treturn Diorite{}\r\n}"
  },
  {
    "path": "server/world/block/dioriteSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DioriteSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DioriteSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:diorite_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DioriteSlab) New(props BlockProperties) Block {\r\n\treturn DioriteSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/dioriteStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DioriteStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b DioriteStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:diorite_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b DioriteStairs) New(props BlockProperties) Block {\r\n\treturn DioriteStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/dioriteWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DioriteWall struct {\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n}\r\n\r\nfunc (b DioriteWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:diorite_wall\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t}\r\n}\r\n\r\nfunc (b DioriteWall) New(props BlockProperties) Block {\r\n\treturn DioriteWall{\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/dirt.go",
    "content": "package block\r\n\r\ntype Dirt struct {\r\n}\r\n\r\nfunc (b Dirt) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dirt\", BlockProperties{}\r\n}\r\n\r\nfunc (b Dirt) New(props BlockProperties) Block {\r\n\treturn Dirt{}\r\n}"
  },
  {
    "path": "server/world/block/dirtPath.go",
    "content": "package block\r\n\r\ntype DirtPath struct {\r\n}\r\n\r\nfunc (b DirtPath) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dirt_path\", BlockProperties{}\r\n}\r\n\r\nfunc (b DirtPath) New(props BlockProperties) Block {\r\n\treturn DirtPath{}\r\n}"
  },
  {
    "path": "server/world/block/dispenser.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Dispenser struct {\r\n\tFacing string\r\n\tTriggered bool\r\n}\r\n\r\nfunc (b Dispenser) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dispenser\", BlockProperties{\r\n\t\t\"triggered\": strconv.FormatBool(b.Triggered),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Dispenser) New(props BlockProperties) Block {\r\n\treturn Dispenser{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tTriggered: props[\"triggered\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b Dispenser) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:dispenser\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/dragonEgg.go",
    "content": "package block\r\n\r\ntype DragonEgg struct {\r\n}\r\n\r\nfunc (b DragonEgg) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dragon_egg\", BlockProperties{}\r\n}\r\n\r\nfunc (b DragonEgg) New(props BlockProperties) Block {\r\n\treturn DragonEgg{}\r\n}"
  },
  {
    "path": "server/world/block/dragonHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DragonHead struct {\r\n\tPowered bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b DragonHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dragon_head\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b DragonHead) New(props BlockProperties) Block {\r\n\treturn DragonHead{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/dragonWallHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype DragonWallHead struct {\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b DragonWallHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dragon_wall_head\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b DragonWallHead) New(props BlockProperties) Block {\r\n\treturn DragonWallHead{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/driedKelpBlock.go",
    "content": "package block\r\n\r\ntype DriedKelpBlock struct {\r\n}\r\n\r\nfunc (b DriedKelpBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dried_kelp_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b DriedKelpBlock) New(props BlockProperties) Block {\r\n\treturn DriedKelpBlock{}\r\n}"
  },
  {
    "path": "server/world/block/dripstoneBlock.go",
    "content": "package block\r\n\r\ntype DripstoneBlock struct {\r\n}\r\n\r\nfunc (b DripstoneBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dripstone_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b DripstoneBlock) New(props BlockProperties) Block {\r\n\treturn DripstoneBlock{}\r\n}"
  },
  {
    "path": "server/world/block/dropper.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Dropper struct {\r\n\tFacing string\r\n\tTriggered bool\r\n}\r\n\r\nfunc (b Dropper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:dropper\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"triggered\": strconv.FormatBool(b.Triggered),\r\n\t}\r\n}\r\n\r\nfunc (b Dropper) New(props BlockProperties) Block {\r\n\treturn Dropper{\r\n\t\tTriggered: props[\"triggered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}\r\n\r\nfunc (b Dropper) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:dropper\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/emeraldBlock.go",
    "content": "package block\r\n\r\ntype EmeraldBlock struct {\r\n}\r\n\r\nfunc (b EmeraldBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:emerald_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b EmeraldBlock) New(props BlockProperties) Block {\r\n\treturn EmeraldBlock{}\r\n}"
  },
  {
    "path": "server/world/block/emeraldOre.go",
    "content": "package block\r\n\r\ntype EmeraldOre struct {\r\n}\r\n\r\nfunc (b EmeraldOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:emerald_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b EmeraldOre) New(props BlockProperties) Block {\r\n\treturn EmeraldOre{}\r\n}"
  },
  {
    "path": "server/world/block/enchantingTable.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype EnchantingTable struct {\r\n}\r\n\r\nfunc (b EnchantingTable) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:enchanting_table\", BlockProperties{}\r\n}\r\n\r\nfunc (b EnchantingTable) New(props BlockProperties) Block {\r\n\treturn EnchantingTable{}\r\n}\r\n\r\nfunc (b EnchantingTable) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:enchanting_table\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/endGateway.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype EndGateway struct {\r\n}\r\n\r\nfunc (b EndGateway) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:end_gateway\", BlockProperties{}\r\n}\r\n\r\nfunc (b EndGateway) New(props BlockProperties) Block {\r\n\treturn EndGateway{}\r\n}\r\n\r\nfunc (b EndGateway) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:end_gateway\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/endPortal.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype EndPortal struct {\r\n}\r\n\r\nfunc (b EndPortal) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:end_portal\", BlockProperties{}\r\n}\r\n\r\nfunc (b EndPortal) New(props BlockProperties) Block {\r\n\treturn EndPortal{}\r\n}\r\n\r\nfunc (b EndPortal) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:end_portal\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/endPortalFrame.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype EndPortalFrame struct {\r\n\tEye bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b EndPortalFrame) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:end_portal_frame\", BlockProperties{\r\n\t\t\"eye\": strconv.FormatBool(b.Eye),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b EndPortalFrame) New(props BlockProperties) Block {\r\n\treturn EndPortalFrame{\r\n\t\tEye: props[\"eye\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/endRod.go",
    "content": "package block\r\n\r\ntype EndRod struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b EndRod) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:end_rod\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b EndRod) New(props BlockProperties) Block {\r\n\treturn EndRod{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/endStone.go",
    "content": "package block\r\n\r\ntype EndStone struct {\r\n}\r\n\r\nfunc (b EndStone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:end_stone\", BlockProperties{}\r\n}\r\n\r\nfunc (b EndStone) New(props BlockProperties) Block {\r\n\treturn EndStone{}\r\n}"
  },
  {
    "path": "server/world/block/endStoneBrickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype EndStoneBrickSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b EndStoneBrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:end_stone_brick_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b EndStoneBrickSlab) New(props BlockProperties) Block {\r\n\treturn EndStoneBrickSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/endStoneBrickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype EndStoneBrickStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b EndStoneBrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:end_stone_brick_stairs\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t}\r\n}\r\n\r\nfunc (b EndStoneBrickStairs) New(props BlockProperties) Block {\r\n\treturn EndStoneBrickStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/endStoneBrickWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype EndStoneBrickWall struct {\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b EndStoneBrickWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:end_stone_brick_wall\", BlockProperties{\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t}\r\n}\r\n\r\nfunc (b EndStoneBrickWall) New(props BlockProperties) Block {\r\n\treturn EndStoneBrickWall{\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/endStoneBricks.go",
    "content": "package block\r\n\r\ntype EndStoneBricks struct {\r\n}\r\n\r\nfunc (b EndStoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:end_stone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b EndStoneBricks) New(props BlockProperties) Block {\r\n\treturn EndStoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/enderChest.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype EnderChest struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b EnderChest) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:ender_chest\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b EnderChest) New(props BlockProperties) Block {\r\n\treturn EnderChest{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}\r\n\r\nfunc (b EnderChest) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:ender_chest\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/exposedChiseledCopper.go",
    "content": "package block\r\n\r\ntype ExposedChiseledCopper struct {\r\n}\r\n\r\nfunc (b ExposedChiseledCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:exposed_chiseled_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b ExposedChiseledCopper) New(props BlockProperties) Block {\r\n\treturn ExposedChiseledCopper{}\r\n}"
  },
  {
    "path": "server/world/block/exposedCopper.go",
    "content": "package block\r\n\r\ntype ExposedCopper struct {\r\n}\r\n\r\nfunc (b ExposedCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:exposed_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b ExposedCopper) New(props BlockProperties) Block {\r\n\treturn ExposedCopper{}\r\n}"
  },
  {
    "path": "server/world/block/exposedCopperBulb.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ExposedCopperBulb struct {\r\n\tPowered bool\r\n\tLit bool\r\n}\r\n\r\nfunc (b ExposedCopperBulb) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:exposed_copper_bulb\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b ExposedCopperBulb) New(props BlockProperties) Block {\r\n\treturn ExposedCopperBulb{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/exposedCopperDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ExposedCopperDoor struct {\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b ExposedCopperDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:exposed_copper_door\", BlockProperties{\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b ExposedCopperDoor) New(props BlockProperties) Block {\r\n\treturn ExposedCopperDoor{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/exposedCopperGrate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ExposedCopperGrate struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b ExposedCopperGrate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:exposed_copper_grate\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b ExposedCopperGrate) New(props BlockProperties) Block {\r\n\treturn ExposedCopperGrate{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/exposedCopperTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ExposedCopperTrapdoor struct {\r\n\tPowered bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n}\r\n\r\nfunc (b ExposedCopperTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:exposed_copper_trapdoor\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b ExposedCopperTrapdoor) New(props BlockProperties) Block {\r\n\treturn ExposedCopperTrapdoor{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/exposedCutCopper.go",
    "content": "package block\r\n\r\ntype ExposedCutCopper struct {\r\n}\r\n\r\nfunc (b ExposedCutCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:exposed_cut_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b ExposedCutCopper) New(props BlockProperties) Block {\r\n\treturn ExposedCutCopper{}\r\n}"
  },
  {
    "path": "server/world/block/exposedCutCopperSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ExposedCutCopperSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b ExposedCutCopperSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:exposed_cut_copper_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b ExposedCutCopperSlab) New(props BlockProperties) Block {\r\n\treturn ExposedCutCopperSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/exposedCutCopperStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ExposedCutCopperStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b ExposedCutCopperStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:exposed_cut_copper_stairs\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t}\r\n}\r\n\r\nfunc (b ExposedCutCopperStairs) New(props BlockProperties) Block {\r\n\treturn ExposedCutCopperStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/farmland.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Farmland struct {\r\n\tMoisture int\r\n}\r\n\r\nfunc (b Farmland) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:farmland\", BlockProperties{\r\n\t\t\"moisture\": strconv.Itoa(b.Moisture),\r\n\t}\r\n}\r\n\r\nfunc (b Farmland) New(props BlockProperties) Block {\r\n\treturn Farmland{\r\n\t\tMoisture: atoi(props[\"moisture\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/fern.go",
    "content": "package block\r\n\r\ntype Fern struct {\r\n}\r\n\r\nfunc (b Fern) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:fern\", BlockProperties{}\r\n}\r\n\r\nfunc (b Fern) New(props BlockProperties) Block {\r\n\treturn Fern{}\r\n}"
  },
  {
    "path": "server/world/block/fire.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Fire struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tUp bool\r\n\tWest bool\r\n\tAge int\r\n}\r\n\r\nfunc (b Fire) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:fire\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t}\r\n}\r\n\r\nfunc (b Fire) New(props BlockProperties) Block {\r\n\treturn Fire{\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/fireCoral.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype FireCoral struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b FireCoral) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:fire_coral\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b FireCoral) New(props BlockProperties) Block {\r\n\treturn FireCoral{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/fireCoralBlock.go",
    "content": "package block\r\n\r\ntype FireCoralBlock struct {\r\n}\r\n\r\nfunc (b FireCoralBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:fire_coral_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b FireCoralBlock) New(props BlockProperties) Block {\r\n\treturn FireCoralBlock{}\r\n}"
  },
  {
    "path": "server/world/block/fireCoralFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype FireCoralFan struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b FireCoralFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:fire_coral_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b FireCoralFan) New(props BlockProperties) Block {\r\n\treturn FireCoralFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/fireCoralWallFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype FireCoralWallFan struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b FireCoralWallFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:fire_coral_wall_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b FireCoralWallFan) New(props BlockProperties) Block {\r\n\treturn FireCoralWallFan{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/fletchingTable.go",
    "content": "package block\r\n\r\ntype FletchingTable struct {\r\n}\r\n\r\nfunc (b FletchingTable) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:fletching_table\", BlockProperties{}\r\n}\r\n\r\nfunc (b FletchingTable) New(props BlockProperties) Block {\r\n\treturn FletchingTable{}\r\n}"
  },
  {
    "path": "server/world/block/flowerPot.go",
    "content": "package block\r\n\r\ntype FlowerPot struct {\r\n}\r\n\r\nfunc (b FlowerPot) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:flower_pot\", BlockProperties{}\r\n}\r\n\r\nfunc (b FlowerPot) New(props BlockProperties) Block {\r\n\treturn FlowerPot{}\r\n}"
  },
  {
    "path": "server/world/block/floweringAzalea.go",
    "content": "package block\r\n\r\ntype FloweringAzalea struct {\r\n}\r\n\r\nfunc (b FloweringAzalea) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:flowering_azalea\", BlockProperties{}\r\n}\r\n\r\nfunc (b FloweringAzalea) New(props BlockProperties) Block {\r\n\treturn FloweringAzalea{}\r\n}"
  },
  {
    "path": "server/world/block/floweringAzaleaLeaves.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype FloweringAzaleaLeaves struct {\r\n\tDistance int\r\n\tPersistent bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b FloweringAzaleaLeaves) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:flowering_azalea_leaves\", BlockProperties{\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t\t\"persistent\": strconv.FormatBool(b.Persistent),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b FloweringAzaleaLeaves) New(props BlockProperties) Block {\r\n\treturn FloweringAzaleaLeaves{\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t\tPersistent: props[\"persistent\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/frogspawn.go",
    "content": "package block\r\n\r\ntype Frogspawn struct {\r\n}\r\n\r\nfunc (b Frogspawn) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:frogspawn\", BlockProperties{}\r\n}\r\n\r\nfunc (b Frogspawn) New(props BlockProperties) Block {\r\n\treturn Frogspawn{}\r\n}"
  },
  {
    "path": "server/world/block/frostedIce.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype FrostedIce struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b FrostedIce) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:frosted_ice\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b FrostedIce) New(props BlockProperties) Block {\r\n\treturn FrostedIce{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/furnace.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Furnace struct {\r\n\tFacing string\r\n\tLit bool\r\n}\r\n\r\nfunc (b Furnace) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:furnace\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b Furnace) New(props BlockProperties) Block {\r\n\treturn Furnace{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b Furnace) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:furnace\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/gildedBlackstone.go",
    "content": "package block\r\n\r\ntype GildedBlackstone struct {\r\n}\r\n\r\nfunc (b GildedBlackstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gilded_blackstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b GildedBlackstone) New(props BlockProperties) Block {\r\n\treturn GildedBlackstone{}\r\n}"
  },
  {
    "path": "server/world/block/glass.go",
    "content": "package block\r\n\r\ntype Glass struct {\r\n}\r\n\r\nfunc (b Glass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b Glass) New(props BlockProperties) Block {\r\n\treturn Glass{}\r\n}"
  },
  {
    "path": "server/world/block/glassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GlassPane struct {\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n}\r\n\r\nfunc (b GlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:glass_pane\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t}\r\n}\r\n\r\nfunc (b GlassPane) New(props BlockProperties) Block {\r\n\treturn GlassPane{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/glowLichen.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GlowLichen struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tDown bool\r\n}\r\n\r\nfunc (b GlowLichen) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:glow_lichen\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"down\": strconv.FormatBool(b.Down),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t}\r\n}\r\n\r\nfunc (b GlowLichen) New(props BlockProperties) Block {\r\n\treturn GlowLichen{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tDown: props[\"down\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/glowstone.go",
    "content": "package block\r\n\r\ntype Glowstone struct {\r\n}\r\n\r\nfunc (b Glowstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:glowstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b Glowstone) New(props BlockProperties) Block {\r\n\treturn Glowstone{}\r\n}"
  },
  {
    "path": "server/world/block/goldBlock.go",
    "content": "package block\r\n\r\ntype GoldBlock struct {\r\n}\r\n\r\nfunc (b GoldBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gold_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b GoldBlock) New(props BlockProperties) Block {\r\n\treturn GoldBlock{}\r\n}"
  },
  {
    "path": "server/world/block/goldOre.go",
    "content": "package block\r\n\r\ntype GoldOre struct {\r\n}\r\n\r\nfunc (b GoldOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gold_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b GoldOre) New(props BlockProperties) Block {\r\n\treturn GoldOre{}\r\n}"
  },
  {
    "path": "server/world/block/granite.go",
    "content": "package block\r\n\r\ntype Granite struct {\r\n}\r\n\r\nfunc (b Granite) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:granite\", BlockProperties{}\r\n}\r\n\r\nfunc (b Granite) New(props BlockProperties) Block {\r\n\treturn Granite{}\r\n}"
  },
  {
    "path": "server/world/block/graniteSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GraniteSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b GraniteSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:granite_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b GraniteSlab) New(props BlockProperties) Block {\r\n\treturn GraniteSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/graniteStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GraniteStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b GraniteStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:granite_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b GraniteStairs) New(props BlockProperties) Block {\r\n\treturn GraniteStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/graniteWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GraniteWall struct {\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b GraniteWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:granite_wall\", BlockProperties{\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b GraniteWall) New(props BlockProperties) Block {\r\n\treturn GraniteWall{\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/grassBlock.go",
    "content": "package block\n\nimport (\n\t\"strconv\"\n)\n\ntype GrassBlock struct {\n\tSnowy bool\n}\n\nfunc (g GrassBlock) Encode() (string, BlockProperties) {\n\treturn \"minecraft:grass_block\", BlockProperties{\n\t\t\"snowy\": strconv.FormatBool(g.Snowy),\n\t}\n}\n\nfunc (g GrassBlock) New(props BlockProperties) Block {\n\treturn GrassBlock{Snowy: props[\"snowy\"] == \"true\"}\n}\n\n/*func (g GrassBlock) PlaceSound(pos pos.BlockPosition) *play.SoundEffect {\n\treturn session.SoundEffect(\"minecraft:block.grass.place\", false, nil, play.SoundCategoryBlock, pos.X(), pos.Y(), pos.Z(), 1, 1)\n}\n*/\n"
  },
  {
    "path": "server/world/block/gravel.go",
    "content": "package block\r\n\r\ntype Gravel struct {\r\n}\r\n\r\nfunc (b Gravel) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gravel\", BlockProperties{}\r\n}\r\n\r\nfunc (b Gravel) New(props BlockProperties) Block {\r\n\treturn Gravel{}\r\n}"
  },
  {
    "path": "server/world/block/grayBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GrayBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b GrayBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b GrayBanner) New(props BlockProperties) Block {\r\n\treturn GrayBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/grayBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GrayBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b GrayBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_bed\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t}\r\n}\r\n\r\nfunc (b GrayBed) New(props BlockProperties) Block {\r\n\treturn GrayBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/grayCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GrayCandle struct {\r\n\tLit bool\r\n\tWaterlogged bool\r\n\tCandles int\r\n}\r\n\r\nfunc (b GrayCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b GrayCandle) New(props BlockProperties) Block {\r\n\treturn GrayCandle{\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/grayCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GrayCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b GrayCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b GrayCandleCake) New(props BlockProperties) Block {\r\n\treturn GrayCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/grayCarpet.go",
    "content": "package block\r\n\r\ntype GrayCarpet struct {\r\n}\r\n\r\nfunc (b GrayCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b GrayCarpet) New(props BlockProperties) Block {\r\n\treturn GrayCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/grayConcrete.go",
    "content": "package block\r\n\r\ntype GrayConcrete struct {\r\n}\r\n\r\nfunc (b GrayConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b GrayConcrete) New(props BlockProperties) Block {\r\n\treturn GrayConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/grayConcretePowder.go",
    "content": "package block\r\n\r\ntype GrayConcretePowder struct {\r\n}\r\n\r\nfunc (b GrayConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b GrayConcretePowder) New(props BlockProperties) Block {\r\n\treturn GrayConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/grayGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype GrayGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b GrayGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b GrayGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn GrayGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/grayShulkerBox.go",
    "content": "package block\r\n\r\ntype GrayShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b GrayShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b GrayShulkerBox) New(props BlockProperties) Block {\r\n\treturn GrayShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/grayStainedGlass.go",
    "content": "package block\r\n\r\ntype GrayStainedGlass struct {\r\n}\r\n\r\nfunc (b GrayStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b GrayStainedGlass) New(props BlockProperties) Block {\r\n\treturn GrayStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/grayStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GrayStainedGlassPane struct {\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b GrayStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_stained_glass_pane\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t}\r\n}\r\n\r\nfunc (b GrayStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn GrayStainedGlassPane{\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/grayTerracotta.go",
    "content": "package block\r\n\r\ntype GrayTerracotta struct {\r\n}\r\n\r\nfunc (b GrayTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b GrayTerracotta) New(props BlockProperties) Block {\r\n\treturn GrayTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/grayWallBanner.go",
    "content": "package block\r\n\r\ntype GrayWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b GrayWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b GrayWallBanner) New(props BlockProperties) Block {\r\n\treturn GrayWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/grayWool.go",
    "content": "package block\r\n\r\ntype GrayWool struct {\r\n}\r\n\r\nfunc (b GrayWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:gray_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b GrayWool) New(props BlockProperties) Block {\r\n\treturn GrayWool{}\r\n}"
  },
  {
    "path": "server/world/block/greenBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GreenBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b GreenBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b GreenBanner) New(props BlockProperties) Block {\r\n\treturn GreenBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/greenBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GreenBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b GreenBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_bed\", BlockProperties{\r\n\t\t\"part\": b.Part,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t}\r\n}\r\n\r\nfunc (b GreenBed) New(props BlockProperties) Block {\r\n\treturn GreenBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/greenCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GreenCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b GreenCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_candle\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t}\r\n}\r\n\r\nfunc (b GreenCandle) New(props BlockProperties) Block {\r\n\treturn GreenCandle{\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/greenCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GreenCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b GreenCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b GreenCandleCake) New(props BlockProperties) Block {\r\n\treturn GreenCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/greenCarpet.go",
    "content": "package block\r\n\r\ntype GreenCarpet struct {\r\n}\r\n\r\nfunc (b GreenCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b GreenCarpet) New(props BlockProperties) Block {\r\n\treturn GreenCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/greenConcrete.go",
    "content": "package block\r\n\r\ntype GreenConcrete struct {\r\n}\r\n\r\nfunc (b GreenConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b GreenConcrete) New(props BlockProperties) Block {\r\n\treturn GreenConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/greenConcretePowder.go",
    "content": "package block\r\n\r\ntype GreenConcretePowder struct {\r\n}\r\n\r\nfunc (b GreenConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b GreenConcretePowder) New(props BlockProperties) Block {\r\n\treturn GreenConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/greenGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype GreenGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b GreenGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b GreenGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn GreenGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/greenShulkerBox.go",
    "content": "package block\r\n\r\ntype GreenShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b GreenShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b GreenShulkerBox) New(props BlockProperties) Block {\r\n\treturn GreenShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/greenStainedGlass.go",
    "content": "package block\r\n\r\ntype GreenStainedGlass struct {\r\n}\r\n\r\nfunc (b GreenStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b GreenStainedGlass) New(props BlockProperties) Block {\r\n\treturn GreenStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/greenStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype GreenStainedGlassPane struct {\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n}\r\n\r\nfunc (b GreenStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_stained_glass_pane\", BlockProperties{\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t}\r\n}\r\n\r\nfunc (b GreenStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn GreenStainedGlassPane{\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/greenTerracotta.go",
    "content": "package block\r\n\r\ntype GreenTerracotta struct {\r\n}\r\n\r\nfunc (b GreenTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b GreenTerracotta) New(props BlockProperties) Block {\r\n\treturn GreenTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/greenWallBanner.go",
    "content": "package block\r\n\r\ntype GreenWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b GreenWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b GreenWallBanner) New(props BlockProperties) Block {\r\n\treturn GreenWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/greenWool.go",
    "content": "package block\r\n\r\ntype GreenWool struct {\r\n}\r\n\r\nfunc (b GreenWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:green_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b GreenWool) New(props BlockProperties) Block {\r\n\treturn GreenWool{}\r\n}"
  },
  {
    "path": "server/world/block/grindstone.go",
    "content": "package block\r\n\r\ntype Grindstone struct {\r\n\tFace string\r\n\tFacing string\r\n}\r\n\r\nfunc (b Grindstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:grindstone\", BlockProperties{\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Grindstone) New(props BlockProperties) Block {\r\n\treturn Grindstone{\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/hangingRoots.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype HangingRoots struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b HangingRoots) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:hanging_roots\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b HangingRoots) New(props BlockProperties) Block {\r\n\treturn HangingRoots{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/hayBlock.go",
    "content": "package block\r\n\r\ntype HayBlock struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b HayBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:hay_block\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b HayBlock) New(props BlockProperties) Block {\r\n\treturn HayBlock{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/heavyCore.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype HeavyCore struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b HeavyCore) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:heavy_core\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b HeavyCore) New(props BlockProperties) Block {\r\n\treturn HeavyCore{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/heavyWeightedPressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype HeavyWeightedPressurePlate struct {\r\n\tPower int\r\n}\r\n\r\nfunc (b HeavyWeightedPressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:heavy_weighted_pressure_plate\", BlockProperties{\r\n\t\t\"power\": strconv.Itoa(b.Power),\r\n\t}\r\n}\r\n\r\nfunc (b HeavyWeightedPressurePlate) New(props BlockProperties) Block {\r\n\treturn HeavyWeightedPressurePlate{\r\n\t\tPower: atoi(props[\"power\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/honeyBlock.go",
    "content": "package block\r\n\r\ntype HoneyBlock struct {\r\n}\r\n\r\nfunc (b HoneyBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:honey_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b HoneyBlock) New(props BlockProperties) Block {\r\n\treturn HoneyBlock{}\r\n}"
  },
  {
    "path": "server/world/block/honeycombBlock.go",
    "content": "package block\r\n\r\ntype HoneycombBlock struct {\r\n}\r\n\r\nfunc (b HoneycombBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:honeycomb_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b HoneycombBlock) New(props BlockProperties) Block {\r\n\treturn HoneycombBlock{}\r\n}"
  },
  {
    "path": "server/world/block/hopper.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Hopper struct {\r\n\tEnabled bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b Hopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:hopper\", BlockProperties{\r\n\t\t\"enabled\": strconv.FormatBool(b.Enabled),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Hopper) New(props BlockProperties) Block {\r\n\treturn Hopper{\r\n\t\tEnabled: props[\"enabled\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}\r\n\r\nfunc (b Hopper) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:hopper\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/hornCoral.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype HornCoral struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b HornCoral) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:horn_coral\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b HornCoral) New(props BlockProperties) Block {\r\n\treturn HornCoral{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/hornCoralBlock.go",
    "content": "package block\r\n\r\ntype HornCoralBlock struct {\r\n}\r\n\r\nfunc (b HornCoralBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:horn_coral_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b HornCoralBlock) New(props BlockProperties) Block {\r\n\treturn HornCoralBlock{}\r\n}"
  },
  {
    "path": "server/world/block/hornCoralFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype HornCoralFan struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b HornCoralFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:horn_coral_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b HornCoralFan) New(props BlockProperties) Block {\r\n\treturn HornCoralFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/hornCoralWallFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype HornCoralWallFan struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b HornCoralWallFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:horn_coral_wall_fan\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b HornCoralWallFan) New(props BlockProperties) Block {\r\n\treturn HornCoralWallFan{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/ice.go",
    "content": "package block\r\n\r\ntype Ice struct {\r\n}\r\n\r\nfunc (b Ice) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:ice\", BlockProperties{}\r\n}\r\n\r\nfunc (b Ice) New(props BlockProperties) Block {\r\n\treturn Ice{}\r\n}"
  },
  {
    "path": "server/world/block/infestedChiseledStoneBricks.go",
    "content": "package block\r\n\r\ntype InfestedChiseledStoneBricks struct {\r\n}\r\n\r\nfunc (b InfestedChiseledStoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:infested_chiseled_stone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b InfestedChiseledStoneBricks) New(props BlockProperties) Block {\r\n\treturn InfestedChiseledStoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/infestedCobblestone.go",
    "content": "package block\r\n\r\ntype InfestedCobblestone struct {\r\n}\r\n\r\nfunc (b InfestedCobblestone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:infested_cobblestone\", BlockProperties{}\r\n}\r\n\r\nfunc (b InfestedCobblestone) New(props BlockProperties) Block {\r\n\treturn InfestedCobblestone{}\r\n}"
  },
  {
    "path": "server/world/block/infestedCrackedStoneBricks.go",
    "content": "package block\r\n\r\ntype InfestedCrackedStoneBricks struct {\r\n}\r\n\r\nfunc (b InfestedCrackedStoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:infested_cracked_stone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b InfestedCrackedStoneBricks) New(props BlockProperties) Block {\r\n\treturn InfestedCrackedStoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/infestedDeepslate.go",
    "content": "package block\r\n\r\ntype InfestedDeepslate struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b InfestedDeepslate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:infested_deepslate\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b InfestedDeepslate) New(props BlockProperties) Block {\r\n\treturn InfestedDeepslate{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/infestedMossyStoneBricks.go",
    "content": "package block\r\n\r\ntype InfestedMossyStoneBricks struct {\r\n}\r\n\r\nfunc (b InfestedMossyStoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:infested_mossy_stone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b InfestedMossyStoneBricks) New(props BlockProperties) Block {\r\n\treturn InfestedMossyStoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/infestedStone.go",
    "content": "package block\r\n\r\ntype InfestedStone struct {\r\n}\r\n\r\nfunc (b InfestedStone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:infested_stone\", BlockProperties{}\r\n}\r\n\r\nfunc (b InfestedStone) New(props BlockProperties) Block {\r\n\treturn InfestedStone{}\r\n}"
  },
  {
    "path": "server/world/block/infestedStoneBricks.go",
    "content": "package block\r\n\r\ntype InfestedStoneBricks struct {\r\n}\r\n\r\nfunc (b InfestedStoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:infested_stone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b InfestedStoneBricks) New(props BlockProperties) Block {\r\n\treturn InfestedStoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/ironBars.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype IronBars struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b IronBars) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:iron_bars\", BlockProperties{\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t}\r\n}\r\n\r\nfunc (b IronBars) New(props BlockProperties) Block {\r\n\treturn IronBars{\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/ironBlock.go",
    "content": "package block\r\n\r\ntype IronBlock struct {\r\n}\r\n\r\nfunc (b IronBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:iron_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b IronBlock) New(props BlockProperties) Block {\r\n\treturn IronBlock{}\r\n}"
  },
  {
    "path": "server/world/block/ironDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype IronDoor struct {\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b IronDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:iron_door\", BlockProperties{\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t}\r\n}\r\n\r\nfunc (b IronDoor) New(props BlockProperties) Block {\r\n\treturn IronDoor{\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/ironOre.go",
    "content": "package block\r\n\r\ntype IronOre struct {\r\n}\r\n\r\nfunc (b IronOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:iron_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b IronOre) New(props BlockProperties) Block {\r\n\treturn IronOre{}\r\n}"
  },
  {
    "path": "server/world/block/ironTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype IronTrapdoor struct {\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b IronTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:iron_trapdoor\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b IronTrapdoor) New(props BlockProperties) Block {\r\n\treturn IronTrapdoor{\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jackOLantern.go",
    "content": "package block\r\n\r\ntype JackOLantern struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b JackOLantern) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jack_o_lantern\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b JackOLantern) New(props BlockProperties) Block {\r\n\treturn JackOLantern{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jigsaw.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Jigsaw struct {\r\n\tOrientation string\r\n}\r\n\r\nfunc (b Jigsaw) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jigsaw\", BlockProperties{\r\n\t\t\"orientation\": b.Orientation,\r\n\t}\r\n}\r\n\r\nfunc (b Jigsaw) New(props BlockProperties) Block {\r\n\treturn Jigsaw{\r\n\t\tOrientation: props[\"orientation\"],\r\n\t}\r\n}\r\n\r\nfunc (b Jigsaw) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:jigsaw\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jukebox.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Jukebox struct {\r\n\tHasRecord bool\r\n}\r\n\r\nfunc (b Jukebox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jukebox\", BlockProperties{\r\n\t\t\"has_record\": strconv.FormatBool(b.HasRecord),\r\n\t}\r\n}\r\n\r\nfunc (b Jukebox) New(props BlockProperties) Block {\r\n\treturn Jukebox{\r\n\t\tHasRecord: props[\"has_record\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b Jukebox) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:jukebox\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleButton struct {\r\n\tFace string\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b JungleButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_button\", BlockProperties{\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b JungleButton) New(props BlockProperties) Block {\r\n\treturn JungleButton{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleDoor struct {\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b JungleDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_door\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b JungleDoor) New(props BlockProperties) Block {\r\n\treturn JungleDoor{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleFence struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b JungleFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_fence\", BlockProperties{\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t}\r\n}\r\n\r\nfunc (b JungleFence) New(props BlockProperties) Block {\r\n\treturn JungleFence{\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleFenceGate struct {\r\n\tFacing string\r\n\tInWall bool\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b JungleFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_fence_gate\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b JungleFenceGate) New(props BlockProperties) Block {\r\n\treturn JungleFenceGate{\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleHangingSign struct {\r\n\tRotation int\r\n\tWaterlogged bool\r\n\tAttached bool\r\n}\r\n\r\nfunc (b JungleHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_hanging_sign\", BlockProperties{\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b JungleHangingSign) New(props BlockProperties) Block {\r\n\treturn JungleHangingSign{\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleLeaves.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleLeaves struct {\r\n\tDistance int\r\n\tPersistent bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b JungleLeaves) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_leaves\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t\t\"persistent\": strconv.FormatBool(b.Persistent),\r\n\t}\r\n}\r\n\r\nfunc (b JungleLeaves) New(props BlockProperties) Block {\r\n\treturn JungleLeaves{\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t\tPersistent: props[\"persistent\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleLog.go",
    "content": "package block\r\n\r\ntype JungleLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b JungleLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b JungleLog) New(props BlockProperties) Block {\r\n\treturn JungleLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/junglePlanks.go",
    "content": "package block\r\n\r\ntype JunglePlanks struct {\r\n}\r\n\r\nfunc (b JunglePlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b JunglePlanks) New(props BlockProperties) Block {\r\n\treturn JunglePlanks{}\r\n}"
  },
  {
    "path": "server/world/block/junglePressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JunglePressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b JunglePressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b JunglePressurePlate) New(props BlockProperties) Block {\r\n\treturn JunglePressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleSapling.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleSapling struct {\r\n\tStage int\r\n}\r\n\r\nfunc (b JungleSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_sapling\", BlockProperties{\r\n\t\t\"stage\": strconv.Itoa(b.Stage),\r\n\t}\r\n}\r\n\r\nfunc (b JungleSapling) New(props BlockProperties) Block {\r\n\treturn JungleSapling{\r\n\t\tStage: atoi(props[\"stage\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleSign struct {\r\n\tWaterlogged bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b JungleSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_sign\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b JungleSign) New(props BlockProperties) Block {\r\n\treturn JungleSign{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b JungleSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b JungleSlab) New(props BlockProperties) Block {\r\n\treturn JungleSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b JungleStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b JungleStairs) New(props BlockProperties) Block {\r\n\treturn JungleStairs{\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleTrapdoor struct {\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b JungleTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_trapdoor\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b JungleTrapdoor) New(props BlockProperties) Block {\r\n\treturn JungleTrapdoor{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleWallHangingSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b JungleWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_wall_hanging_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b JungleWallHangingSign) New(props BlockProperties) Block {\r\n\treturn JungleWallHangingSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype JungleWallSign struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b JungleWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_wall_sign\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b JungleWallSign) New(props BlockProperties) Block {\r\n\treturn JungleWallSign{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/jungleWood.go",
    "content": "package block\r\n\r\ntype JungleWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b JungleWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:jungle_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b JungleWood) New(props BlockProperties) Block {\r\n\treturn JungleWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/kelp.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Kelp struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b Kelp) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:kelp\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b Kelp) New(props BlockProperties) Block {\r\n\treturn Kelp{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/kelpPlant.go",
    "content": "package block\r\n\r\ntype KelpPlant struct {\r\n}\r\n\r\nfunc (b KelpPlant) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:kelp_plant\", BlockProperties{}\r\n}\r\n\r\nfunc (b KelpPlant) New(props BlockProperties) Block {\r\n\treturn KelpPlant{}\r\n}"
  },
  {
    "path": "server/world/block/ladder.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Ladder struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b Ladder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:ladder\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b Ladder) New(props BlockProperties) Block {\r\n\treturn Ladder{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lantern.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Lantern struct {\r\n\tHanging bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b Lantern) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lantern\", BlockProperties{\r\n\t\t\"hanging\": strconv.FormatBool(b.Hanging),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b Lantern) New(props BlockProperties) Block {\r\n\treturn Lantern{\r\n\t\tHanging: props[\"hanging\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lapisBlock.go",
    "content": "package block\r\n\r\ntype LapisBlock struct {\r\n}\r\n\r\nfunc (b LapisBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lapis_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b LapisBlock) New(props BlockProperties) Block {\r\n\treturn LapisBlock{}\r\n}"
  },
  {
    "path": "server/world/block/lapisOre.go",
    "content": "package block\r\n\r\ntype LapisOre struct {\r\n}\r\n\r\nfunc (b LapisOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lapis_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b LapisOre) New(props BlockProperties) Block {\r\n\treturn LapisOre{}\r\n}"
  },
  {
    "path": "server/world/block/largeAmethystBud.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LargeAmethystBud struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b LargeAmethystBud) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:large_amethyst_bud\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b LargeAmethystBud) New(props BlockProperties) Block {\r\n\treturn LargeAmethystBud{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/largeFern.go",
    "content": "package block\r\n\r\ntype LargeFern struct {\r\n\tHalf string\r\n}\r\n\r\nfunc (b LargeFern) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:large_fern\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b LargeFern) New(props BlockProperties) Block {\r\n\treturn LargeFern{\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lava.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Lava struct {\r\n\tLevel int\r\n}\r\n\r\nfunc (b Lava) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lava\", BlockProperties{\r\n\t\t\"level\": strconv.Itoa(b.Level),\r\n\t}\r\n}\r\n\r\nfunc (b Lava) New(props BlockProperties) Block {\r\n\treturn Lava{\r\n\t\tLevel: atoi(props[\"level\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lavaCauldron.go",
    "content": "package block\r\n\r\ntype LavaCauldron struct {\r\n}\r\n\r\nfunc (b LavaCauldron) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lava_cauldron\", BlockProperties{}\r\n}\r\n\r\nfunc (b LavaCauldron) New(props BlockProperties) Block {\r\n\treturn LavaCauldron{}\r\n}"
  },
  {
    "path": "server/world/block/lectern.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Lectern struct {\r\n\tHasBook bool\r\n\tPowered bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b Lectern) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lectern\", BlockProperties{\r\n\t\t\"has_book\": strconv.FormatBool(b.HasBook),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Lectern) New(props BlockProperties) Block {\r\n\treturn Lectern{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHasBook: props[\"has_book\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b Lectern) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:lectern\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lever.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Lever struct {\r\n\tFace string\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b Lever) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lever\", BlockProperties{\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b Lever) New(props BlockProperties) Block {\r\n\treturn Lever{\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/light.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Light struct {\r\n\tWaterlogged bool\r\n\tLevel int\r\n}\r\n\r\nfunc (b Light) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"level\": strconv.Itoa(b.Level),\r\n\t}\r\n}\r\n\r\nfunc (b Light) New(props BlockProperties) Block {\r\n\treturn Light{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tLevel: atoi(props[\"level\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightBlueBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b LightBlueBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b LightBlueBanner) New(props BlockProperties) Block {\r\n\treturn LightBlueBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightBlueBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b LightBlueBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_bed\", BlockProperties{\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b LightBlueBed) New(props BlockProperties) Block {\r\n\treturn LightBlueBed{\r\n\t\tPart: props[\"part\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightBlueCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b LightBlueCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b LightBlueCandle) New(props BlockProperties) Block {\r\n\treturn LightBlueCandle{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightBlueCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b LightBlueCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b LightBlueCandleCake) New(props BlockProperties) Block {\r\n\treturn LightBlueCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueCarpet.go",
    "content": "package block\r\n\r\ntype LightBlueCarpet struct {\r\n}\r\n\r\nfunc (b LightBlueCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightBlueCarpet) New(props BlockProperties) Block {\r\n\treturn LightBlueCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueConcrete.go",
    "content": "package block\r\n\r\ntype LightBlueConcrete struct {\r\n}\r\n\r\nfunc (b LightBlueConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightBlueConcrete) New(props BlockProperties) Block {\r\n\treturn LightBlueConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueConcretePowder.go",
    "content": "package block\r\n\r\ntype LightBlueConcretePowder struct {\r\n}\r\n\r\nfunc (b LightBlueConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightBlueConcretePowder) New(props BlockProperties) Block {\r\n\treturn LightBlueConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype LightBlueGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b LightBlueGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b LightBlueGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn LightBlueGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueShulkerBox.go",
    "content": "package block\r\n\r\ntype LightBlueShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b LightBlueShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b LightBlueShulkerBox) New(props BlockProperties) Block {\r\n\treturn LightBlueShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueStainedGlass.go",
    "content": "package block\r\n\r\ntype LightBlueStainedGlass struct {\r\n}\r\n\r\nfunc (b LightBlueStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightBlueStainedGlass) New(props BlockProperties) Block {\r\n\treturn LightBlueStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightBlueStainedGlassPane struct {\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n}\r\n\r\nfunc (b LightBlueStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_stained_glass_pane\", BlockProperties{\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t}\r\n}\r\n\r\nfunc (b LightBlueStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn LightBlueStainedGlassPane{\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueTerracotta.go",
    "content": "package block\r\n\r\ntype LightBlueTerracotta struct {\r\n}\r\n\r\nfunc (b LightBlueTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightBlueTerracotta) New(props BlockProperties) Block {\r\n\treturn LightBlueTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueWallBanner.go",
    "content": "package block\r\n\r\ntype LightBlueWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b LightBlueWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b LightBlueWallBanner) New(props BlockProperties) Block {\r\n\treturn LightBlueWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightBlueWool.go",
    "content": "package block\r\n\r\ntype LightBlueWool struct {\r\n}\r\n\r\nfunc (b LightBlueWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_blue_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightBlueWool) New(props BlockProperties) Block {\r\n\treturn LightBlueWool{}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightGrayBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b LightGrayBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b LightGrayBanner) New(props BlockProperties) Block {\r\n\treturn LightGrayBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightGrayBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b LightGrayBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_bed\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t}\r\n}\r\n\r\nfunc (b LightGrayBed) New(props BlockProperties) Block {\r\n\treturn LightGrayBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightGrayCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b LightGrayCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b LightGrayCandle) New(props BlockProperties) Block {\r\n\treturn LightGrayCandle{\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightGrayCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b LightGrayCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b LightGrayCandleCake) New(props BlockProperties) Block {\r\n\treturn LightGrayCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayCarpet.go",
    "content": "package block\r\n\r\ntype LightGrayCarpet struct {\r\n}\r\n\r\nfunc (b LightGrayCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightGrayCarpet) New(props BlockProperties) Block {\r\n\treturn LightGrayCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayConcrete.go",
    "content": "package block\r\n\r\ntype LightGrayConcrete struct {\r\n}\r\n\r\nfunc (b LightGrayConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightGrayConcrete) New(props BlockProperties) Block {\r\n\treturn LightGrayConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayConcretePowder.go",
    "content": "package block\r\n\r\ntype LightGrayConcretePowder struct {\r\n}\r\n\r\nfunc (b LightGrayConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightGrayConcretePowder) New(props BlockProperties) Block {\r\n\treturn LightGrayConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype LightGrayGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b LightGrayGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b LightGrayGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn LightGrayGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayShulkerBox.go",
    "content": "package block\r\n\r\ntype LightGrayShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b LightGrayShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b LightGrayShulkerBox) New(props BlockProperties) Block {\r\n\treturn LightGrayShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayStainedGlass.go",
    "content": "package block\r\n\r\ntype LightGrayStainedGlass struct {\r\n}\r\n\r\nfunc (b LightGrayStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightGrayStainedGlass) New(props BlockProperties) Block {\r\n\treturn LightGrayStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightGrayStainedGlassPane struct {\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n}\r\n\r\nfunc (b LightGrayStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_stained_glass_pane\", BlockProperties{\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t}\r\n}\r\n\r\nfunc (b LightGrayStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn LightGrayStainedGlassPane{\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayTerracotta.go",
    "content": "package block\r\n\r\ntype LightGrayTerracotta struct {\r\n}\r\n\r\nfunc (b LightGrayTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightGrayTerracotta) New(props BlockProperties) Block {\r\n\treturn LightGrayTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayWallBanner.go",
    "content": "package block\r\n\r\ntype LightGrayWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b LightGrayWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b LightGrayWallBanner) New(props BlockProperties) Block {\r\n\treturn LightGrayWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightGrayWool.go",
    "content": "package block\r\n\r\ntype LightGrayWool struct {\r\n}\r\n\r\nfunc (b LightGrayWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_gray_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b LightGrayWool) New(props BlockProperties) Block {\r\n\treturn LightGrayWool{}\r\n}"
  },
  {
    "path": "server/world/block/lightWeightedPressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightWeightedPressurePlate struct {\r\n\tPower int\r\n}\r\n\r\nfunc (b LightWeightedPressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:light_weighted_pressure_plate\", BlockProperties{\r\n\t\t\"power\": strconv.Itoa(b.Power),\r\n\t}\r\n}\r\n\r\nfunc (b LightWeightedPressurePlate) New(props BlockProperties) Block {\r\n\treturn LightWeightedPressurePlate{\r\n\t\tPower: atoi(props[\"power\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lightningRod.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LightningRod struct {\r\n\tFacing string\r\n\tPowered bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b LightningRod) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lightning_rod\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b LightningRod) New(props BlockProperties) Block {\r\n\treturn LightningRod{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lilac.go",
    "content": "package block\r\n\r\ntype Lilac struct {\r\n\tHalf string\r\n}\r\n\r\nfunc (b Lilac) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lilac\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b Lilac) New(props BlockProperties) Block {\r\n\treturn Lilac{\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/lilyOfTheValley.go",
    "content": "package block\r\n\r\ntype LilyOfTheValley struct {\r\n}\r\n\r\nfunc (b LilyOfTheValley) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lily_of_the_valley\", BlockProperties{}\r\n}\r\n\r\nfunc (b LilyOfTheValley) New(props BlockProperties) Block {\r\n\treturn LilyOfTheValley{}\r\n}"
  },
  {
    "path": "server/world/block/lilyPad.go",
    "content": "package block\r\n\r\ntype LilyPad struct {\r\n}\r\n\r\nfunc (b LilyPad) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lily_pad\", BlockProperties{}\r\n}\r\n\r\nfunc (b LilyPad) New(props BlockProperties) Block {\r\n\treturn LilyPad{}\r\n}"
  },
  {
    "path": "server/world/block/limeBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LimeBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b LimeBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b LimeBanner) New(props BlockProperties) Block {\r\n\treturn LimeBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/limeBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LimeBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b LimeBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_bed\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t}\r\n}\r\n\r\nfunc (b LimeBed) New(props BlockProperties) Block {\r\n\treturn LimeBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/limeCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LimeCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b LimeCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b LimeCandle) New(props BlockProperties) Block {\r\n\treturn LimeCandle{\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/limeCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LimeCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b LimeCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b LimeCandleCake) New(props BlockProperties) Block {\r\n\treturn LimeCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/limeCarpet.go",
    "content": "package block\r\n\r\ntype LimeCarpet struct {\r\n}\r\n\r\nfunc (b LimeCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b LimeCarpet) New(props BlockProperties) Block {\r\n\treturn LimeCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/limeConcrete.go",
    "content": "package block\r\n\r\ntype LimeConcrete struct {\r\n}\r\n\r\nfunc (b LimeConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b LimeConcrete) New(props BlockProperties) Block {\r\n\treturn LimeConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/limeConcretePowder.go",
    "content": "package block\r\n\r\ntype LimeConcretePowder struct {\r\n}\r\n\r\nfunc (b LimeConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b LimeConcretePowder) New(props BlockProperties) Block {\r\n\treturn LimeConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/limeGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype LimeGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b LimeGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b LimeGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn LimeGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/limeShulkerBox.go",
    "content": "package block\r\n\r\ntype LimeShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b LimeShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b LimeShulkerBox) New(props BlockProperties) Block {\r\n\treturn LimeShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/limeStainedGlass.go",
    "content": "package block\r\n\r\ntype LimeStainedGlass struct {\r\n}\r\n\r\nfunc (b LimeStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b LimeStainedGlass) New(props BlockProperties) Block {\r\n\treturn LimeStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/limeStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype LimeStainedGlassPane struct {\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b LimeStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_stained_glass_pane\", BlockProperties{\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t}\r\n}\r\n\r\nfunc (b LimeStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn LimeStainedGlassPane{\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/limeTerracotta.go",
    "content": "package block\r\n\r\ntype LimeTerracotta struct {\r\n}\r\n\r\nfunc (b LimeTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b LimeTerracotta) New(props BlockProperties) Block {\r\n\treturn LimeTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/limeWallBanner.go",
    "content": "package block\r\n\r\ntype LimeWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b LimeWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b LimeWallBanner) New(props BlockProperties) Block {\r\n\treturn LimeWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/limeWool.go",
    "content": "package block\r\n\r\ntype LimeWool struct {\r\n}\r\n\r\nfunc (b LimeWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lime_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b LimeWool) New(props BlockProperties) Block {\r\n\treturn LimeWool{}\r\n}"
  },
  {
    "path": "server/world/block/lodestone.go",
    "content": "package block\r\n\r\ntype Lodestone struct {\r\n}\r\n\r\nfunc (b Lodestone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:lodestone\", BlockProperties{}\r\n}\r\n\r\nfunc (b Lodestone) New(props BlockProperties) Block {\r\n\treturn Lodestone{}\r\n}"
  },
  {
    "path": "server/world/block/loom.go",
    "content": "package block\r\n\r\ntype Loom struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b Loom) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:loom\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Loom) New(props BlockProperties) Block {\r\n\treturn Loom{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/magentaBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MagentaBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b MagentaBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b MagentaBanner) New(props BlockProperties) Block {\r\n\treturn MagentaBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/magentaBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MagentaBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b MagentaBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_bed\", BlockProperties{\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b MagentaBed) New(props BlockProperties) Block {\r\n\treturn MagentaBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/magentaCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MagentaCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MagentaCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_candle\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b MagentaCandle) New(props BlockProperties) Block {\r\n\treturn MagentaCandle{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/magentaCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MagentaCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b MagentaCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b MagentaCandleCake) New(props BlockProperties) Block {\r\n\treturn MagentaCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/magentaCarpet.go",
    "content": "package block\r\n\r\ntype MagentaCarpet struct {\r\n}\r\n\r\nfunc (b MagentaCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b MagentaCarpet) New(props BlockProperties) Block {\r\n\treturn MagentaCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/magentaConcrete.go",
    "content": "package block\r\n\r\ntype MagentaConcrete struct {\r\n}\r\n\r\nfunc (b MagentaConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b MagentaConcrete) New(props BlockProperties) Block {\r\n\treturn MagentaConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/magentaConcretePowder.go",
    "content": "package block\r\n\r\ntype MagentaConcretePowder struct {\r\n}\r\n\r\nfunc (b MagentaConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b MagentaConcretePowder) New(props BlockProperties) Block {\r\n\treturn MagentaConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/magentaGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype MagentaGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b MagentaGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b MagentaGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn MagentaGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/magentaShulkerBox.go",
    "content": "package block\r\n\r\ntype MagentaShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b MagentaShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b MagentaShulkerBox) New(props BlockProperties) Block {\r\n\treturn MagentaShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/magentaStainedGlass.go",
    "content": "package block\r\n\r\ntype MagentaStainedGlass struct {\r\n}\r\n\r\nfunc (b MagentaStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b MagentaStainedGlass) New(props BlockProperties) Block {\r\n\treturn MagentaStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/magentaStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MagentaStainedGlassPane struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b MagentaStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_stained_glass_pane\", BlockProperties{\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MagentaStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn MagentaStainedGlassPane{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/magentaTerracotta.go",
    "content": "package block\r\n\r\ntype MagentaTerracotta struct {\r\n}\r\n\r\nfunc (b MagentaTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b MagentaTerracotta) New(props BlockProperties) Block {\r\n\treturn MagentaTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/magentaWallBanner.go",
    "content": "package block\r\n\r\ntype MagentaWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b MagentaWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b MagentaWallBanner) New(props BlockProperties) Block {\r\n\treturn MagentaWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/magentaWool.go",
    "content": "package block\r\n\r\ntype MagentaWool struct {\r\n}\r\n\r\nfunc (b MagentaWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magenta_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b MagentaWool) New(props BlockProperties) Block {\r\n\treturn MagentaWool{}\r\n}"
  },
  {
    "path": "server/world/block/magmaBlock.go",
    "content": "package block\r\n\r\ntype MagmaBlock struct {\r\n}\r\n\r\nfunc (b MagmaBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:magma_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b MagmaBlock) New(props BlockProperties) Block {\r\n\treturn MagmaBlock{}\r\n}"
  },
  {
    "path": "server/world/block/mangroveButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveButton struct {\r\n\tFacing string\r\n\tPowered bool\r\n\tFace string\r\n}\r\n\r\nfunc (b MangroveButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_button\", BlockProperties{\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b MangroveButton) New(props BlockProperties) Block {\r\n\treturn MangroveButton{\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveDoor struct {\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n}\r\n\r\nfunc (b MangroveDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_door\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t}\r\n}\r\n\r\nfunc (b MangroveDoor) New(props BlockProperties) Block {\r\n\treturn MangroveDoor{\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveFence struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b MangroveFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_fence\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t}\r\n}\r\n\r\nfunc (b MangroveFence) New(props BlockProperties) Block {\r\n\treturn MangroveFence{\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveFenceGate struct {\r\n\tFacing string\r\n\tInWall bool\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b MangroveFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_fence_gate\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b MangroveFenceGate) New(props BlockProperties) Block {\r\n\treturn MangroveFenceGate{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveHangingSign struct {\r\n\tAttached bool\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MangroveHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_hanging_sign\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t}\r\n}\r\n\r\nfunc (b MangroveHangingSign) New(props BlockProperties) Block {\r\n\treturn MangroveHangingSign{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveLeaves.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveLeaves struct {\r\n\tDistance int\r\n\tPersistent bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MangroveLeaves) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_leaves\", BlockProperties{\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t\t\"persistent\": strconv.FormatBool(b.Persistent),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MangroveLeaves) New(props BlockProperties) Block {\r\n\treturn MangroveLeaves{\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t\tPersistent: props[\"persistent\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveLog.go",
    "content": "package block\r\n\r\ntype MangroveLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b MangroveLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b MangroveLog) New(props BlockProperties) Block {\r\n\treturn MangroveLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangrovePlanks.go",
    "content": "package block\r\n\r\ntype MangrovePlanks struct {\r\n}\r\n\r\nfunc (b MangrovePlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b MangrovePlanks) New(props BlockProperties) Block {\r\n\treturn MangrovePlanks{}\r\n}"
  },
  {
    "path": "server/world/block/mangrovePressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangrovePressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b MangrovePressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b MangrovePressurePlate) New(props BlockProperties) Block {\r\n\treturn MangrovePressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangrovePropagule.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangrovePropagule struct {\r\n\tWaterlogged bool\r\n\tAge int\r\n\tHanging bool\r\n\tStage int\r\n}\r\n\r\nfunc (b MangrovePropagule) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_propagule\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t\t\"hanging\": strconv.FormatBool(b.Hanging),\r\n\t\t\"stage\": strconv.Itoa(b.Stage),\r\n\t}\r\n}\r\n\r\nfunc (b MangrovePropagule) New(props BlockProperties) Block {\r\n\treturn MangrovePropagule{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t\tHanging: props[\"hanging\"] != \"false\",\r\n\t\tStage: atoi(props[\"stage\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveRoots.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveRoots struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MangroveRoots) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_roots\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MangroveRoots) New(props BlockProperties) Block {\r\n\treturn MangroveRoots{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveSign struct {\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MangroveSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_sign\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MangroveSign) New(props BlockProperties) Block {\r\n\treturn MangroveSign{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MangroveSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b MangroveSlab) New(props BlockProperties) Block {\r\n\treturn MangroveSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MangroveStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b MangroveStairs) New(props BlockProperties) Block {\r\n\treturn MangroveStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveTrapdoor struct {\r\n\tPowered bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n}\r\n\r\nfunc (b MangroveTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_trapdoor\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MangroveTrapdoor) New(props BlockProperties) Block {\r\n\treturn MangroveTrapdoor{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveWallHangingSign struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b MangroveWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_wall_hanging_sign\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b MangroveWallHangingSign) New(props BlockProperties) Block {\r\n\treturn MangroveWallHangingSign{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MangroveWallSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MangroveWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_wall_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MangroveWallSign) New(props BlockProperties) Block {\r\n\treturn MangroveWallSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mangroveWood.go",
    "content": "package block\r\n\r\ntype MangroveWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b MangroveWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mangrove_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b MangroveWood) New(props BlockProperties) Block {\r\n\treturn MangroveWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mediumAmethystBud.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MediumAmethystBud struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MediumAmethystBud) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:medium_amethyst_bud\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MediumAmethystBud) New(props BlockProperties) Block {\r\n\treturn MediumAmethystBud{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/melon.go",
    "content": "package block\r\n\r\ntype Melon struct {\r\n}\r\n\r\nfunc (b Melon) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:melon\", BlockProperties{}\r\n}\r\n\r\nfunc (b Melon) New(props BlockProperties) Block {\r\n\treturn Melon{}\r\n}"
  },
  {
    "path": "server/world/block/melonStem.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MelonStem struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b MelonStem) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:melon_stem\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b MelonStem) New(props BlockProperties) Block {\r\n\treturn MelonStem{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mossBlock.go",
    "content": "package block\r\n\r\ntype MossBlock struct {\r\n}\r\n\r\nfunc (b MossBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:moss_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b MossBlock) New(props BlockProperties) Block {\r\n\treturn MossBlock{}\r\n}"
  },
  {
    "path": "server/world/block/mossCarpet.go",
    "content": "package block\r\n\r\ntype MossCarpet struct {\r\n}\r\n\r\nfunc (b MossCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:moss_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b MossCarpet) New(props BlockProperties) Block {\r\n\treturn MossCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/mossyCobblestone.go",
    "content": "package block\r\n\r\ntype MossyCobblestone struct {\r\n}\r\n\r\nfunc (b MossyCobblestone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mossy_cobblestone\", BlockProperties{}\r\n}\r\n\r\nfunc (b MossyCobblestone) New(props BlockProperties) Block {\r\n\treturn MossyCobblestone{}\r\n}"
  },
  {
    "path": "server/world/block/mossyCobblestoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MossyCobblestoneSlab struct {\r\n\tWaterlogged bool\r\n\tType string\r\n}\r\n\r\nfunc (b MossyCobblestoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mossy_cobblestone_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MossyCobblestoneSlab) New(props BlockProperties) Block {\r\n\treturn MossyCobblestoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mossyCobblestoneStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MossyCobblestoneStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MossyCobblestoneStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mossy_cobblestone_stairs\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b MossyCobblestoneStairs) New(props BlockProperties) Block {\r\n\treturn MossyCobblestoneStairs{\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mossyCobblestoneWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MossyCobblestoneWall struct {\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n}\r\n\r\nfunc (b MossyCobblestoneWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mossy_cobblestone_wall\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t}\r\n}\r\n\r\nfunc (b MossyCobblestoneWall) New(props BlockProperties) Block {\r\n\treturn MossyCobblestoneWall{\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mossyStoneBrickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MossyStoneBrickSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MossyStoneBrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mossy_stone_brick_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MossyStoneBrickSlab) New(props BlockProperties) Block {\r\n\treturn MossyStoneBrickSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mossyStoneBrickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MossyStoneBrickStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b MossyStoneBrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mossy_stone_brick_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MossyStoneBrickStairs) New(props BlockProperties) Block {\r\n\treturn MossyStoneBrickStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mossyStoneBrickWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MossyStoneBrickWall struct {\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n}\r\n\r\nfunc (b MossyStoneBrickWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mossy_stone_brick_wall\", BlockProperties{\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t}\r\n}\r\n\r\nfunc (b MossyStoneBrickWall) New(props BlockProperties) Block {\r\n\treturn MossyStoneBrickWall{\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mossyStoneBricks.go",
    "content": "package block\r\n\r\ntype MossyStoneBricks struct {\r\n}\r\n\r\nfunc (b MossyStoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mossy_stone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b MossyStoneBricks) New(props BlockProperties) Block {\r\n\treturn MossyStoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/movingPiston.go",
    "content": "package block\r\n\r\ntype MovingPiston struct {\r\n\tType string\r\n\tFacing string\r\n}\r\n\r\nfunc (b MovingPiston) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:moving_piston\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b MovingPiston) New(props BlockProperties) Block {\r\n\treturn MovingPiston{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mud.go",
    "content": "package block\r\n\r\ntype Mud struct {\r\n}\r\n\r\nfunc (b Mud) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mud\", BlockProperties{}\r\n}\r\n\r\nfunc (b Mud) New(props BlockProperties) Block {\r\n\treturn Mud{}\r\n}"
  },
  {
    "path": "server/world/block/mudBrickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MudBrickSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MudBrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mud_brick_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b MudBrickSlab) New(props BlockProperties) Block {\r\n\treturn MudBrickSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mudBrickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MudBrickStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b MudBrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mud_brick_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b MudBrickStairs) New(props BlockProperties) Block {\r\n\treturn MudBrickStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mudBrickWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MudBrickWall struct {\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b MudBrickWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mud_brick_wall\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t}\r\n}\r\n\r\nfunc (b MudBrickWall) New(props BlockProperties) Block {\r\n\treturn MudBrickWall{\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mudBricks.go",
    "content": "package block\r\n\r\ntype MudBricks struct {\r\n}\r\n\r\nfunc (b MudBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mud_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b MudBricks) New(props BlockProperties) Block {\r\n\treturn MudBricks{}\r\n}"
  },
  {
    "path": "server/world/block/muddyMangroveRoots.go",
    "content": "package block\r\n\r\ntype MuddyMangroveRoots struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b MuddyMangroveRoots) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:muddy_mangrove_roots\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b MuddyMangroveRoots) New(props BlockProperties) Block {\r\n\treturn MuddyMangroveRoots{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mushroomStem.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype MushroomStem struct {\r\n\tUp bool\r\n\tWest bool\r\n\tDown bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n}\r\n\r\nfunc (b MushroomStem) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mushroom_stem\", BlockProperties{\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"down\": strconv.FormatBool(b.Down),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t}\r\n}\r\n\r\nfunc (b MushroomStem) New(props BlockProperties) Block {\r\n\treturn MushroomStem{\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tDown: props[\"down\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/mycelium.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Mycelium struct {\r\n\tSnowy bool\r\n}\r\n\r\nfunc (b Mycelium) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:mycelium\", BlockProperties{\r\n\t\t\"snowy\": strconv.FormatBool(b.Snowy),\r\n\t}\r\n}\r\n\r\nfunc (b Mycelium) New(props BlockProperties) Block {\r\n\treturn Mycelium{\r\n\t\tSnowy: props[\"snowy\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/netherBrickFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype NetherBrickFence struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b NetherBrickFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_brick_fence\", BlockProperties{\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t}\r\n}\r\n\r\nfunc (b NetherBrickFence) New(props BlockProperties) Block {\r\n\treturn NetherBrickFence{\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/netherBrickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype NetherBrickSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b NetherBrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_brick_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b NetherBrickSlab) New(props BlockProperties) Block {\r\n\treturn NetherBrickSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/netherBrickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype NetherBrickStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b NetherBrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_brick_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b NetherBrickStairs) New(props BlockProperties) Block {\r\n\treturn NetherBrickStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/netherBrickWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype NetherBrickWall struct {\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n}\r\n\r\nfunc (b NetherBrickWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_brick_wall\", BlockProperties{\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t}\r\n}\r\n\r\nfunc (b NetherBrickWall) New(props BlockProperties) Block {\r\n\treturn NetherBrickWall{\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/netherBricks.go",
    "content": "package block\r\n\r\ntype NetherBricks struct {\r\n}\r\n\r\nfunc (b NetherBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b NetherBricks) New(props BlockProperties) Block {\r\n\treturn NetherBricks{}\r\n}"
  },
  {
    "path": "server/world/block/netherGoldOre.go",
    "content": "package block\r\n\r\ntype NetherGoldOre struct {\r\n}\r\n\r\nfunc (b NetherGoldOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_gold_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b NetherGoldOre) New(props BlockProperties) Block {\r\n\treturn NetherGoldOre{}\r\n}"
  },
  {
    "path": "server/world/block/netherPortal.go",
    "content": "package block\r\n\r\ntype NetherPortal struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b NetherPortal) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_portal\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b NetherPortal) New(props BlockProperties) Block {\r\n\treturn NetherPortal{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/netherQuartzOre.go",
    "content": "package block\r\n\r\ntype NetherQuartzOre struct {\r\n}\r\n\r\nfunc (b NetherQuartzOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_quartz_ore\", BlockProperties{}\r\n}\r\n\r\nfunc (b NetherQuartzOre) New(props BlockProperties) Block {\r\n\treturn NetherQuartzOre{}\r\n}"
  },
  {
    "path": "server/world/block/netherSprouts.go",
    "content": "package block\r\n\r\ntype NetherSprouts struct {\r\n}\r\n\r\nfunc (b NetherSprouts) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_sprouts\", BlockProperties{}\r\n}\r\n\r\nfunc (b NetherSprouts) New(props BlockProperties) Block {\r\n\treturn NetherSprouts{}\r\n}"
  },
  {
    "path": "server/world/block/netherWart.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype NetherWart struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b NetherWart) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_wart\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b NetherWart) New(props BlockProperties) Block {\r\n\treturn NetherWart{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/netherWartBlock.go",
    "content": "package block\r\n\r\ntype NetherWartBlock struct {\r\n}\r\n\r\nfunc (b NetherWartBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:nether_wart_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b NetherWartBlock) New(props BlockProperties) Block {\r\n\treturn NetherWartBlock{}\r\n}"
  },
  {
    "path": "server/world/block/netheriteBlock.go",
    "content": "package block\r\n\r\ntype NetheriteBlock struct {\r\n}\r\n\r\nfunc (b NetheriteBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:netherite_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b NetheriteBlock) New(props BlockProperties) Block {\r\n\treturn NetheriteBlock{}\r\n}"
  },
  {
    "path": "server/world/block/netherrack.go",
    "content": "package block\r\n\r\ntype Netherrack struct {\r\n}\r\n\r\nfunc (b Netherrack) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:netherrack\", BlockProperties{}\r\n}\r\n\r\nfunc (b Netherrack) New(props BlockProperties) Block {\r\n\treturn Netherrack{}\r\n}"
  },
  {
    "path": "server/world/block/noteBlock.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype NoteBlock struct {\r\n\tInstrument string\r\n\tNote int\r\n\tPowered bool\r\n}\r\n\r\nfunc (b NoteBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:note_block\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"instrument\": b.Instrument,\r\n\t\t\"note\": strconv.Itoa(b.Note),\r\n\t}\r\n}\r\n\r\nfunc (b NoteBlock) New(props BlockProperties) Block {\r\n\treturn NoteBlock{\r\n\t\tNote: atoi(props[\"note\"]),\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tInstrument: props[\"instrument\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakButton struct {\r\n\tFacing string\r\n\tPowered bool\r\n\tFace string\r\n}\r\n\r\nfunc (b OakButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_button\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"face\": b.Face,\r\n\t}\r\n}\r\n\r\nfunc (b OakButton) New(props BlockProperties) Block {\r\n\treturn OakButton{\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakDoor struct {\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n}\r\n\r\nfunc (b OakDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_door\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t}\r\n}\r\n\r\nfunc (b OakDoor) New(props BlockProperties) Block {\r\n\treturn OakDoor{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakFence struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b OakFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_fence\", BlockProperties{\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t}\r\n}\r\n\r\nfunc (b OakFence) New(props BlockProperties) Block {\r\n\treturn OakFence{\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakFenceGate struct {\r\n\tInWall bool\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b OakFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_fence_gate\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b OakFenceGate) New(props BlockProperties) Block {\r\n\treturn OakFenceGate{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakHangingSign struct {\r\n\tWaterlogged bool\r\n\tAttached bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b OakHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_hanging_sign\", BlockProperties{\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b OakHangingSign) New(props BlockProperties) Block {\r\n\treturn OakHangingSign{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakLeaves.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakLeaves struct {\r\n\tPersistent bool\r\n\tWaterlogged bool\r\n\tDistance int\r\n}\r\n\r\nfunc (b OakLeaves) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_leaves\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t\t\"persistent\": strconv.FormatBool(b.Persistent),\r\n\t}\r\n}\r\n\r\nfunc (b OakLeaves) New(props BlockProperties) Block {\r\n\treturn OakLeaves{\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t\tPersistent: props[\"persistent\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakLog.go",
    "content": "package block\r\n\r\ntype OakLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b OakLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b OakLog) New(props BlockProperties) Block {\r\n\treturn OakLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakPlanks.go",
    "content": "package block\r\n\r\ntype OakPlanks struct {\r\n}\r\n\r\nfunc (b OakPlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b OakPlanks) New(props BlockProperties) Block {\r\n\treturn OakPlanks{}\r\n}"
  },
  {
    "path": "server/world/block/oakPressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakPressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b OakPressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b OakPressurePlate) New(props BlockProperties) Block {\r\n\treturn OakPressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakSapling.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakSapling struct {\r\n\tStage int\r\n}\r\n\r\nfunc (b OakSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_sapling\", BlockProperties{\r\n\t\t\"stage\": strconv.Itoa(b.Stage),\r\n\t}\r\n}\r\n\r\nfunc (b OakSapling) New(props BlockProperties) Block {\r\n\treturn OakSapling{\r\n\t\tStage: atoi(props[\"stage\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakSign struct {\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b OakSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_sign\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b OakSign) New(props BlockProperties) Block {\r\n\treturn OakSign{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b OakSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b OakSlab) New(props BlockProperties) Block {\r\n\treturn OakSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b OakStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b OakStairs) New(props BlockProperties) Block {\r\n\treturn OakStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakTrapdoor struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b OakTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_trapdoor\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b OakTrapdoor) New(props BlockProperties) Block {\r\n\treturn OakTrapdoor{\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakWallHangingSign struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b OakWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_wall_hanging_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b OakWallHangingSign) New(props BlockProperties) Block {\r\n\treturn OakWallHangingSign{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OakWallSign struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b OakWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_wall_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b OakWallSign) New(props BlockProperties) Block {\r\n\treturn OakWallSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oakWood.go",
    "content": "package block\r\n\r\ntype OakWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b OakWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oak_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b OakWood) New(props BlockProperties) Block {\r\n\treturn OakWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/observer.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Observer struct {\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b Observer) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:observer\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Observer) New(props BlockProperties) Block {\r\n\treturn Observer{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/obsidian.go",
    "content": "package block\r\n\r\ntype Obsidian struct {\r\n}\r\n\r\nfunc (b Obsidian) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:obsidian\", BlockProperties{}\r\n}\r\n\r\nfunc (b Obsidian) New(props BlockProperties) Block {\r\n\treturn Obsidian{}\r\n}"
  },
  {
    "path": "server/world/block/ochreFroglight.go",
    "content": "package block\r\n\r\ntype OchreFroglight struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b OchreFroglight) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:ochre_froglight\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b OchreFroglight) New(props BlockProperties) Block {\r\n\treturn OchreFroglight{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/orangeBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OrangeBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b OrangeBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b OrangeBanner) New(props BlockProperties) Block {\r\n\treturn OrangeBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/orangeBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OrangeBed struct {\r\n\tPart string\r\n\tFacing string\r\n\tOccupied bool\r\n}\r\n\r\nfunc (b OrangeBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_bed\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t}\r\n}\r\n\r\nfunc (b OrangeBed) New(props BlockProperties) Block {\r\n\treturn OrangeBed{\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/orangeCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OrangeCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b OrangeCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_candle\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b OrangeCandle) New(props BlockProperties) Block {\r\n\treturn OrangeCandle{\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/orangeCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OrangeCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b OrangeCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b OrangeCandleCake) New(props BlockProperties) Block {\r\n\treturn OrangeCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/orangeCarpet.go",
    "content": "package block\r\n\r\ntype OrangeCarpet struct {\r\n}\r\n\r\nfunc (b OrangeCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b OrangeCarpet) New(props BlockProperties) Block {\r\n\treturn OrangeCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/orangeConcrete.go",
    "content": "package block\r\n\r\ntype OrangeConcrete struct {\r\n}\r\n\r\nfunc (b OrangeConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b OrangeConcrete) New(props BlockProperties) Block {\r\n\treturn OrangeConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/orangeConcretePowder.go",
    "content": "package block\r\n\r\ntype OrangeConcretePowder struct {\r\n}\r\n\r\nfunc (b OrangeConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b OrangeConcretePowder) New(props BlockProperties) Block {\r\n\treturn OrangeConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/orangeGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype OrangeGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b OrangeGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b OrangeGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn OrangeGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/orangeShulkerBox.go",
    "content": "package block\r\n\r\ntype OrangeShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b OrangeShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b OrangeShulkerBox) New(props BlockProperties) Block {\r\n\treturn OrangeShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/orangeStainedGlass.go",
    "content": "package block\r\n\r\ntype OrangeStainedGlass struct {\r\n}\r\n\r\nfunc (b OrangeStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b OrangeStainedGlass) New(props BlockProperties) Block {\r\n\treturn OrangeStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/orangeStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OrangeStainedGlassPane struct {\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n}\r\n\r\nfunc (b OrangeStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_stained_glass_pane\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t}\r\n}\r\n\r\nfunc (b OrangeStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn OrangeStainedGlassPane{\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/orangeTerracotta.go",
    "content": "package block\r\n\r\ntype OrangeTerracotta struct {\r\n}\r\n\r\nfunc (b OrangeTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b OrangeTerracotta) New(props BlockProperties) Block {\r\n\treturn OrangeTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/orangeTulip.go",
    "content": "package block\r\n\r\ntype OrangeTulip struct {\r\n}\r\n\r\nfunc (b OrangeTulip) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_tulip\", BlockProperties{}\r\n}\r\n\r\nfunc (b OrangeTulip) New(props BlockProperties) Block {\r\n\treturn OrangeTulip{}\r\n}"
  },
  {
    "path": "server/world/block/orangeWallBanner.go",
    "content": "package block\r\n\r\ntype OrangeWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b OrangeWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b OrangeWallBanner) New(props BlockProperties) Block {\r\n\treturn OrangeWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/orangeWool.go",
    "content": "package block\r\n\r\ntype OrangeWool struct {\r\n}\r\n\r\nfunc (b OrangeWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:orange_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b OrangeWool) New(props BlockProperties) Block {\r\n\treturn OrangeWool{}\r\n}"
  },
  {
    "path": "server/world/block/oxeyeDaisy.go",
    "content": "package block\r\n\r\ntype OxeyeDaisy struct {\r\n}\r\n\r\nfunc (b OxeyeDaisy) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oxeye_daisy\", BlockProperties{}\r\n}\r\n\r\nfunc (b OxeyeDaisy) New(props BlockProperties) Block {\r\n\treturn OxeyeDaisy{}\r\n}"
  },
  {
    "path": "server/world/block/oxidizedChiseledCopper.go",
    "content": "package block\r\n\r\ntype OxidizedChiseledCopper struct {\r\n}\r\n\r\nfunc (b OxidizedChiseledCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oxidized_chiseled_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b OxidizedChiseledCopper) New(props BlockProperties) Block {\r\n\treturn OxidizedChiseledCopper{}\r\n}"
  },
  {
    "path": "server/world/block/oxidizedCopper.go",
    "content": "package block\r\n\r\ntype OxidizedCopper struct {\r\n}\r\n\r\nfunc (b OxidizedCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oxidized_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b OxidizedCopper) New(props BlockProperties) Block {\r\n\treturn OxidizedCopper{}\r\n}"
  },
  {
    "path": "server/world/block/oxidizedCopperBulb.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OxidizedCopperBulb struct {\r\n\tLit bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b OxidizedCopperBulb) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oxidized_copper_bulb\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b OxidizedCopperBulb) New(props BlockProperties) Block {\r\n\treturn OxidizedCopperBulb{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oxidizedCopperDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OxidizedCopperDoor struct {\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n}\r\n\r\nfunc (b OxidizedCopperDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oxidized_copper_door\", BlockProperties{\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t}\r\n}\r\n\r\nfunc (b OxidizedCopperDoor) New(props BlockProperties) Block {\r\n\treturn OxidizedCopperDoor{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oxidizedCopperGrate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OxidizedCopperGrate struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b OxidizedCopperGrate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oxidized_copper_grate\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b OxidizedCopperGrate) New(props BlockProperties) Block {\r\n\treturn OxidizedCopperGrate{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oxidizedCopperTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OxidizedCopperTrapdoor struct {\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b OxidizedCopperTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oxidized_copper_trapdoor\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b OxidizedCopperTrapdoor) New(props BlockProperties) Block {\r\n\treturn OxidizedCopperTrapdoor{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oxidizedCutCopper.go",
    "content": "package block\r\n\r\ntype OxidizedCutCopper struct {\r\n}\r\n\r\nfunc (b OxidizedCutCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oxidized_cut_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b OxidizedCutCopper) New(props BlockProperties) Block {\r\n\treturn OxidizedCutCopper{}\r\n}"
  },
  {
    "path": "server/world/block/oxidizedCutCopperSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OxidizedCutCopperSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b OxidizedCutCopperSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oxidized_cut_copper_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b OxidizedCutCopperSlab) New(props BlockProperties) Block {\r\n\treturn OxidizedCutCopperSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/oxidizedCutCopperStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype OxidizedCutCopperStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b OxidizedCutCopperStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:oxidized_cut_copper_stairs\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t}\r\n}\r\n\r\nfunc (b OxidizedCutCopperStairs) New(props BlockProperties) Block {\r\n\treturn OxidizedCutCopperStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/packedIce.go",
    "content": "package block\r\n\r\ntype PackedIce struct {\r\n}\r\n\r\nfunc (b PackedIce) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:packed_ice\", BlockProperties{}\r\n}\r\n\r\nfunc (b PackedIce) New(props BlockProperties) Block {\r\n\treturn PackedIce{}\r\n}"
  },
  {
    "path": "server/world/block/packedMud.go",
    "content": "package block\r\n\r\ntype PackedMud struct {\r\n}\r\n\r\nfunc (b PackedMud) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:packed_mud\", BlockProperties{}\r\n}\r\n\r\nfunc (b PackedMud) New(props BlockProperties) Block {\r\n\treturn PackedMud{}\r\n}"
  },
  {
    "path": "server/world/block/pearlescentFroglight.go",
    "content": "package block\r\n\r\ntype PearlescentFroglight struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b PearlescentFroglight) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pearlescent_froglight\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b PearlescentFroglight) New(props BlockProperties) Block {\r\n\treturn PearlescentFroglight{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/peony.go",
    "content": "package block\r\n\r\ntype Peony struct {\r\n\tHalf string\r\n}\r\n\r\nfunc (b Peony) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:peony\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b Peony) New(props BlockProperties) Block {\r\n\treturn Peony{\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/petrifiedOakSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PetrifiedOakSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PetrifiedOakSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:petrified_oak_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PetrifiedOakSlab) New(props BlockProperties) Block {\r\n\treturn PetrifiedOakSlab{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/piglinHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PiglinHead struct {\r\n\tPowered bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b PiglinHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:piglin_head\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b PiglinHead) New(props BlockProperties) Block {\r\n\treturn PiglinHead{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/piglinWallHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PiglinWallHead struct {\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b PiglinWallHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:piglin_wall_head\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b PiglinWallHead) New(props BlockProperties) Block {\r\n\treturn PiglinWallHead{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pinkBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PinkBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b PinkBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b PinkBanner) New(props BlockProperties) Block {\r\n\treturn PinkBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pinkBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PinkBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b PinkBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_bed\", BlockProperties{\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b PinkBed) New(props BlockProperties) Block {\r\n\treturn PinkBed{\r\n\t\tPart: props[\"part\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pinkCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PinkCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PinkCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PinkCandle) New(props BlockProperties) Block {\r\n\treturn PinkCandle{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pinkCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PinkCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b PinkCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b PinkCandleCake) New(props BlockProperties) Block {\r\n\treturn PinkCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pinkCarpet.go",
    "content": "package block\r\n\r\ntype PinkCarpet struct {\r\n}\r\n\r\nfunc (b PinkCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b PinkCarpet) New(props BlockProperties) Block {\r\n\treturn PinkCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/pinkConcrete.go",
    "content": "package block\r\n\r\ntype PinkConcrete struct {\r\n}\r\n\r\nfunc (b PinkConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b PinkConcrete) New(props BlockProperties) Block {\r\n\treturn PinkConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/pinkConcretePowder.go",
    "content": "package block\r\n\r\ntype PinkConcretePowder struct {\r\n}\r\n\r\nfunc (b PinkConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b PinkConcretePowder) New(props BlockProperties) Block {\r\n\treturn PinkConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/pinkGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype PinkGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b PinkGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b PinkGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn PinkGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pinkPetals.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PinkPetals struct {\r\n\tFacing string\r\n\tFlowerAmount int\r\n}\r\n\r\nfunc (b PinkPetals) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_petals\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"flower_amount\": strconv.Itoa(b.FlowerAmount),\r\n\t}\r\n}\r\n\r\nfunc (b PinkPetals) New(props BlockProperties) Block {\r\n\treturn PinkPetals{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tFlowerAmount: atoi(props[\"flower_amount\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pinkShulkerBox.go",
    "content": "package block\r\n\r\ntype PinkShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b PinkShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b PinkShulkerBox) New(props BlockProperties) Block {\r\n\treturn PinkShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pinkStainedGlass.go",
    "content": "package block\r\n\r\ntype PinkStainedGlass struct {\r\n}\r\n\r\nfunc (b PinkStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b PinkStainedGlass) New(props BlockProperties) Block {\r\n\treturn PinkStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/pinkStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PinkStainedGlassPane struct {\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PinkStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_stained_glass_pane\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t}\r\n}\r\n\r\nfunc (b PinkStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn PinkStainedGlassPane{\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pinkTerracotta.go",
    "content": "package block\r\n\r\ntype PinkTerracotta struct {\r\n}\r\n\r\nfunc (b PinkTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b PinkTerracotta) New(props BlockProperties) Block {\r\n\treturn PinkTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/pinkTulip.go",
    "content": "package block\r\n\r\ntype PinkTulip struct {\r\n}\r\n\r\nfunc (b PinkTulip) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_tulip\", BlockProperties{}\r\n}\r\n\r\nfunc (b PinkTulip) New(props BlockProperties) Block {\r\n\treturn PinkTulip{}\r\n}"
  },
  {
    "path": "server/world/block/pinkWallBanner.go",
    "content": "package block\r\n\r\ntype PinkWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b PinkWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b PinkWallBanner) New(props BlockProperties) Block {\r\n\treturn PinkWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pinkWool.go",
    "content": "package block\r\n\r\ntype PinkWool struct {\r\n}\r\n\r\nfunc (b PinkWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pink_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b PinkWool) New(props BlockProperties) Block {\r\n\treturn PinkWool{}\r\n}"
  },
  {
    "path": "server/world/block/piston.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Piston struct {\r\n\tExtended bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b Piston) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:piston\", BlockProperties{\r\n\t\t\"extended\": strconv.FormatBool(b.Extended),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Piston) New(props BlockProperties) Block {\r\n\treturn Piston{\r\n\t\tExtended: props[\"extended\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}\r\n\r\nfunc (b Piston) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:piston\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pistonHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PistonHead struct {\r\n\tFacing string\r\n\tShort bool\r\n\tType string\r\n}\r\n\r\nfunc (b PistonHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:piston_head\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"short\": strconv.FormatBool(b.Short),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b PistonHead) New(props BlockProperties) Block {\r\n\treturn PistonHead{\r\n\t\tType: props[\"type\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tShort: props[\"short\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pitcherCrop.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PitcherCrop struct {\r\n\tHalf string\r\n\tAge int\r\n}\r\n\r\nfunc (b PitcherCrop) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pitcher_crop\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b PitcherCrop) New(props BlockProperties) Block {\r\n\treturn PitcherCrop{\r\n\t\tHalf: props[\"half\"],\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pitcherPlant.go",
    "content": "package block\r\n\r\ntype PitcherPlant struct {\r\n\tHalf string\r\n}\r\n\r\nfunc (b PitcherPlant) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pitcher_plant\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b PitcherPlant) New(props BlockProperties) Block {\r\n\treturn PitcherPlant{\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/playerHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PlayerHead struct {\r\n\tPowered bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b PlayerHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:player_head\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b PlayerHead) New(props BlockProperties) Block {\r\n\treturn PlayerHead{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/playerWallHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PlayerWallHead struct {\r\n\tPowered bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b PlayerWallHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:player_wall_head\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b PlayerWallHead) New(props BlockProperties) Block {\r\n\treturn PlayerWallHead{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/podzol.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Podzol struct {\r\n\tSnowy bool\r\n}\r\n\r\nfunc (b Podzol) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:podzol\", BlockProperties{\r\n\t\t\"snowy\": strconv.FormatBool(b.Snowy),\r\n\t}\r\n}\r\n\r\nfunc (b Podzol) New(props BlockProperties) Block {\r\n\treturn Podzol{\r\n\t\tSnowy: props[\"snowy\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pointedDripstone.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PointedDripstone struct {\r\n\tVerticalDirection string\r\n\tWaterlogged bool\r\n\tThickness string\r\n}\r\n\r\nfunc (b PointedDripstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pointed_dripstone\", BlockProperties{\r\n\t\t\"thickness\": b.Thickness,\r\n\t\t\"vertical_direction\": b.VerticalDirection,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PointedDripstone) New(props BlockProperties) Block {\r\n\treturn PointedDripstone{\r\n\t\tVerticalDirection: props[\"vertical_direction\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tThickness: props[\"thickness\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedAndesite.go",
    "content": "package block\r\n\r\ntype PolishedAndesite struct {\r\n}\r\n\r\nfunc (b PolishedAndesite) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_andesite\", BlockProperties{}\r\n}\r\n\r\nfunc (b PolishedAndesite) New(props BlockProperties) Block {\r\n\treturn PolishedAndesite{}\r\n}"
  },
  {
    "path": "server/world/block/polishedAndesiteSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedAndesiteSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PolishedAndesiteSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_andesite_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PolishedAndesiteSlab) New(props BlockProperties) Block {\r\n\treturn PolishedAndesiteSlab{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedAndesiteStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedAndesiteStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b PolishedAndesiteStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_andesite_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PolishedAndesiteStairs) New(props BlockProperties) Block {\r\n\treturn PolishedAndesiteStairs{\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedBasalt.go",
    "content": "package block\r\n\r\ntype PolishedBasalt struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b PolishedBasalt) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_basalt\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedBasalt) New(props BlockProperties) Block {\r\n\treturn PolishedBasalt{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedBlackstone.go",
    "content": "package block\r\n\r\ntype PolishedBlackstone struct {\r\n}\r\n\r\nfunc (b PolishedBlackstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_blackstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b PolishedBlackstone) New(props BlockProperties) Block {\r\n\treturn PolishedBlackstone{}\r\n}"
  },
  {
    "path": "server/world/block/polishedBlackstoneBrickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedBlackstoneBrickSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PolishedBlackstoneBrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_blackstone_brick_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PolishedBlackstoneBrickSlab) New(props BlockProperties) Block {\r\n\treturn PolishedBlackstoneBrickSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedBlackstoneBrickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedBlackstoneBrickStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b PolishedBlackstoneBrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_blackstone_brick_stairs\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedBlackstoneBrickStairs) New(props BlockProperties) Block {\r\n\treturn PolishedBlackstoneBrickStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedBlackstoneBrickWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedBlackstoneBrickWall struct {\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n}\r\n\r\nfunc (b PolishedBlackstoneBrickWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_blackstone_brick_wall\", BlockProperties{\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedBlackstoneBrickWall) New(props BlockProperties) Block {\r\n\treturn PolishedBlackstoneBrickWall{\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedBlackstoneBricks.go",
    "content": "package block\r\n\r\ntype PolishedBlackstoneBricks struct {\r\n}\r\n\r\nfunc (b PolishedBlackstoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_blackstone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b PolishedBlackstoneBricks) New(props BlockProperties) Block {\r\n\treturn PolishedBlackstoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/polishedBlackstoneButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedBlackstoneButton struct {\r\n\tFace string\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b PolishedBlackstoneButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_blackstone_button\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedBlackstoneButton) New(props BlockProperties) Block {\r\n\treturn PolishedBlackstoneButton{\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedBlackstonePressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedBlackstonePressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b PolishedBlackstonePressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_blackstone_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b PolishedBlackstonePressurePlate) New(props BlockProperties) Block {\r\n\treturn PolishedBlackstonePressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedBlackstoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedBlackstoneSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PolishedBlackstoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_blackstone_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PolishedBlackstoneSlab) New(props BlockProperties) Block {\r\n\treturn PolishedBlackstoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedBlackstoneStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedBlackstoneStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b PolishedBlackstoneStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_blackstone_stairs\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedBlackstoneStairs) New(props BlockProperties) Block {\r\n\treturn PolishedBlackstoneStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedBlackstoneWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedBlackstoneWall struct {\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n}\r\n\r\nfunc (b PolishedBlackstoneWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_blackstone_wall\", BlockProperties{\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedBlackstoneWall) New(props BlockProperties) Block {\r\n\treturn PolishedBlackstoneWall{\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedDeepslate.go",
    "content": "package block\r\n\r\ntype PolishedDeepslate struct {\r\n}\r\n\r\nfunc (b PolishedDeepslate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_deepslate\", BlockProperties{}\r\n}\r\n\r\nfunc (b PolishedDeepslate) New(props BlockProperties) Block {\r\n\treturn PolishedDeepslate{}\r\n}"
  },
  {
    "path": "server/world/block/polishedDeepslateSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedDeepslateSlab struct {\r\n\tWaterlogged bool\r\n\tType string\r\n}\r\n\r\nfunc (b PolishedDeepslateSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_deepslate_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedDeepslateSlab) New(props BlockProperties) Block {\r\n\treturn PolishedDeepslateSlab{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedDeepslateStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedDeepslateStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b PolishedDeepslateStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_deepslate_stairs\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedDeepslateStairs) New(props BlockProperties) Block {\r\n\treturn PolishedDeepslateStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedDeepslateWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedDeepslateWall struct {\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n}\r\n\r\nfunc (b PolishedDeepslateWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_deepslate_wall\", BlockProperties{\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedDeepslateWall) New(props BlockProperties) Block {\r\n\treturn PolishedDeepslateWall{\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedDiorite.go",
    "content": "package block\r\n\r\ntype PolishedDiorite struct {\r\n}\r\n\r\nfunc (b PolishedDiorite) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_diorite\", BlockProperties{}\r\n}\r\n\r\nfunc (b PolishedDiorite) New(props BlockProperties) Block {\r\n\treturn PolishedDiorite{}\r\n}"
  },
  {
    "path": "server/world/block/polishedDioriteSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedDioriteSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PolishedDioriteSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_diorite_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PolishedDioriteSlab) New(props BlockProperties) Block {\r\n\treturn PolishedDioriteSlab{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedDioriteStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedDioriteStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PolishedDioriteStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_diorite_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PolishedDioriteStairs) New(props BlockProperties) Block {\r\n\treturn PolishedDioriteStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedGranite.go",
    "content": "package block\r\n\r\ntype PolishedGranite struct {\r\n}\r\n\r\nfunc (b PolishedGranite) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_granite\", BlockProperties{}\r\n}\r\n\r\nfunc (b PolishedGranite) New(props BlockProperties) Block {\r\n\treturn PolishedGranite{}\r\n}"
  },
  {
    "path": "server/world/block/polishedGraniteSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedGraniteSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PolishedGraniteSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_granite_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PolishedGraniteSlab) New(props BlockProperties) Block {\r\n\treturn PolishedGraniteSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedGraniteStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedGraniteStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PolishedGraniteStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_granite_stairs\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedGraniteStairs) New(props BlockProperties) Block {\r\n\treturn PolishedGraniteStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedTuff.go",
    "content": "package block\r\n\r\ntype PolishedTuff struct {\r\n}\r\n\r\nfunc (b PolishedTuff) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_tuff\", BlockProperties{}\r\n}\r\n\r\nfunc (b PolishedTuff) New(props BlockProperties) Block {\r\n\treturn PolishedTuff{}\r\n}"
  },
  {
    "path": "server/world/block/polishedTuffSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedTuffSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PolishedTuffSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_tuff_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PolishedTuffSlab) New(props BlockProperties) Block {\r\n\treturn PolishedTuffSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedTuffStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedTuffStairs struct {\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n}\r\n\r\nfunc (b PolishedTuffStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_tuff_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PolishedTuffStairs) New(props BlockProperties) Block {\r\n\treturn PolishedTuffStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/polishedTuffWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PolishedTuffWall struct {\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n}\r\n\r\nfunc (b PolishedTuffWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:polished_tuff_wall\", BlockProperties{\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t}\r\n}\r\n\r\nfunc (b PolishedTuffWall) New(props BlockProperties) Block {\r\n\treturn PolishedTuffWall{\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/poppy.go",
    "content": "package block\r\n\r\ntype Poppy struct {\r\n}\r\n\r\nfunc (b Poppy) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:poppy\", BlockProperties{}\r\n}\r\n\r\nfunc (b Poppy) New(props BlockProperties) Block {\r\n\treturn Poppy{}\r\n}"
  },
  {
    "path": "server/world/block/pos/pos.go",
    "content": "package pos\r\n\r\nfunc New(x, y, z int32) BlockPosition {\r\n\treturn BlockPosition{x, y, z}\r\n}\r\n\r\ntype BlockPosition [3]int32\r\n\r\n// returns the absolute x position of the block in the world\r\nfunc (b BlockPosition) X() int32 {\r\n\treturn b[0]\r\n}\r\n\r\n// returns the absolute y position of the block in the world\r\nfunc (b BlockPosition) Y() int32 {\r\n\treturn b[1]\r\n}\r\n\r\n// returns the absolute z position of the block in the world\r\nfunc (b BlockPosition) Z() int32 {\r\n\treturn b[2]\r\n}\r\n\r\n// returns the chunk position x of this block\r\nfunc (b BlockPosition) ChunkX() int32 {\r\n\treturn b[0] >> 4\r\n}\r\n\r\n// returns the chunk position y of this block\r\nfunc (b BlockPosition) Section() int32 {\r\n\treturn b[1] >> 4\r\n}\r\n\r\n// returns the chunk position z of this block\r\nfunc (b BlockPosition) ChunkZ() int32 {\r\n\treturn b[2] >> 4\r\n}\r\n\r\n// returns the relative x position of the block in its section\r\nfunc (b BlockPosition) SectionX() int32 {\r\n\treturn b[0] & 0x0f\r\n}\r\n\r\n// returns the relative y position of the block in its section\r\nfunc (b BlockPosition) SectionY() int32 {\r\n\treturn b[1] & 0x0f\r\n}\r\n\r\n// returns the relative z position of the block in its section\r\nfunc (b BlockPosition) SectionZ() int32 {\r\n\treturn b[2] & 0x0f\r\n}\r\n\r\nfunc (b BlockPosition) Add(b1 BlockPosition) BlockPosition {\r\n\treturn BlockPosition{\r\n\t\tb[0] + b1[0],\r\n\t\tb[1] + b1[1],\r\n\t\tb[2] + b1[2],\r\n\t}\r\n}\r\n\r\nfunc (b BlockPosition) Sub(b1 BlockPosition) BlockPosition {\r\n\treturn BlockPosition{\r\n\t\tb[0] - b1[0],\r\n\t\tb[1] - b1[1],\r\n\t\tb[2] - b1[2],\r\n\t}\r\n}\r\n"
  },
  {
    "path": "server/world/block/potatoes.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Potatoes struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b Potatoes) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potatoes\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b Potatoes) New(props BlockProperties) Block {\r\n\treturn Potatoes{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pottedAcaciaSapling.go",
    "content": "package block\r\n\r\ntype PottedAcaciaSapling struct {\r\n}\r\n\r\nfunc (b PottedAcaciaSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_acacia_sapling\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedAcaciaSapling) New(props BlockProperties) Block {\r\n\treturn PottedAcaciaSapling{}\r\n}"
  },
  {
    "path": "server/world/block/pottedAllium.go",
    "content": "package block\r\n\r\ntype PottedAllium struct {\r\n}\r\n\r\nfunc (b PottedAllium) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_allium\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedAllium) New(props BlockProperties) Block {\r\n\treturn PottedAllium{}\r\n}"
  },
  {
    "path": "server/world/block/pottedAzaleaBush.go",
    "content": "package block\r\n\r\ntype PottedAzaleaBush struct {\r\n}\r\n\r\nfunc (b PottedAzaleaBush) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_azalea_bush\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedAzaleaBush) New(props BlockProperties) Block {\r\n\treturn PottedAzaleaBush{}\r\n}"
  },
  {
    "path": "server/world/block/pottedAzureBluet.go",
    "content": "package block\r\n\r\ntype PottedAzureBluet struct {\r\n}\r\n\r\nfunc (b PottedAzureBluet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_azure_bluet\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedAzureBluet) New(props BlockProperties) Block {\r\n\treturn PottedAzureBluet{}\r\n}"
  },
  {
    "path": "server/world/block/pottedBamboo.go",
    "content": "package block\r\n\r\ntype PottedBamboo struct {\r\n}\r\n\r\nfunc (b PottedBamboo) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_bamboo\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedBamboo) New(props BlockProperties) Block {\r\n\treturn PottedBamboo{}\r\n}"
  },
  {
    "path": "server/world/block/pottedBirchSapling.go",
    "content": "package block\r\n\r\ntype PottedBirchSapling struct {\r\n}\r\n\r\nfunc (b PottedBirchSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_birch_sapling\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedBirchSapling) New(props BlockProperties) Block {\r\n\treturn PottedBirchSapling{}\r\n}"
  },
  {
    "path": "server/world/block/pottedBlueOrchid.go",
    "content": "package block\r\n\r\ntype PottedBlueOrchid struct {\r\n}\r\n\r\nfunc (b PottedBlueOrchid) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_blue_orchid\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedBlueOrchid) New(props BlockProperties) Block {\r\n\treturn PottedBlueOrchid{}\r\n}"
  },
  {
    "path": "server/world/block/pottedBrownMushroom.go",
    "content": "package block\r\n\r\ntype PottedBrownMushroom struct {\r\n}\r\n\r\nfunc (b PottedBrownMushroom) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_brown_mushroom\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedBrownMushroom) New(props BlockProperties) Block {\r\n\treturn PottedBrownMushroom{}\r\n}"
  },
  {
    "path": "server/world/block/pottedCactus.go",
    "content": "package block\r\n\r\ntype PottedCactus struct {\r\n}\r\n\r\nfunc (b PottedCactus) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_cactus\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedCactus) New(props BlockProperties) Block {\r\n\treturn PottedCactus{}\r\n}"
  },
  {
    "path": "server/world/block/pottedCherrySapling.go",
    "content": "package block\r\n\r\ntype PottedCherrySapling struct {\r\n}\r\n\r\nfunc (b PottedCherrySapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_cherry_sapling\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedCherrySapling) New(props BlockProperties) Block {\r\n\treturn PottedCherrySapling{}\r\n}"
  },
  {
    "path": "server/world/block/pottedCornflower.go",
    "content": "package block\r\n\r\ntype PottedCornflower struct {\r\n}\r\n\r\nfunc (b PottedCornflower) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_cornflower\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedCornflower) New(props BlockProperties) Block {\r\n\treturn PottedCornflower{}\r\n}"
  },
  {
    "path": "server/world/block/pottedCrimsonFungus.go",
    "content": "package block\r\n\r\ntype PottedCrimsonFungus struct {\r\n}\r\n\r\nfunc (b PottedCrimsonFungus) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_crimson_fungus\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedCrimsonFungus) New(props BlockProperties) Block {\r\n\treturn PottedCrimsonFungus{}\r\n}"
  },
  {
    "path": "server/world/block/pottedCrimsonRoots.go",
    "content": "package block\r\n\r\ntype PottedCrimsonRoots struct {\r\n}\r\n\r\nfunc (b PottedCrimsonRoots) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_crimson_roots\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedCrimsonRoots) New(props BlockProperties) Block {\r\n\treturn PottedCrimsonRoots{}\r\n}"
  },
  {
    "path": "server/world/block/pottedDandelion.go",
    "content": "package block\r\n\r\ntype PottedDandelion struct {\r\n}\r\n\r\nfunc (b PottedDandelion) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_dandelion\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedDandelion) New(props BlockProperties) Block {\r\n\treturn PottedDandelion{}\r\n}"
  },
  {
    "path": "server/world/block/pottedDarkOakSapling.go",
    "content": "package block\r\n\r\ntype PottedDarkOakSapling struct {\r\n}\r\n\r\nfunc (b PottedDarkOakSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_dark_oak_sapling\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedDarkOakSapling) New(props BlockProperties) Block {\r\n\treturn PottedDarkOakSapling{}\r\n}"
  },
  {
    "path": "server/world/block/pottedDeadBush.go",
    "content": "package block\r\n\r\ntype PottedDeadBush struct {\r\n}\r\n\r\nfunc (b PottedDeadBush) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_dead_bush\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedDeadBush) New(props BlockProperties) Block {\r\n\treturn PottedDeadBush{}\r\n}"
  },
  {
    "path": "server/world/block/pottedFern.go",
    "content": "package block\r\n\r\ntype PottedFern struct {\r\n}\r\n\r\nfunc (b PottedFern) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_fern\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedFern) New(props BlockProperties) Block {\r\n\treturn PottedFern{}\r\n}"
  },
  {
    "path": "server/world/block/pottedFloweringAzaleaBush.go",
    "content": "package block\r\n\r\ntype PottedFloweringAzaleaBush struct {\r\n}\r\n\r\nfunc (b PottedFloweringAzaleaBush) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_flowering_azalea_bush\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedFloweringAzaleaBush) New(props BlockProperties) Block {\r\n\treturn PottedFloweringAzaleaBush{}\r\n}"
  },
  {
    "path": "server/world/block/pottedJungleSapling.go",
    "content": "package block\r\n\r\ntype PottedJungleSapling struct {\r\n}\r\n\r\nfunc (b PottedJungleSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_jungle_sapling\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedJungleSapling) New(props BlockProperties) Block {\r\n\treturn PottedJungleSapling{}\r\n}"
  },
  {
    "path": "server/world/block/pottedLilyOfTheValley.go",
    "content": "package block\r\n\r\ntype PottedLilyOfTheValley struct {\r\n}\r\n\r\nfunc (b PottedLilyOfTheValley) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_lily_of_the_valley\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedLilyOfTheValley) New(props BlockProperties) Block {\r\n\treturn PottedLilyOfTheValley{}\r\n}"
  },
  {
    "path": "server/world/block/pottedMangrovePropagule.go",
    "content": "package block\r\n\r\ntype PottedMangrovePropagule struct {\r\n}\r\n\r\nfunc (b PottedMangrovePropagule) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_mangrove_propagule\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedMangrovePropagule) New(props BlockProperties) Block {\r\n\treturn PottedMangrovePropagule{}\r\n}"
  },
  {
    "path": "server/world/block/pottedOakSapling.go",
    "content": "package block\r\n\r\ntype PottedOakSapling struct {\r\n}\r\n\r\nfunc (b PottedOakSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_oak_sapling\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedOakSapling) New(props BlockProperties) Block {\r\n\treturn PottedOakSapling{}\r\n}"
  },
  {
    "path": "server/world/block/pottedOrangeTulip.go",
    "content": "package block\r\n\r\ntype PottedOrangeTulip struct {\r\n}\r\n\r\nfunc (b PottedOrangeTulip) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_orange_tulip\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedOrangeTulip) New(props BlockProperties) Block {\r\n\treturn PottedOrangeTulip{}\r\n}"
  },
  {
    "path": "server/world/block/pottedOxeyeDaisy.go",
    "content": "package block\r\n\r\ntype PottedOxeyeDaisy struct {\r\n}\r\n\r\nfunc (b PottedOxeyeDaisy) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_oxeye_daisy\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedOxeyeDaisy) New(props BlockProperties) Block {\r\n\treturn PottedOxeyeDaisy{}\r\n}"
  },
  {
    "path": "server/world/block/pottedPinkTulip.go",
    "content": "package block\r\n\r\ntype PottedPinkTulip struct {\r\n}\r\n\r\nfunc (b PottedPinkTulip) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_pink_tulip\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedPinkTulip) New(props BlockProperties) Block {\r\n\treturn PottedPinkTulip{}\r\n}"
  },
  {
    "path": "server/world/block/pottedPoppy.go",
    "content": "package block\r\n\r\ntype PottedPoppy struct {\r\n}\r\n\r\nfunc (b PottedPoppy) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_poppy\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedPoppy) New(props BlockProperties) Block {\r\n\treturn PottedPoppy{}\r\n}"
  },
  {
    "path": "server/world/block/pottedRedMushroom.go",
    "content": "package block\r\n\r\ntype PottedRedMushroom struct {\r\n}\r\n\r\nfunc (b PottedRedMushroom) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_red_mushroom\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedRedMushroom) New(props BlockProperties) Block {\r\n\treturn PottedRedMushroom{}\r\n}"
  },
  {
    "path": "server/world/block/pottedRedTulip.go",
    "content": "package block\r\n\r\ntype PottedRedTulip struct {\r\n}\r\n\r\nfunc (b PottedRedTulip) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_red_tulip\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedRedTulip) New(props BlockProperties) Block {\r\n\treturn PottedRedTulip{}\r\n}"
  },
  {
    "path": "server/world/block/pottedSpruceSapling.go",
    "content": "package block\r\n\r\ntype PottedSpruceSapling struct {\r\n}\r\n\r\nfunc (b PottedSpruceSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_spruce_sapling\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedSpruceSapling) New(props BlockProperties) Block {\r\n\treturn PottedSpruceSapling{}\r\n}"
  },
  {
    "path": "server/world/block/pottedTorchflower.go",
    "content": "package block\r\n\r\ntype PottedTorchflower struct {\r\n}\r\n\r\nfunc (b PottedTorchflower) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_torchflower\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedTorchflower) New(props BlockProperties) Block {\r\n\treturn PottedTorchflower{}\r\n}"
  },
  {
    "path": "server/world/block/pottedWarpedFungus.go",
    "content": "package block\r\n\r\ntype PottedWarpedFungus struct {\r\n}\r\n\r\nfunc (b PottedWarpedFungus) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_warped_fungus\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedWarpedFungus) New(props BlockProperties) Block {\r\n\treturn PottedWarpedFungus{}\r\n}"
  },
  {
    "path": "server/world/block/pottedWarpedRoots.go",
    "content": "package block\r\n\r\ntype PottedWarpedRoots struct {\r\n}\r\n\r\nfunc (b PottedWarpedRoots) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_warped_roots\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedWarpedRoots) New(props BlockProperties) Block {\r\n\treturn PottedWarpedRoots{}\r\n}"
  },
  {
    "path": "server/world/block/pottedWhiteTulip.go",
    "content": "package block\r\n\r\ntype PottedWhiteTulip struct {\r\n}\r\n\r\nfunc (b PottedWhiteTulip) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_white_tulip\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedWhiteTulip) New(props BlockProperties) Block {\r\n\treturn PottedWhiteTulip{}\r\n}"
  },
  {
    "path": "server/world/block/pottedWitherRose.go",
    "content": "package block\r\n\r\ntype PottedWitherRose struct {\r\n}\r\n\r\nfunc (b PottedWitherRose) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:potted_wither_rose\", BlockProperties{}\r\n}\r\n\r\nfunc (b PottedWitherRose) New(props BlockProperties) Block {\r\n\treturn PottedWitherRose{}\r\n}"
  },
  {
    "path": "server/world/block/powderSnow.go",
    "content": "package block\r\n\r\ntype PowderSnow struct {\r\n}\r\n\r\nfunc (b PowderSnow) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:powder_snow\", BlockProperties{}\r\n}\r\n\r\nfunc (b PowderSnow) New(props BlockProperties) Block {\r\n\treturn PowderSnow{}\r\n}"
  },
  {
    "path": "server/world/block/powderSnowCauldron.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PowderSnowCauldron struct {\r\n\tLevel int\r\n}\r\n\r\nfunc (b PowderSnowCauldron) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:powder_snow_cauldron\", BlockProperties{\r\n\t\t\"level\": strconv.Itoa(b.Level),\r\n\t}\r\n}\r\n\r\nfunc (b PowderSnowCauldron) New(props BlockProperties) Block {\r\n\treturn PowderSnowCauldron{\r\n\t\tLevel: atoi(props[\"level\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/poweredRail.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PoweredRail struct {\r\n\tPowered bool\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PoweredRail) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:powered_rail\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PoweredRail) New(props BlockProperties) Block {\r\n\treturn PoweredRail{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/prismarine.go",
    "content": "package block\r\n\r\ntype Prismarine struct {\r\n}\r\n\r\nfunc (b Prismarine) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:prismarine\", BlockProperties{}\r\n}\r\n\r\nfunc (b Prismarine) New(props BlockProperties) Block {\r\n\treturn Prismarine{}\r\n}"
  },
  {
    "path": "server/world/block/prismarineBrickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PrismarineBrickSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PrismarineBrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:prismarine_brick_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b PrismarineBrickSlab) New(props BlockProperties) Block {\r\n\treturn PrismarineBrickSlab{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/prismarineBrickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PrismarineBrickStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b PrismarineBrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:prismarine_brick_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PrismarineBrickStairs) New(props BlockProperties) Block {\r\n\treturn PrismarineBrickStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/prismarineBricks.go",
    "content": "package block\r\n\r\ntype PrismarineBricks struct {\r\n}\r\n\r\nfunc (b PrismarineBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:prismarine_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b PrismarineBricks) New(props BlockProperties) Block {\r\n\treturn PrismarineBricks{}\r\n}"
  },
  {
    "path": "server/world/block/prismarineSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PrismarineSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PrismarineSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:prismarine_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b PrismarineSlab) New(props BlockProperties) Block {\r\n\treturn PrismarineSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/prismarineStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PrismarineStairs struct {\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n}\r\n\r\nfunc (b PrismarineStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:prismarine_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b PrismarineStairs) New(props BlockProperties) Block {\r\n\treturn PrismarineStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/prismarineWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PrismarineWall struct {\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PrismarineWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:prismarine_wall\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t}\r\n}\r\n\r\nfunc (b PrismarineWall) New(props BlockProperties) Block {\r\n\treturn PrismarineWall{\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/pumpkin.go",
    "content": "package block\r\n\r\ntype Pumpkin struct {\r\n}\r\n\r\nfunc (b Pumpkin) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pumpkin\", BlockProperties{}\r\n}\r\n\r\nfunc (b Pumpkin) New(props BlockProperties) Block {\r\n\treturn Pumpkin{}\r\n}"
  },
  {
    "path": "server/world/block/pumpkinStem.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PumpkinStem struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b PumpkinStem) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:pumpkin_stem\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b PumpkinStem) New(props BlockProperties) Block {\r\n\treturn PumpkinStem{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpleBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PurpleBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b PurpleBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b PurpleBanner) New(props BlockProperties) Block {\r\n\treturn PurpleBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpleBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PurpleBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b PurpleBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_bed\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t}\r\n}\r\n\r\nfunc (b PurpleBed) New(props BlockProperties) Block {\r\n\treturn PurpleBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpleCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PurpleCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b PurpleCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PurpleCandle) New(props BlockProperties) Block {\r\n\treturn PurpleCandle{\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpleCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PurpleCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b PurpleCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b PurpleCandleCake) New(props BlockProperties) Block {\r\n\treturn PurpleCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpleCarpet.go",
    "content": "package block\r\n\r\ntype PurpleCarpet struct {\r\n}\r\n\r\nfunc (b PurpleCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b PurpleCarpet) New(props BlockProperties) Block {\r\n\treturn PurpleCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/purpleConcrete.go",
    "content": "package block\r\n\r\ntype PurpleConcrete struct {\r\n}\r\n\r\nfunc (b PurpleConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b PurpleConcrete) New(props BlockProperties) Block {\r\n\treturn PurpleConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/purpleConcretePowder.go",
    "content": "package block\r\n\r\ntype PurpleConcretePowder struct {\r\n}\r\n\r\nfunc (b PurpleConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b PurpleConcretePowder) New(props BlockProperties) Block {\r\n\treturn PurpleConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/purpleGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype PurpleGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b PurpleGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b PurpleGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn PurpleGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpleShulkerBox.go",
    "content": "package block\r\n\r\ntype PurpleShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b PurpleShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b PurpleShulkerBox) New(props BlockProperties) Block {\r\n\treturn PurpleShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpleStainedGlass.go",
    "content": "package block\r\n\r\ntype PurpleStainedGlass struct {\r\n}\r\n\r\nfunc (b PurpleStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b PurpleStainedGlass) New(props BlockProperties) Block {\r\n\treturn PurpleStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/purpleStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PurpleStainedGlassPane struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b PurpleStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_stained_glass_pane\", BlockProperties{\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t}\r\n}\r\n\r\nfunc (b PurpleStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn PurpleStainedGlassPane{\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpleTerracotta.go",
    "content": "package block\r\n\r\ntype PurpleTerracotta struct {\r\n}\r\n\r\nfunc (b PurpleTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b PurpleTerracotta) New(props BlockProperties) Block {\r\n\treturn PurpleTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/purpleWallBanner.go",
    "content": "package block\r\n\r\ntype PurpleWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b PurpleWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b PurpleWallBanner) New(props BlockProperties) Block {\r\n\treturn PurpleWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpleWool.go",
    "content": "package block\r\n\r\ntype PurpleWool struct {\r\n}\r\n\r\nfunc (b PurpleWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purple_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b PurpleWool) New(props BlockProperties) Block {\r\n\treturn PurpleWool{}\r\n}"
  },
  {
    "path": "server/world/block/purpurBlock.go",
    "content": "package block\r\n\r\ntype PurpurBlock struct {\r\n}\r\n\r\nfunc (b PurpurBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purpur_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b PurpurBlock) New(props BlockProperties) Block {\r\n\treturn PurpurBlock{}\r\n}"
  },
  {
    "path": "server/world/block/purpurPillar.go",
    "content": "package block\r\n\r\ntype PurpurPillar struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b PurpurPillar) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purpur_pillar\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b PurpurPillar) New(props BlockProperties) Block {\r\n\treturn PurpurPillar{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpurSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PurpurSlab struct {\r\n\tWaterlogged bool\r\n\tType string\r\n}\r\n\r\nfunc (b PurpurSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purpur_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b PurpurSlab) New(props BlockProperties) Block {\r\n\treturn PurpurSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/purpurStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype PurpurStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b PurpurStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:purpur_stairs\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t}\r\n}\r\n\r\nfunc (b PurpurStairs) New(props BlockProperties) Block {\r\n\treturn PurpurStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/quartzBlock.go",
    "content": "package block\r\n\r\ntype QuartzBlock struct {\r\n}\r\n\r\nfunc (b QuartzBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:quartz_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b QuartzBlock) New(props BlockProperties) Block {\r\n\treturn QuartzBlock{}\r\n}"
  },
  {
    "path": "server/world/block/quartzBricks.go",
    "content": "package block\r\n\r\ntype QuartzBricks struct {\r\n}\r\n\r\nfunc (b QuartzBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:quartz_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b QuartzBricks) New(props BlockProperties) Block {\r\n\treturn QuartzBricks{}\r\n}"
  },
  {
    "path": "server/world/block/quartzPillar.go",
    "content": "package block\r\n\r\ntype QuartzPillar struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b QuartzPillar) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:quartz_pillar\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b QuartzPillar) New(props BlockProperties) Block {\r\n\treturn QuartzPillar{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/quartzSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype QuartzSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b QuartzSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:quartz_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b QuartzSlab) New(props BlockProperties) Block {\r\n\treturn QuartzSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/quartzStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype QuartzStairs struct {\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n}\r\n\r\nfunc (b QuartzStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:quartz_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b QuartzStairs) New(props BlockProperties) Block {\r\n\treturn QuartzStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/rail.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Rail struct {\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b Rail) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:rail\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b Rail) New(props BlockProperties) Block {\r\n\treturn Rail{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/rawCopperBlock.go",
    "content": "package block\r\n\r\ntype RawCopperBlock struct {\r\n}\r\n\r\nfunc (b RawCopperBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:raw_copper_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b RawCopperBlock) New(props BlockProperties) Block {\r\n\treturn RawCopperBlock{}\r\n}"
  },
  {
    "path": "server/world/block/rawGoldBlock.go",
    "content": "package block\r\n\r\ntype RawGoldBlock struct {\r\n}\r\n\r\nfunc (b RawGoldBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:raw_gold_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b RawGoldBlock) New(props BlockProperties) Block {\r\n\treturn RawGoldBlock{}\r\n}"
  },
  {
    "path": "server/world/block/rawIronBlock.go",
    "content": "package block\r\n\r\ntype RawIronBlock struct {\r\n}\r\n\r\nfunc (b RawIronBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:raw_iron_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b RawIronBlock) New(props BlockProperties) Block {\r\n\treturn RawIronBlock{}\r\n}"
  },
  {
    "path": "server/world/block/redBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b RedBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b RedBanner) New(props BlockProperties) Block {\r\n\treturn RedBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedBed struct {\r\n\tPart string\r\n\tFacing string\r\n\tOccupied bool\r\n}\r\n\r\nfunc (b RedBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_bed\", BlockProperties{\r\n\t\t\"part\": b.Part,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t}\r\n}\r\n\r\nfunc (b RedBed) New(props BlockProperties) Block {\r\n\treturn RedBed{\r\n\t\tPart: props[\"part\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedCandle struct {\r\n\tLit bool\r\n\tWaterlogged bool\r\n\tCandles int\r\n}\r\n\r\nfunc (b RedCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b RedCandle) New(props BlockProperties) Block {\r\n\treturn RedCandle{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b RedCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b RedCandleCake) New(props BlockProperties) Block {\r\n\treturn RedCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redCarpet.go",
    "content": "package block\r\n\r\ntype RedCarpet struct {\r\n}\r\n\r\nfunc (b RedCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedCarpet) New(props BlockProperties) Block {\r\n\treturn RedCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/redConcrete.go",
    "content": "package block\r\n\r\ntype RedConcrete struct {\r\n}\r\n\r\nfunc (b RedConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedConcrete) New(props BlockProperties) Block {\r\n\treturn RedConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/redConcretePowder.go",
    "content": "package block\r\n\r\ntype RedConcretePowder struct {\r\n}\r\n\r\nfunc (b RedConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedConcretePowder) New(props BlockProperties) Block {\r\n\treturn RedConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/redGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype RedGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b RedGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b RedGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn RedGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redMushroom.go",
    "content": "package block\r\n\r\ntype RedMushroom struct {\r\n}\r\n\r\nfunc (b RedMushroom) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_mushroom\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedMushroom) New(props BlockProperties) Block {\r\n\treturn RedMushroom{}\r\n}"
  },
  {
    "path": "server/world/block/redMushroomBlock.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedMushroomBlock struct {\r\n\tDown bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tUp bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b RedMushroomBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_mushroom_block\", BlockProperties{\r\n\t\t\"down\": strconv.FormatBool(b.Down),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t}\r\n}\r\n\r\nfunc (b RedMushroomBlock) New(props BlockProperties) Block {\r\n\treturn RedMushroomBlock{\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tDown: props[\"down\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redNetherBrickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedNetherBrickSlab struct {\r\n\tWaterlogged bool\r\n\tType string\r\n}\r\n\r\nfunc (b RedNetherBrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_nether_brick_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b RedNetherBrickSlab) New(props BlockProperties) Block {\r\n\treturn RedNetherBrickSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redNetherBrickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedNetherBrickStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b RedNetherBrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_nether_brick_stairs\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b RedNetherBrickStairs) New(props BlockProperties) Block {\r\n\treturn RedNetherBrickStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redNetherBrickWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedNetherBrickWall struct {\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n}\r\n\r\nfunc (b RedNetherBrickWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_nether_brick_wall\", BlockProperties{\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t}\r\n}\r\n\r\nfunc (b RedNetherBrickWall) New(props BlockProperties) Block {\r\n\treturn RedNetherBrickWall{\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redNetherBricks.go",
    "content": "package block\r\n\r\ntype RedNetherBricks struct {\r\n}\r\n\r\nfunc (b RedNetherBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_nether_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedNetherBricks) New(props BlockProperties) Block {\r\n\treturn RedNetherBricks{}\r\n}"
  },
  {
    "path": "server/world/block/redSand.go",
    "content": "package block\r\n\r\ntype RedSand struct {\r\n}\r\n\r\nfunc (b RedSand) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_sand\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedSand) New(props BlockProperties) Block {\r\n\treturn RedSand{}\r\n}"
  },
  {
    "path": "server/world/block/redSandstone.go",
    "content": "package block\r\n\r\ntype RedSandstone struct {\r\n}\r\n\r\nfunc (b RedSandstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_sandstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedSandstone) New(props BlockProperties) Block {\r\n\treturn RedSandstone{}\r\n}"
  },
  {
    "path": "server/world/block/redSandstoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedSandstoneSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b RedSandstoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_sandstone_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b RedSandstoneSlab) New(props BlockProperties) Block {\r\n\treturn RedSandstoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redSandstoneStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedSandstoneStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b RedSandstoneStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_sandstone_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b RedSandstoneStairs) New(props BlockProperties) Block {\r\n\treturn RedSandstoneStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redSandstoneWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedSandstoneWall struct {\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n}\r\n\r\nfunc (b RedSandstoneWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_sandstone_wall\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t}\r\n}\r\n\r\nfunc (b RedSandstoneWall) New(props BlockProperties) Block {\r\n\treturn RedSandstoneWall{\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redShulkerBox.go",
    "content": "package block\r\n\r\ntype RedShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b RedShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b RedShulkerBox) New(props BlockProperties) Block {\r\n\treturn RedShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redStainedGlass.go",
    "content": "package block\r\n\r\ntype RedStainedGlass struct {\r\n}\r\n\r\nfunc (b RedStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedStainedGlass) New(props BlockProperties) Block {\r\n\treturn RedStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/redStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedStainedGlassPane struct {\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b RedStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_stained_glass_pane\", BlockProperties{\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b RedStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn RedStainedGlassPane{\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redTerracotta.go",
    "content": "package block\r\n\r\ntype RedTerracotta struct {\r\n}\r\n\r\nfunc (b RedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedTerracotta) New(props BlockProperties) Block {\r\n\treturn RedTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/redTulip.go",
    "content": "package block\r\n\r\ntype RedTulip struct {\r\n}\r\n\r\nfunc (b RedTulip) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_tulip\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedTulip) New(props BlockProperties) Block {\r\n\treturn RedTulip{}\r\n}"
  },
  {
    "path": "server/world/block/redWallBanner.go",
    "content": "package block\r\n\r\ntype RedWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b RedWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b RedWallBanner) New(props BlockProperties) Block {\r\n\treturn RedWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redWool.go",
    "content": "package block\r\n\r\ntype RedWool struct {\r\n}\r\n\r\nfunc (b RedWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:red_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedWool) New(props BlockProperties) Block {\r\n\treturn RedWool{}\r\n}"
  },
  {
    "path": "server/world/block/redstoneBlock.go",
    "content": "package block\r\n\r\ntype RedstoneBlock struct {\r\n}\r\n\r\nfunc (b RedstoneBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:redstone_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b RedstoneBlock) New(props BlockProperties) Block {\r\n\treturn RedstoneBlock{}\r\n}"
  },
  {
    "path": "server/world/block/redstoneLamp.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedstoneLamp struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b RedstoneLamp) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:redstone_lamp\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b RedstoneLamp) New(props BlockProperties) Block {\r\n\treturn RedstoneLamp{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redstoneOre.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedstoneOre struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b RedstoneOre) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:redstone_ore\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b RedstoneOre) New(props BlockProperties) Block {\r\n\treturn RedstoneOre{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redstoneTorch.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedstoneTorch struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b RedstoneTorch) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:redstone_torch\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b RedstoneTorch) New(props BlockProperties) Block {\r\n\treturn RedstoneTorch{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redstoneWallTorch.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedstoneWallTorch struct {\r\n\tFacing string\r\n\tLit bool\r\n}\r\n\r\nfunc (b RedstoneWallTorch) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:redstone_wall_torch\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b RedstoneWallTorch) New(props BlockProperties) Block {\r\n\treturn RedstoneWallTorch{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/redstoneWire.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RedstoneWire struct {\r\n\tEast string\r\n\tNorth string\r\n\tPower int\r\n\tSouth string\r\n\tWest string\r\n}\r\n\r\nfunc (b RedstoneWire) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:redstone_wire\", BlockProperties{\r\n\t\t\"north\": b.North,\r\n\t\t\"power\": strconv.Itoa(b.Power),\r\n\t\t\"south\": b.South,\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t}\r\n}\r\n\r\nfunc (b RedstoneWire) New(props BlockProperties) Block {\r\n\treturn RedstoneWire{\r\n\t\tPower: atoi(props[\"power\"]),\r\n\t\tSouth: props[\"south\"],\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/reinforcedDeepslate.go",
    "content": "package block\r\n\r\ntype ReinforcedDeepslate struct {\r\n}\r\n\r\nfunc (b ReinforcedDeepslate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:reinforced_deepslate\", BlockProperties{}\r\n}\r\n\r\nfunc (b ReinforcedDeepslate) New(props BlockProperties) Block {\r\n\treturn ReinforcedDeepslate{}\r\n}"
  },
  {
    "path": "server/world/block/repeater.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Repeater struct {\r\n\tLocked bool\r\n\tPowered bool\r\n\tDelay int\r\n\tFacing string\r\n}\r\n\r\nfunc (b Repeater) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:repeater\", BlockProperties{\r\n\t\t\"locked\": strconv.FormatBool(b.Locked),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"delay\": strconv.Itoa(b.Delay),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Repeater) New(props BlockProperties) Block {\r\n\treturn Repeater{\r\n\t\tLocked: props[\"locked\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tDelay: atoi(props[\"delay\"]),\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/repeatingCommandBlock.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RepeatingCommandBlock struct {\r\n\tFacing string\r\n\tConditional bool\r\n}\r\n\r\nfunc (b RepeatingCommandBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:repeating_command_block\", BlockProperties{\r\n\t\t\"conditional\": strconv.FormatBool(b.Conditional),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b RepeatingCommandBlock) New(props BlockProperties) Block {\r\n\treturn RepeatingCommandBlock{\r\n\t\tConditional: props[\"conditional\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/respawnAnchor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype RespawnAnchor struct {\r\n\tCharges int\r\n}\r\n\r\nfunc (b RespawnAnchor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:respawn_anchor\", BlockProperties{\r\n\t\t\"charges\": strconv.Itoa(b.Charges),\r\n\t}\r\n}\r\n\r\nfunc (b RespawnAnchor) New(props BlockProperties) Block {\r\n\treturn RespawnAnchor{\r\n\t\tCharges: atoi(props[\"charges\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/rootedDirt.go",
    "content": "package block\r\n\r\ntype RootedDirt struct {\r\n}\r\n\r\nfunc (b RootedDirt) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:rooted_dirt\", BlockProperties{}\r\n}\r\n\r\nfunc (b RootedDirt) New(props BlockProperties) Block {\r\n\treturn RootedDirt{}\r\n}"
  },
  {
    "path": "server/world/block/roseBush.go",
    "content": "package block\r\n\r\ntype RoseBush struct {\r\n\tHalf string\r\n}\r\n\r\nfunc (b RoseBush) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:rose_bush\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b RoseBush) New(props BlockProperties) Block {\r\n\treturn RoseBush{\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/sand.go",
    "content": "package block\r\n\r\ntype Sand struct {\r\n}\r\n\r\nfunc (b Sand) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sand\", BlockProperties{}\r\n}\r\n\r\nfunc (b Sand) New(props BlockProperties) Block {\r\n\treturn Sand{}\r\n}"
  },
  {
    "path": "server/world/block/sandstone.go",
    "content": "package block\r\n\r\ntype Sandstone struct {\r\n}\r\n\r\nfunc (b Sandstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sandstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b Sandstone) New(props BlockProperties) Block {\r\n\treturn Sandstone{}\r\n}"
  },
  {
    "path": "server/world/block/sandstoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SandstoneSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SandstoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sandstone_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SandstoneSlab) New(props BlockProperties) Block {\r\n\treturn SandstoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/sandstoneStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SandstoneStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SandstoneStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sandstone_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SandstoneStairs) New(props BlockProperties) Block {\r\n\treturn SandstoneStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/sandstoneWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SandstoneWall struct {\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n}\r\n\r\nfunc (b SandstoneWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sandstone_wall\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t}\r\n}\r\n\r\nfunc (b SandstoneWall) New(props BlockProperties) Block {\r\n\treturn SandstoneWall{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/scaffolding.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Scaffolding struct {\r\n\tWaterlogged bool\r\n\tBottom bool\r\n\tDistance int\r\n}\r\n\r\nfunc (b Scaffolding) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:scaffolding\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"bottom\": strconv.FormatBool(b.Bottom),\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t}\r\n}\r\n\r\nfunc (b Scaffolding) New(props BlockProperties) Block {\r\n\treturn Scaffolding{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tBottom: props[\"bottom\"] != \"false\",\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/sculk.go",
    "content": "package block\r\n\r\ntype Sculk struct {\r\n}\r\n\r\nfunc (b Sculk) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sculk\", BlockProperties{}\r\n}\r\n\r\nfunc (b Sculk) New(props BlockProperties) Block {\r\n\treturn Sculk{}\r\n}"
  },
  {
    "path": "server/world/block/sculkCatalyst.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype SculkCatalyst struct {\r\n\tBloom bool\r\n}\r\n\r\nfunc (b SculkCatalyst) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sculk_catalyst\", BlockProperties{\r\n\t\t\"bloom\": strconv.FormatBool(b.Bloom),\r\n\t}\r\n}\r\n\r\nfunc (b SculkCatalyst) New(props BlockProperties) Block {\r\n\treturn SculkCatalyst{\r\n\t\tBloom: props[\"bloom\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b SculkCatalyst) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:sculk_catalyst\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/sculkSensor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype SculkSensor struct {\r\n\tPower int\r\n\tSculkSensorPhase string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SculkSensor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sculk_sensor\", BlockProperties{\r\n\t\t\"power\": strconv.Itoa(b.Power),\r\n\t\t\"sculk_sensor_phase\": b.SculkSensorPhase,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SculkSensor) New(props BlockProperties) Block {\r\n\treturn SculkSensor{\r\n\t\tPower: atoi(props[\"power\"]),\r\n\t\tSculkSensorPhase: props[\"sculk_sensor_phase\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b SculkSensor) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:sculk_sensor\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/sculkShrieker.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype SculkShrieker struct {\r\n\tCanSummon bool\r\n\tShrieking bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SculkShrieker) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sculk_shrieker\", BlockProperties{\r\n\t\t\"can_summon\": strconv.FormatBool(b.CanSummon),\r\n\t\t\"shrieking\": strconv.FormatBool(b.Shrieking),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SculkShrieker) New(props BlockProperties) Block {\r\n\treturn SculkShrieker{\r\n\t\tCanSummon: props[\"can_summon\"] != \"false\",\r\n\t\tShrieking: props[\"shrieking\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b SculkShrieker) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:sculk_shrieker\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/sculkVein.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SculkVein struct {\r\n\tNorth bool\r\n\tSouth bool\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tDown bool\r\n\tEast bool\r\n}\r\n\r\nfunc (b SculkVein) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sculk_vein\", BlockProperties{\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"down\": strconv.FormatBool(b.Down),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t}\r\n}\r\n\r\nfunc (b SculkVein) New(props BlockProperties) Block {\r\n\treturn SculkVein{\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tDown: props[\"down\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/seaLantern.go",
    "content": "package block\r\n\r\ntype SeaLantern struct {\r\n}\r\n\r\nfunc (b SeaLantern) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sea_lantern\", BlockProperties{}\r\n}\r\n\r\nfunc (b SeaLantern) New(props BlockProperties) Block {\r\n\treturn SeaLantern{}\r\n}"
  },
  {
    "path": "server/world/block/seaPickle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SeaPickle struct {\r\n\tPickles int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SeaPickle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sea_pickle\", BlockProperties{\r\n\t\t\"pickles\": strconv.Itoa(b.Pickles),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SeaPickle) New(props BlockProperties) Block {\r\n\treturn SeaPickle{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tPickles: atoi(props[\"pickles\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/seagrass.go",
    "content": "package block\r\n\r\ntype Seagrass struct {\r\n}\r\n\r\nfunc (b Seagrass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:seagrass\", BlockProperties{}\r\n}\r\n\r\nfunc (b Seagrass) New(props BlockProperties) Block {\r\n\treturn Seagrass{}\r\n}"
  },
  {
    "path": "server/world/block/shortGrass.go",
    "content": "package block\r\n\r\ntype ShortGrass struct {\r\n}\r\n\r\nfunc (b ShortGrass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:short_grass\", BlockProperties{}\r\n}\r\n\r\nfunc (b ShortGrass) New(props BlockProperties) Block {\r\n\treturn ShortGrass{}\r\n}"
  },
  {
    "path": "server/world/block/shroomlight.go",
    "content": "package block\r\n\r\ntype Shroomlight struct {\r\n}\r\n\r\nfunc (b Shroomlight) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:shroomlight\", BlockProperties{}\r\n}\r\n\r\nfunc (b Shroomlight) New(props BlockProperties) Block {\r\n\treturn Shroomlight{}\r\n}"
  },
  {
    "path": "server/world/block/shulkerBox.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype ShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b ShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b ShulkerBox) New(props BlockProperties) Block {\r\n\treturn ShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}\r\n\r\nfunc (b ShulkerBox) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:shulker_box\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/skeletonSkull.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SkeletonSkull struct {\r\n\tRotation int\r\n\tPowered bool\r\n}\r\n\r\nfunc (b SkeletonSkull) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:skeleton_skull\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b SkeletonSkull) New(props BlockProperties) Block {\r\n\treturn SkeletonSkull{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/skeletonWallSkull.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SkeletonWallSkull struct {\r\n\tPowered bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b SkeletonWallSkull) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:skeleton_wall_skull\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b SkeletonWallSkull) New(props BlockProperties) Block {\r\n\treturn SkeletonWallSkull{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/slimeBlock.go",
    "content": "package block\r\n\r\ntype SlimeBlock struct {\r\n}\r\n\r\nfunc (b SlimeBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:slime_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b SlimeBlock) New(props BlockProperties) Block {\r\n\treturn SlimeBlock{}\r\n}"
  },
  {
    "path": "server/world/block/smallAmethystBud.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SmallAmethystBud struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b SmallAmethystBud) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:small_amethyst_bud\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SmallAmethystBud) New(props BlockProperties) Block {\r\n\treturn SmallAmethystBud{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/smallDripleaf.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SmallDripleaf struct {\r\n\tFacing string\r\n\tHalf string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SmallDripleaf) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:small_dripleaf\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b SmallDripleaf) New(props BlockProperties) Block {\r\n\treturn SmallDripleaf{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/smithingTable.go",
    "content": "package block\r\n\r\ntype SmithingTable struct {\r\n}\r\n\r\nfunc (b SmithingTable) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smithing_table\", BlockProperties{}\r\n}\r\n\r\nfunc (b SmithingTable) New(props BlockProperties) Block {\r\n\treturn SmithingTable{}\r\n}"
  },
  {
    "path": "server/world/block/smoker.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Smoker struct {\r\n\tFacing string\r\n\tLit bool\r\n}\r\n\r\nfunc (b Smoker) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smoker\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b Smoker) New(props BlockProperties) Block {\r\n\treturn Smoker{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}\r\n\r\nfunc (b Smoker) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:smoker\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/smoothBasalt.go",
    "content": "package block\r\n\r\ntype SmoothBasalt struct {\r\n}\r\n\r\nfunc (b SmoothBasalt) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_basalt\", BlockProperties{}\r\n}\r\n\r\nfunc (b SmoothBasalt) New(props BlockProperties) Block {\r\n\treturn SmoothBasalt{}\r\n}"
  },
  {
    "path": "server/world/block/smoothQuartz.go",
    "content": "package block\r\n\r\ntype SmoothQuartz struct {\r\n}\r\n\r\nfunc (b SmoothQuartz) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_quartz\", BlockProperties{}\r\n}\r\n\r\nfunc (b SmoothQuartz) New(props BlockProperties) Block {\r\n\treturn SmoothQuartz{}\r\n}"
  },
  {
    "path": "server/world/block/smoothQuartzSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SmoothQuartzSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SmoothQuartzSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_quartz_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SmoothQuartzSlab) New(props BlockProperties) Block {\r\n\treturn SmoothQuartzSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/smoothQuartzStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SmoothQuartzStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b SmoothQuartzStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_quartz_stairs\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b SmoothQuartzStairs) New(props BlockProperties) Block {\r\n\treturn SmoothQuartzStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/smoothRedSandstone.go",
    "content": "package block\r\n\r\ntype SmoothRedSandstone struct {\r\n}\r\n\r\nfunc (b SmoothRedSandstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_red_sandstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b SmoothRedSandstone) New(props BlockProperties) Block {\r\n\treturn SmoothRedSandstone{}\r\n}"
  },
  {
    "path": "server/world/block/smoothRedSandstoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SmoothRedSandstoneSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SmoothRedSandstoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_red_sandstone_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SmoothRedSandstoneSlab) New(props BlockProperties) Block {\r\n\treturn SmoothRedSandstoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/smoothRedSandstoneStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SmoothRedSandstoneStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SmoothRedSandstoneStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_red_sandstone_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SmoothRedSandstoneStairs) New(props BlockProperties) Block {\r\n\treturn SmoothRedSandstoneStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/smoothSandstone.go",
    "content": "package block\r\n\r\ntype SmoothSandstone struct {\r\n}\r\n\r\nfunc (b SmoothSandstone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_sandstone\", BlockProperties{}\r\n}\r\n\r\nfunc (b SmoothSandstone) New(props BlockProperties) Block {\r\n\treturn SmoothSandstone{}\r\n}"
  },
  {
    "path": "server/world/block/smoothSandstoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SmoothSandstoneSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SmoothSandstoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_sandstone_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SmoothSandstoneSlab) New(props BlockProperties) Block {\r\n\treturn SmoothSandstoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/smoothSandstoneStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SmoothSandstoneStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b SmoothSandstoneStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_sandstone_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SmoothSandstoneStairs) New(props BlockProperties) Block {\r\n\treturn SmoothSandstoneStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/smoothStone.go",
    "content": "package block\r\n\r\ntype SmoothStone struct {\r\n}\r\n\r\nfunc (b SmoothStone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_stone\", BlockProperties{}\r\n}\r\n\r\nfunc (b SmoothStone) New(props BlockProperties) Block {\r\n\treturn SmoothStone{}\r\n}"
  },
  {
    "path": "server/world/block/smoothStoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SmoothStoneSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SmoothStoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:smooth_stone_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b SmoothStoneSlab) New(props BlockProperties) Block {\r\n\treturn SmoothStoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/snifferEgg.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SnifferEgg struct {\r\n\tHatch int\r\n}\r\n\r\nfunc (b SnifferEgg) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sniffer_egg\", BlockProperties{\r\n\t\t\"hatch\": strconv.Itoa(b.Hatch),\r\n\t}\r\n}\r\n\r\nfunc (b SnifferEgg) New(props BlockProperties) Block {\r\n\treturn SnifferEgg{\r\n\t\tHatch: atoi(props[\"hatch\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/snow.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Snow struct {\r\n\tLayers int\r\n}\r\n\r\nfunc (b Snow) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:snow\", BlockProperties{\r\n\t\t\"layers\": strconv.Itoa(b.Layers),\r\n\t}\r\n}\r\n\r\nfunc (b Snow) New(props BlockProperties) Block {\r\n\treturn Snow{\r\n\t\tLayers: atoi(props[\"layers\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/snowBlock.go",
    "content": "package block\r\n\r\ntype SnowBlock struct {\r\n}\r\n\r\nfunc (b SnowBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:snow_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b SnowBlock) New(props BlockProperties) Block {\r\n\treturn SnowBlock{}\r\n}"
  },
  {
    "path": "server/world/block/soulCampfire.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SoulCampfire struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tLit bool\r\n\tSignalFire bool\r\n}\r\n\r\nfunc (b SoulCampfire) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:soul_campfire\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"signal_fire\": strconv.FormatBool(b.SignalFire),\r\n\t}\r\n}\r\n\r\nfunc (b SoulCampfire) New(props BlockProperties) Block {\r\n\treturn SoulCampfire{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tSignalFire: props[\"signal_fire\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/soulFire.go",
    "content": "package block\r\n\r\ntype SoulFire struct {\r\n}\r\n\r\nfunc (b SoulFire) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:soul_fire\", BlockProperties{}\r\n}\r\n\r\nfunc (b SoulFire) New(props BlockProperties) Block {\r\n\treturn SoulFire{}\r\n}"
  },
  {
    "path": "server/world/block/soulLantern.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SoulLantern struct {\r\n\tHanging bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SoulLantern) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:soul_lantern\", BlockProperties{\r\n\t\t\"hanging\": strconv.FormatBool(b.Hanging),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SoulLantern) New(props BlockProperties) Block {\r\n\treturn SoulLantern{\r\n\t\tHanging: props[\"hanging\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/soulSand.go",
    "content": "package block\r\n\r\ntype SoulSand struct {\r\n}\r\n\r\nfunc (b SoulSand) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:soul_sand\", BlockProperties{}\r\n}\r\n\r\nfunc (b SoulSand) New(props BlockProperties) Block {\r\n\treturn SoulSand{}\r\n}"
  },
  {
    "path": "server/world/block/soulSoil.go",
    "content": "package block\r\n\r\ntype SoulSoil struct {\r\n}\r\n\r\nfunc (b SoulSoil) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:soul_soil\", BlockProperties{}\r\n}\r\n\r\nfunc (b SoulSoil) New(props BlockProperties) Block {\r\n\treturn SoulSoil{}\r\n}"
  },
  {
    "path": "server/world/block/soulTorch.go",
    "content": "package block\r\n\r\ntype SoulTorch struct {\r\n}\r\n\r\nfunc (b SoulTorch) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:soul_torch\", BlockProperties{}\r\n}\r\n\r\nfunc (b SoulTorch) New(props BlockProperties) Block {\r\n\treturn SoulTorch{}\r\n}"
  },
  {
    "path": "server/world/block/soulWallTorch.go",
    "content": "package block\r\n\r\ntype SoulWallTorch struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b SoulWallTorch) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:soul_wall_torch\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b SoulWallTorch) New(props BlockProperties) Block {\r\n\treturn SoulWallTorch{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spawner.go",
    "content": "package block\r\n\r\ntype Spawner struct {\r\n}\r\n\r\nfunc (b Spawner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spawner\", BlockProperties{}\r\n}\r\n\r\nfunc (b Spawner) New(props BlockProperties) Block {\r\n\treturn Spawner{}\r\n}"
  },
  {
    "path": "server/world/block/sponge.go",
    "content": "package block\r\n\r\ntype Sponge struct {\r\n}\r\n\r\nfunc (b Sponge) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sponge\", BlockProperties{}\r\n}\r\n\r\nfunc (b Sponge) New(props BlockProperties) Block {\r\n\treturn Sponge{}\r\n}"
  },
  {
    "path": "server/world/block/sporeBlossom.go",
    "content": "package block\r\n\r\ntype SporeBlossom struct {\r\n}\r\n\r\nfunc (b SporeBlossom) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spore_blossom\", BlockProperties{}\r\n}\r\n\r\nfunc (b SporeBlossom) New(props BlockProperties) Block {\r\n\treturn SporeBlossom{}\r\n}"
  },
  {
    "path": "server/world/block/spruceButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceButton struct {\r\n\tFace string\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b SpruceButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_button\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"face\": b.Face,\r\n\t}\r\n}\r\n\r\nfunc (b SpruceButton) New(props BlockProperties) Block {\r\n\treturn SpruceButton{\r\n\t\tFace: props[\"face\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceDoor struct {\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n}\r\n\r\nfunc (b SpruceDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_door\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b SpruceDoor) New(props BlockProperties) Block {\r\n\treturn SpruceDoor{\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceFence struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b SpruceFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_fence\", BlockProperties{\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SpruceFence) New(props BlockProperties) Block {\r\n\treturn SpruceFence{\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceFenceGate struct {\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n\tInWall bool\r\n}\r\n\r\nfunc (b SpruceFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_fence_gate\", BlockProperties{\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t}\r\n}\r\n\r\nfunc (b SpruceFenceGate) New(props BlockProperties) Block {\r\n\treturn SpruceFenceGate{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceHangingSign struct {\r\n\tAttached bool\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SpruceHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_hanging_sign\", BlockProperties{\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SpruceHangingSign) New(props BlockProperties) Block {\r\n\treturn SpruceHangingSign{\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceLeaves.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceLeaves struct {\r\n\tPersistent bool\r\n\tWaterlogged bool\r\n\tDistance int\r\n}\r\n\r\nfunc (b SpruceLeaves) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_leaves\", BlockProperties{\r\n\t\t\"persistent\": strconv.FormatBool(b.Persistent),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"distance\": strconv.Itoa(b.Distance),\r\n\t}\r\n}\r\n\r\nfunc (b SpruceLeaves) New(props BlockProperties) Block {\r\n\treturn SpruceLeaves{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tDistance: atoi(props[\"distance\"]),\r\n\t\tPersistent: props[\"persistent\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceLog.go",
    "content": "package block\r\n\r\ntype SpruceLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b SpruceLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b SpruceLog) New(props BlockProperties) Block {\r\n\treturn SpruceLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/sprucePlanks.go",
    "content": "package block\r\n\r\ntype SprucePlanks struct {\r\n}\r\n\r\nfunc (b SprucePlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b SprucePlanks) New(props BlockProperties) Block {\r\n\treturn SprucePlanks{}\r\n}"
  },
  {
    "path": "server/world/block/sprucePressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SprucePressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b SprucePressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b SprucePressurePlate) New(props BlockProperties) Block {\r\n\treturn SprucePressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceSapling.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceSapling struct {\r\n\tStage int\r\n}\r\n\r\nfunc (b SpruceSapling) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_sapling\", BlockProperties{\r\n\t\t\"stage\": strconv.Itoa(b.Stage),\r\n\t}\r\n}\r\n\r\nfunc (b SpruceSapling) New(props BlockProperties) Block {\r\n\treturn SpruceSapling{\r\n\t\tStage: atoi(props[\"stage\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceSign struct {\r\n\tWaterlogged bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b SpruceSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_sign\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SpruceSign) New(props BlockProperties) Block {\r\n\treturn SpruceSign{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceSlab struct {\r\n\tWaterlogged bool\r\n\tType string\r\n}\r\n\r\nfunc (b SpruceSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b SpruceSlab) New(props BlockProperties) Block {\r\n\treturn SpruceSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b SpruceStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_stairs\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b SpruceStairs) New(props BlockProperties) Block {\r\n\treturn SpruceStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceTrapdoor struct {\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b SpruceTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_trapdoor\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b SpruceTrapdoor) New(props BlockProperties) Block {\r\n\treturn SpruceTrapdoor{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceWallHangingSign struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b SpruceWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_wall_hanging_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SpruceWallHangingSign) New(props BlockProperties) Block {\r\n\treturn SpruceWallHangingSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SpruceWallSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b SpruceWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_wall_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b SpruceWallSign) New(props BlockProperties) Block {\r\n\treturn SpruceWallSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/spruceWood.go",
    "content": "package block\r\n\r\ntype SpruceWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b SpruceWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:spruce_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b SpruceWood) New(props BlockProperties) Block {\r\n\treturn SpruceWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/stickyPiston.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype StickyPiston struct {\r\n\tExtended bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b StickyPiston) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sticky_piston\", BlockProperties{\r\n\t\t\"extended\": strconv.FormatBool(b.Extended),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b StickyPiston) New(props BlockProperties) Block {\r\n\treturn StickyPiston{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tExtended: props[\"extended\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/stone.go",
    "content": "package block\r\n\r\ntype Stone struct {\r\n}\r\n\r\nfunc (b Stone) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stone\", BlockProperties{}\r\n}\r\n\r\nfunc (b Stone) New(props BlockProperties) Block {\r\n\treturn Stone{}\r\n}"
  },
  {
    "path": "server/world/block/stoneBrickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype StoneBrickSlab struct {\r\n\tWaterlogged bool\r\n\tType string\r\n}\r\n\r\nfunc (b StoneBrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stone_brick_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b StoneBrickSlab) New(props BlockProperties) Block {\r\n\treturn StoneBrickSlab{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/stoneBrickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype StoneBrickStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b StoneBrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stone_brick_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b StoneBrickStairs) New(props BlockProperties) Block {\r\n\treturn StoneBrickStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/stoneBrickWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype StoneBrickWall struct {\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b StoneBrickWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stone_brick_wall\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t}\r\n}\r\n\r\nfunc (b StoneBrickWall) New(props BlockProperties) Block {\r\n\treturn StoneBrickWall{\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t\tNorth: props[\"north\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/stoneBricks.go",
    "content": "package block\r\n\r\ntype StoneBricks struct {\r\n}\r\n\r\nfunc (b StoneBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stone_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b StoneBricks) New(props BlockProperties) Block {\r\n\treturn StoneBricks{}\r\n}"
  },
  {
    "path": "server/world/block/stoneButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype StoneButton struct {\r\n\tFace string\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b StoneButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stone_button\", BlockProperties{\r\n\t\t\"face\": b.Face,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b StoneButton) New(props BlockProperties) Block {\r\n\treturn StoneButton{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFace: props[\"face\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/stonePressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype StonePressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b StonePressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stone_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b StonePressurePlate) New(props BlockProperties) Block {\r\n\treturn StonePressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/stoneSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype StoneSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b StoneSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stone_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b StoneSlab) New(props BlockProperties) Block {\r\n\treturn StoneSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/stoneStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype StoneStairs struct {\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n}\r\n\r\nfunc (b StoneStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stone_stairs\", BlockProperties{\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b StoneStairs) New(props BlockProperties) Block {\r\n\treturn StoneStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/stonecutter.go",
    "content": "package block\r\n\r\ntype Stonecutter struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b Stonecutter) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stonecutter\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b Stonecutter) New(props BlockProperties) Block {\r\n\treturn Stonecutter{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedAcaciaLog.go",
    "content": "package block\r\n\r\ntype StrippedAcaciaLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedAcaciaLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_acacia_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedAcaciaLog) New(props BlockProperties) Block {\r\n\treturn StrippedAcaciaLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedAcaciaWood.go",
    "content": "package block\r\n\r\ntype StrippedAcaciaWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedAcaciaWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_acacia_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedAcaciaWood) New(props BlockProperties) Block {\r\n\treturn StrippedAcaciaWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedBambooBlock.go",
    "content": "package block\r\n\r\ntype StrippedBambooBlock struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedBambooBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_bamboo_block\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedBambooBlock) New(props BlockProperties) Block {\r\n\treturn StrippedBambooBlock{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedBirchLog.go",
    "content": "package block\r\n\r\ntype StrippedBirchLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedBirchLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_birch_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedBirchLog) New(props BlockProperties) Block {\r\n\treturn StrippedBirchLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedBirchWood.go",
    "content": "package block\r\n\r\ntype StrippedBirchWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedBirchWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_birch_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedBirchWood) New(props BlockProperties) Block {\r\n\treturn StrippedBirchWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedCherryLog.go",
    "content": "package block\r\n\r\ntype StrippedCherryLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedCherryLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_cherry_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedCherryLog) New(props BlockProperties) Block {\r\n\treturn StrippedCherryLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedCherryWood.go",
    "content": "package block\r\n\r\ntype StrippedCherryWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedCherryWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_cherry_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedCherryWood) New(props BlockProperties) Block {\r\n\treturn StrippedCherryWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedCrimsonHyphae.go",
    "content": "package block\r\n\r\ntype StrippedCrimsonHyphae struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedCrimsonHyphae) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_crimson_hyphae\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedCrimsonHyphae) New(props BlockProperties) Block {\r\n\treturn StrippedCrimsonHyphae{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedCrimsonStem.go",
    "content": "package block\r\n\r\ntype StrippedCrimsonStem struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedCrimsonStem) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_crimson_stem\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedCrimsonStem) New(props BlockProperties) Block {\r\n\treturn StrippedCrimsonStem{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedDarkOakLog.go",
    "content": "package block\r\n\r\ntype StrippedDarkOakLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedDarkOakLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_dark_oak_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedDarkOakLog) New(props BlockProperties) Block {\r\n\treturn StrippedDarkOakLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedDarkOakWood.go",
    "content": "package block\r\n\r\ntype StrippedDarkOakWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedDarkOakWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_dark_oak_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedDarkOakWood) New(props BlockProperties) Block {\r\n\treturn StrippedDarkOakWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedJungleLog.go",
    "content": "package block\r\n\r\ntype StrippedJungleLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedJungleLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_jungle_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedJungleLog) New(props BlockProperties) Block {\r\n\treturn StrippedJungleLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedJungleWood.go",
    "content": "package block\r\n\r\ntype StrippedJungleWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedJungleWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_jungle_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedJungleWood) New(props BlockProperties) Block {\r\n\treturn StrippedJungleWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedMangroveLog.go",
    "content": "package block\r\n\r\ntype StrippedMangroveLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedMangroveLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_mangrove_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedMangroveLog) New(props BlockProperties) Block {\r\n\treturn StrippedMangroveLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedMangroveWood.go",
    "content": "package block\r\n\r\ntype StrippedMangroveWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedMangroveWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_mangrove_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedMangroveWood) New(props BlockProperties) Block {\r\n\treturn StrippedMangroveWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedOakLog.go",
    "content": "package block\r\n\r\ntype StrippedOakLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedOakLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_oak_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedOakLog) New(props BlockProperties) Block {\r\n\treturn StrippedOakLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedOakWood.go",
    "content": "package block\r\n\r\ntype StrippedOakWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedOakWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_oak_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedOakWood) New(props BlockProperties) Block {\r\n\treturn StrippedOakWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedSpruceLog.go",
    "content": "package block\r\n\r\ntype StrippedSpruceLog struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedSpruceLog) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_spruce_log\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedSpruceLog) New(props BlockProperties) Block {\r\n\treturn StrippedSpruceLog{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedSpruceWood.go",
    "content": "package block\r\n\r\ntype StrippedSpruceWood struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedSpruceWood) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_spruce_wood\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedSpruceWood) New(props BlockProperties) Block {\r\n\treturn StrippedSpruceWood{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedWarpedHyphae.go",
    "content": "package block\r\n\r\ntype StrippedWarpedHyphae struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedWarpedHyphae) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_warped_hyphae\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedWarpedHyphae) New(props BlockProperties) Block {\r\n\treturn StrippedWarpedHyphae{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/strippedWarpedStem.go",
    "content": "package block\r\n\r\ntype StrippedWarpedStem struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b StrippedWarpedStem) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:stripped_warped_stem\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b StrippedWarpedStem) New(props BlockProperties) Block {\r\n\treturn StrippedWarpedStem{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/structureBlock.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype StructureBlock struct {\r\n\tMode string\r\n}\r\n\r\nfunc (b StructureBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:structure_block\", BlockProperties{\r\n\t\t\"mode\": b.Mode,\r\n\t}\r\n}\r\n\r\nfunc (b StructureBlock) New(props BlockProperties) Block {\r\n\treturn StructureBlock{\r\n\t\tMode: props[\"mode\"],\r\n\t}\r\n}\r\n\r\nfunc (b StructureBlock) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:structure_block\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/structureVoid.go",
    "content": "package block\r\n\r\ntype StructureVoid struct {\r\n}\r\n\r\nfunc (b StructureVoid) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:structure_void\", BlockProperties{}\r\n}\r\n\r\nfunc (b StructureVoid) New(props BlockProperties) Block {\r\n\treturn StructureVoid{}\r\n}"
  },
  {
    "path": "server/world/block/sugarCane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SugarCane struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b SugarCane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sugar_cane\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b SugarCane) New(props BlockProperties) Block {\r\n\treturn SugarCane{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/sunflower.go",
    "content": "package block\r\n\r\ntype Sunflower struct {\r\n\tHalf string\r\n}\r\n\r\nfunc (b Sunflower) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sunflower\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b Sunflower) New(props BlockProperties) Block {\r\n\treturn Sunflower{\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/suspiciousGravel.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SuspiciousGravel struct {\r\n\tDusted int\r\n}\r\n\r\nfunc (b SuspiciousGravel) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:suspicious_gravel\", BlockProperties{\r\n\t\t\"dusted\": strconv.Itoa(b.Dusted),\r\n\t}\r\n}\r\n\r\nfunc (b SuspiciousGravel) New(props BlockProperties) Block {\r\n\treturn SuspiciousGravel{\r\n\t\tDusted: atoi(props[\"dusted\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/suspiciousSand.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SuspiciousSand struct {\r\n\tDusted int\r\n}\r\n\r\nfunc (b SuspiciousSand) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:suspicious_sand\", BlockProperties{\r\n\t\t\"dusted\": strconv.Itoa(b.Dusted),\r\n\t}\r\n}\r\n\r\nfunc (b SuspiciousSand) New(props BlockProperties) Block {\r\n\treturn SuspiciousSand{\r\n\t\tDusted: atoi(props[\"dusted\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/sweetBerryBush.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype SweetBerryBush struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b SweetBerryBush) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:sweet_berry_bush\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b SweetBerryBush) New(props BlockProperties) Block {\r\n\treturn SweetBerryBush{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tallGrass.go",
    "content": "package block\r\n\r\ntype TallGrass struct {\r\n\tHalf string\r\n}\r\n\r\nfunc (b TallGrass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tall_grass\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b TallGrass) New(props BlockProperties) Block {\r\n\treturn TallGrass{\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tallSeagrass.go",
    "content": "package block\r\n\r\ntype TallSeagrass struct {\r\n\tHalf string\r\n}\r\n\r\nfunc (b TallSeagrass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tall_seagrass\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b TallSeagrass) New(props BlockProperties) Block {\r\n\treturn TallSeagrass{\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/target.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Target struct {\r\n\tPower int\r\n}\r\n\r\nfunc (b Target) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:target\", BlockProperties{\r\n\t\t\"power\": strconv.Itoa(b.Power),\r\n\t}\r\n}\r\n\r\nfunc (b Target) New(props BlockProperties) Block {\r\n\treturn Target{\r\n\t\tPower: atoi(props[\"power\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/terracotta.go",
    "content": "package block\r\n\r\ntype Terracotta struct {\r\n}\r\n\r\nfunc (b Terracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b Terracotta) New(props BlockProperties) Block {\r\n\treturn Terracotta{}\r\n}"
  },
  {
    "path": "server/world/block/tintedGlass.go",
    "content": "package block\r\n\r\ntype TintedGlass struct {\r\n}\r\n\r\nfunc (b TintedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tinted_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b TintedGlass) New(props BlockProperties) Block {\r\n\treturn TintedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/tnt.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Tnt struct {\r\n\tUnstable bool\r\n}\r\n\r\nfunc (b Tnt) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tnt\", BlockProperties{\r\n\t\t\"unstable\": strconv.FormatBool(b.Unstable),\r\n\t}\r\n}\r\n\r\nfunc (b Tnt) New(props BlockProperties) Block {\r\n\treturn Tnt{\r\n\t\tUnstable: props[\"unstable\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/torch.go",
    "content": "package block\r\n\r\ntype Torch struct {\r\n}\r\n\r\nfunc (b Torch) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:torch\", BlockProperties{}\r\n}\r\n\r\nfunc (b Torch) New(props BlockProperties) Block {\r\n\treturn Torch{}\r\n}"
  },
  {
    "path": "server/world/block/torchflower.go",
    "content": "package block\r\n\r\ntype Torchflower struct {\r\n}\r\n\r\nfunc (b Torchflower) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:torchflower\", BlockProperties{}\r\n}\r\n\r\nfunc (b Torchflower) New(props BlockProperties) Block {\r\n\treturn Torchflower{}\r\n}"
  },
  {
    "path": "server/world/block/torchflowerCrop.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TorchflowerCrop struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b TorchflowerCrop) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:torchflower_crop\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b TorchflowerCrop) New(props BlockProperties) Block {\r\n\treturn TorchflowerCrop{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/trappedChest.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype TrappedChest struct {\r\n\tWaterlogged bool\r\n\tType string\r\n\tFacing string\r\n}\r\n\r\nfunc (b TrappedChest) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:trapped_chest\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b TrappedChest) New(props BlockProperties) Block {\r\n\treturn TrappedChest{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}\r\n\r\nfunc (b TrappedChest) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:trapped_chest\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/trialSpawner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype TrialSpawner struct {\r\n\tTrialSpawnerState string\r\n\tOminous bool\r\n}\r\n\r\nfunc (b TrialSpawner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:trial_spawner\", BlockProperties{\r\n\t\t\"ominous\": strconv.FormatBool(b.Ominous),\r\n\t\t\"trial_spawner_state\": b.TrialSpawnerState,\r\n\t}\r\n}\r\n\r\nfunc (b TrialSpawner) New(props BlockProperties) Block {\r\n\treturn TrialSpawner{\r\n\t\tOminous: props[\"ominous\"] != \"false\",\r\n\t\tTrialSpawnerState: props[\"trial_spawner_state\"],\r\n\t}\r\n}\r\n\r\nfunc (b TrialSpawner) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:trial_spawner\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tripwire.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Tripwire struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tPowered bool\r\n\tSouth bool\r\n\tWest bool\r\n\tAttached bool\r\n\tDisarmed bool\r\n}\r\n\r\nfunc (b Tripwire) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tripwire\", BlockProperties{\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"disarmed\": strconv.FormatBool(b.Disarmed),\r\n\t}\r\n}\r\n\r\nfunc (b Tripwire) New(props BlockProperties) Block {\r\n\treturn Tripwire{\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t\tDisarmed: props[\"disarmed\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tripwireHook.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TripwireHook struct {\r\n\tPowered bool\r\n\tAttached bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b TripwireHook) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tripwire_hook\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b TripwireHook) New(props BlockProperties) Block {\r\n\treturn TripwireHook{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tubeCoral.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TubeCoral struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b TubeCoral) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tube_coral\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b TubeCoral) New(props BlockProperties) Block {\r\n\treturn TubeCoral{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tubeCoralBlock.go",
    "content": "package block\r\n\r\ntype TubeCoralBlock struct {\r\n}\r\n\r\nfunc (b TubeCoralBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tube_coral_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b TubeCoralBlock) New(props BlockProperties) Block {\r\n\treturn TubeCoralBlock{}\r\n}"
  },
  {
    "path": "server/world/block/tubeCoralFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TubeCoralFan struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b TubeCoralFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tube_coral_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b TubeCoralFan) New(props BlockProperties) Block {\r\n\treturn TubeCoralFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tubeCoralWallFan.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TubeCoralWallFan struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b TubeCoralWallFan) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tube_coral_wall_fan\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b TubeCoralWallFan) New(props BlockProperties) Block {\r\n\treturn TubeCoralWallFan{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tuff.go",
    "content": "package block\r\n\r\ntype Tuff struct {\r\n}\r\n\r\nfunc (b Tuff) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tuff\", BlockProperties{}\r\n}\r\n\r\nfunc (b Tuff) New(props BlockProperties) Block {\r\n\treturn Tuff{}\r\n}"
  },
  {
    "path": "server/world/block/tuffBrickSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TuffBrickSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b TuffBrickSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tuff_brick_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b TuffBrickSlab) New(props BlockProperties) Block {\r\n\treturn TuffBrickSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tuffBrickStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TuffBrickStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b TuffBrickStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tuff_brick_stairs\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t}\r\n}\r\n\r\nfunc (b TuffBrickStairs) New(props BlockProperties) Block {\r\n\treturn TuffBrickStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tuffBrickWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TuffBrickWall struct {\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n\tWest string\r\n\tEast string\r\n}\r\n\r\nfunc (b TuffBrickWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tuff_brick_wall\", BlockProperties{\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t}\r\n}\r\n\r\nfunc (b TuffBrickWall) New(props BlockProperties) Block {\r\n\treturn TuffBrickWall{\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tuffBricks.go",
    "content": "package block\r\n\r\ntype TuffBricks struct {\r\n}\r\n\r\nfunc (b TuffBricks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tuff_bricks\", BlockProperties{}\r\n}\r\n\r\nfunc (b TuffBricks) New(props BlockProperties) Block {\r\n\treturn TuffBricks{}\r\n}"
  },
  {
    "path": "server/world/block/tuffSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TuffSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b TuffSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tuff_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b TuffSlab) New(props BlockProperties) Block {\r\n\treturn TuffSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tuffStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TuffStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b TuffStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tuff_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b TuffStairs) New(props BlockProperties) Block {\r\n\treturn TuffStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/tuffWall.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TuffWall struct {\r\n\tWest string\r\n\tEast string\r\n\tNorth string\r\n\tSouth string\r\n\tUp bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b TuffWall) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:tuff_wall\", BlockProperties{\r\n\t\t\"east\": b.East,\r\n\t\t\"north\": b.North,\r\n\t\t\"south\": b.South,\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": b.West,\r\n\t}\r\n}\r\n\r\nfunc (b TuffWall) New(props BlockProperties) Block {\r\n\treturn TuffWall{\r\n\t\tNorth: props[\"north\"],\r\n\t\tSouth: props[\"south\"],\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"],\r\n\t\tEast: props[\"east\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/turtleEgg.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TurtleEgg struct {\r\n\tEggs int\r\n\tHatch int\r\n}\r\n\r\nfunc (b TurtleEgg) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:turtle_egg\", BlockProperties{\r\n\t\t\"eggs\": strconv.Itoa(b.Eggs),\r\n\t\t\"hatch\": strconv.Itoa(b.Hatch),\r\n\t}\r\n}\r\n\r\nfunc (b TurtleEgg) New(props BlockProperties) Block {\r\n\treturn TurtleEgg{\r\n\t\tEggs: atoi(props[\"eggs\"]),\r\n\t\tHatch: atoi(props[\"hatch\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/twistingVines.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype TwistingVines struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b TwistingVines) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:twisting_vines\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b TwistingVines) New(props BlockProperties) Block {\r\n\treturn TwistingVines{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/twistingVinesPlant.go",
    "content": "package block\r\n\r\ntype TwistingVinesPlant struct {\r\n}\r\n\r\nfunc (b TwistingVinesPlant) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:twisting_vines_plant\", BlockProperties{}\r\n}\r\n\r\nfunc (b TwistingVinesPlant) New(props BlockProperties) Block {\r\n\treturn TwistingVinesPlant{}\r\n}"
  },
  {
    "path": "server/world/block/vault.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\ntype Vault struct {\r\n\tFacing string\r\n\tOminous bool\r\n\tVaultState string\r\n}\r\n\r\nfunc (b Vault) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:vault\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"ominous\": strconv.FormatBool(b.Ominous),\r\n\t\t\"vault_state\": b.VaultState,\r\n\t}\r\n}\r\n\r\nfunc (b Vault) New(props BlockProperties) Block {\r\n\treturn Vault{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOminous: props[\"ominous\"] != \"false\",\r\n\t\tVaultState: props[\"vault_state\"],\r\n\t}\r\n}\r\n\r\nfunc (b Vault) BlockEntity(pos pos.BlockPosition) chunk.BlockEntity {\r\n\treturn chunk.BlockEntity{\r\n\t\tId:    \"minecraft:vault\",\r\n\t\tX:     pos.X(), Y: pos.Y(), Z: pos.Z(),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/verdantFroglight.go",
    "content": "package block\r\n\r\ntype VerdantFroglight struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b VerdantFroglight) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:verdant_froglight\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b VerdantFroglight) New(props BlockProperties) Block {\r\n\treturn VerdantFroglight{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/vine.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Vine struct {\r\n\tNorth bool\r\n\tSouth bool\r\n\tUp bool\r\n\tWest bool\r\n\tEast bool\r\n}\r\n\r\nfunc (b Vine) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:vine\", BlockProperties{\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"up\": strconv.FormatBool(b.Up),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t}\r\n}\r\n\r\nfunc (b Vine) New(props BlockProperties) Block {\r\n\treturn Vine{\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tUp: props[\"up\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/voidAir.go",
    "content": "package block\r\n\r\ntype VoidAir struct {\r\n}\r\n\r\nfunc (b VoidAir) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:void_air\", BlockProperties{}\r\n}\r\n\r\nfunc (b VoidAir) New(props BlockProperties) Block {\r\n\treturn VoidAir{}\r\n}"
  },
  {
    "path": "server/world/block/wallTorch.go",
    "content": "package block\r\n\r\ntype WallTorch struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b WallTorch) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:wall_torch\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b WallTorch) New(props BlockProperties) Block {\r\n\treturn WallTorch{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedButton.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedButton struct {\r\n\tFacing string\r\n\tPowered bool\r\n\tFace string\r\n}\r\n\r\nfunc (b WarpedButton) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_button\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"face\": b.Face,\r\n\t}\r\n}\r\n\r\nfunc (b WarpedButton) New(props BlockProperties) Block {\r\n\treturn WarpedButton{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFace: props[\"face\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedDoor struct {\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n}\r\n\r\nfunc (b WarpedDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_door\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WarpedDoor) New(props BlockProperties) Block {\r\n\treturn WarpedDoor{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedFence.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedFence struct {\r\n\tWest bool\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WarpedFence) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_fence\", BlockProperties{\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t}\r\n}\r\n\r\nfunc (b WarpedFence) New(props BlockProperties) Block {\r\n\treturn WarpedFence{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedFenceGate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedFenceGate struct {\r\n\tFacing string\r\n\tInWall bool\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WarpedFenceGate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_fence_gate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"in_wall\": strconv.FormatBool(b.InWall),\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t}\r\n}\r\n\r\nfunc (b WarpedFenceGate) New(props BlockProperties) Block {\r\n\treturn WarpedFenceGate{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tInWall: props[\"in_wall\"] != \"false\",\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedFungus.go",
    "content": "package block\r\n\r\ntype WarpedFungus struct {\r\n}\r\n\r\nfunc (b WarpedFungus) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_fungus\", BlockProperties{}\r\n}\r\n\r\nfunc (b WarpedFungus) New(props BlockProperties) Block {\r\n\treturn WarpedFungus{}\r\n}"
  },
  {
    "path": "server/world/block/warpedHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedHangingSign struct {\r\n\tAttached bool\r\n\tRotation int\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WarpedHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_hanging_sign\", BlockProperties{\r\n\t\t\"attached\": strconv.FormatBool(b.Attached),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WarpedHangingSign) New(props BlockProperties) Block {\r\n\treturn WarpedHangingSign{\r\n\t\tAttached: props[\"attached\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedHyphae.go",
    "content": "package block\r\n\r\ntype WarpedHyphae struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b WarpedHyphae) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_hyphae\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b WarpedHyphae) New(props BlockProperties) Block {\r\n\treturn WarpedHyphae{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedNylium.go",
    "content": "package block\r\n\r\ntype WarpedNylium struct {\r\n}\r\n\r\nfunc (b WarpedNylium) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_nylium\", BlockProperties{}\r\n}\r\n\r\nfunc (b WarpedNylium) New(props BlockProperties) Block {\r\n\treturn WarpedNylium{}\r\n}"
  },
  {
    "path": "server/world/block/warpedPlanks.go",
    "content": "package block\r\n\r\ntype WarpedPlanks struct {\r\n}\r\n\r\nfunc (b WarpedPlanks) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_planks\", BlockProperties{}\r\n}\r\n\r\nfunc (b WarpedPlanks) New(props BlockProperties) Block {\r\n\treturn WarpedPlanks{}\r\n}"
  },
  {
    "path": "server/world/block/warpedPressurePlate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedPressurePlate struct {\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WarpedPressurePlate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_pressure_plate\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WarpedPressurePlate) New(props BlockProperties) Block {\r\n\treturn WarpedPressurePlate{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedRoots.go",
    "content": "package block\r\n\r\ntype WarpedRoots struct {\r\n}\r\n\r\nfunc (b WarpedRoots) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_roots\", BlockProperties{}\r\n}\r\n\r\nfunc (b WarpedRoots) New(props BlockProperties) Block {\r\n\treturn WarpedRoots{}\r\n}"
  },
  {
    "path": "server/world/block/warpedSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedSign struct {\r\n\tWaterlogged bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b WarpedSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_sign\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b WarpedSign) New(props BlockProperties) Block {\r\n\treturn WarpedSign{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WarpedSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WarpedSlab) New(props BlockProperties) Block {\r\n\treturn WarpedSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WarpedStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_stairs\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t}\r\n}\r\n\r\nfunc (b WarpedStairs) New(props BlockProperties) Block {\r\n\treturn WarpedStairs{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedStem.go",
    "content": "package block\r\n\r\ntype WarpedStem struct {\r\n\tAxis string\r\n}\r\n\r\nfunc (b WarpedStem) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_stem\", BlockProperties{\r\n\t\t\"axis\": b.Axis,\r\n\t}\r\n}\r\n\r\nfunc (b WarpedStem) New(props BlockProperties) Block {\r\n\treturn WarpedStem{\r\n\t\tAxis: props[\"axis\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedTrapdoor struct {\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b WarpedTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_trapdoor\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b WarpedTrapdoor) New(props BlockProperties) Block {\r\n\treturn WarpedTrapdoor{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedWallHangingSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedWallHangingSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WarpedWallHangingSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_wall_hanging_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WarpedWallHangingSign) New(props BlockProperties) Block {\r\n\treturn WarpedWallHangingSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedWallSign.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WarpedWallSign struct {\r\n\tFacing string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WarpedWallSign) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_wall_sign\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WarpedWallSign) New(props BlockProperties) Block {\r\n\treturn WarpedWallSign{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/warpedWartBlock.go",
    "content": "package block\r\n\r\ntype WarpedWartBlock struct {\r\n}\r\n\r\nfunc (b WarpedWartBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:warped_wart_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b WarpedWartBlock) New(props BlockProperties) Block {\r\n\treturn WarpedWartBlock{}\r\n}"
  },
  {
    "path": "server/world/block/water.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Water struct {\r\n\tLevel int\r\n}\r\n\r\nfunc (b Water) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:water\", BlockProperties{\r\n\t\t\"level\": strconv.Itoa(b.Level),\r\n\t}\r\n}\r\n\r\nfunc (b Water) New(props BlockProperties) Block {\r\n\treturn Water{\r\n\t\tLevel: atoi(props[\"level\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waterCauldron.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaterCauldron struct {\r\n\tLevel int\r\n}\r\n\r\nfunc (b WaterCauldron) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:water_cauldron\", BlockProperties{\r\n\t\t\"level\": strconv.Itoa(b.Level),\r\n\t}\r\n}\r\n\r\nfunc (b WaterCauldron) New(props BlockProperties) Block {\r\n\treturn WaterCauldron{\r\n\t\tLevel: atoi(props[\"level\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedChiseledCopper.go",
    "content": "package block\r\n\r\ntype WaxedChiseledCopper struct {\r\n}\r\n\r\nfunc (b WaxedChiseledCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_chiseled_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedChiseledCopper) New(props BlockProperties) Block {\r\n\treturn WaxedChiseledCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedCopperBlock.go",
    "content": "package block\r\n\r\ntype WaxedCopperBlock struct {\r\n}\r\n\r\nfunc (b WaxedCopperBlock) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_copper_block\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedCopperBlock) New(props BlockProperties) Block {\r\n\treturn WaxedCopperBlock{}\r\n}"
  },
  {
    "path": "server/world/block/waxedCopperBulb.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedCopperBulb struct {\r\n\tLit bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WaxedCopperBulb) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_copper_bulb\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedCopperBulb) New(props BlockProperties) Block {\r\n\treturn WaxedCopperBulb{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedCopperDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedCopperDoor struct {\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n}\r\n\r\nfunc (b WaxedCopperDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_copper_door\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedCopperDoor) New(props BlockProperties) Block {\r\n\treturn WaxedCopperDoor{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedCopperGrate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedCopperGrate struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedCopperGrate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_copper_grate\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedCopperGrate) New(props BlockProperties) Block {\r\n\treturn WaxedCopperGrate{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedCopperTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedCopperTrapdoor struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WaxedCopperTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_copper_trapdoor\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedCopperTrapdoor) New(props BlockProperties) Block {\r\n\treturn WaxedCopperTrapdoor{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedCutCopper.go",
    "content": "package block\r\n\r\ntype WaxedCutCopper struct {\r\n}\r\n\r\nfunc (b WaxedCutCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_cut_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedCutCopper) New(props BlockProperties) Block {\r\n\treturn WaxedCutCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedCutCopperSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedCutCopperSlab struct {\r\n\tWaterlogged bool\r\n\tType string\r\n}\r\n\r\nfunc (b WaxedCutCopperSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_cut_copper_slab\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"type\": b.Type,\r\n\t}\r\n}\r\n\r\nfunc (b WaxedCutCopperSlab) New(props BlockProperties) Block {\r\n\treturn WaxedCutCopperSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedCutCopperStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedCutCopperStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedCutCopperStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_cut_copper_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedCutCopperStairs) New(props BlockProperties) Block {\r\n\treturn WaxedCutCopperStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedExposedChiseledCopper.go",
    "content": "package block\r\n\r\ntype WaxedExposedChiseledCopper struct {\r\n}\r\n\r\nfunc (b WaxedExposedChiseledCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_exposed_chiseled_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedExposedChiseledCopper) New(props BlockProperties) Block {\r\n\treturn WaxedExposedChiseledCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedExposedCopper.go",
    "content": "package block\r\n\r\ntype WaxedExposedCopper struct {\r\n}\r\n\r\nfunc (b WaxedExposedCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_exposed_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedExposedCopper) New(props BlockProperties) Block {\r\n\treturn WaxedExposedCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedExposedCopperBulb.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedExposedCopperBulb struct {\r\n\tLit bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WaxedExposedCopperBulb) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_exposed_copper_bulb\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedExposedCopperBulb) New(props BlockProperties) Block {\r\n\treturn WaxedExposedCopperBulb{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedExposedCopperDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedExposedCopperDoor struct {\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WaxedExposedCopperDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_exposed_copper_door\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedExposedCopperDoor) New(props BlockProperties) Block {\r\n\treturn WaxedExposedCopperDoor{\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedExposedCopperGrate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedExposedCopperGrate struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedExposedCopperGrate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_exposed_copper_grate\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedExposedCopperGrate) New(props BlockProperties) Block {\r\n\treturn WaxedExposedCopperGrate{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedExposedCopperTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedExposedCopperTrapdoor struct {\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedExposedCopperTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_exposed_copper_trapdoor\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b WaxedExposedCopperTrapdoor) New(props BlockProperties) Block {\r\n\treturn WaxedExposedCopperTrapdoor{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedExposedCutCopper.go",
    "content": "package block\r\n\r\ntype WaxedExposedCutCopper struct {\r\n}\r\n\r\nfunc (b WaxedExposedCutCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_exposed_cut_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedExposedCutCopper) New(props BlockProperties) Block {\r\n\treturn WaxedExposedCutCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedExposedCutCopperSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedExposedCutCopperSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedExposedCutCopperSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_exposed_cut_copper_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedExposedCutCopperSlab) New(props BlockProperties) Block {\r\n\treturn WaxedExposedCutCopperSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedExposedCutCopperStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedExposedCutCopperStairs struct {\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b WaxedExposedCutCopperStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_exposed_cut_copper_stairs\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b WaxedExposedCutCopperStairs) New(props BlockProperties) Block {\r\n\treturn WaxedExposedCutCopperStairs{\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedOxidizedChiseledCopper.go",
    "content": "package block\r\n\r\ntype WaxedOxidizedChiseledCopper struct {\r\n}\r\n\r\nfunc (b WaxedOxidizedChiseledCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_oxidized_chiseled_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedOxidizedChiseledCopper) New(props BlockProperties) Block {\r\n\treturn WaxedOxidizedChiseledCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedOxidizedCopper.go",
    "content": "package block\r\n\r\ntype WaxedOxidizedCopper struct {\r\n}\r\n\r\nfunc (b WaxedOxidizedCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_oxidized_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedOxidizedCopper) New(props BlockProperties) Block {\r\n\treturn WaxedOxidizedCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedOxidizedCopperBulb.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedOxidizedCopperBulb struct {\r\n\tLit bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WaxedOxidizedCopperBulb) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_oxidized_copper_bulb\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedOxidizedCopperBulb) New(props BlockProperties) Block {\r\n\treturn WaxedOxidizedCopperBulb{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedOxidizedCopperDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedOxidizedCopperDoor struct {\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n}\r\n\r\nfunc (b WaxedOxidizedCopperDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_oxidized_copper_door\", BlockProperties{\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b WaxedOxidizedCopperDoor) New(props BlockProperties) Block {\r\n\treturn WaxedOxidizedCopperDoor{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedOxidizedCopperGrate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedOxidizedCopperGrate struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedOxidizedCopperGrate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_oxidized_copper_grate\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedOxidizedCopperGrate) New(props BlockProperties) Block {\r\n\treturn WaxedOxidizedCopperGrate{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedOxidizedCopperTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedOxidizedCopperTrapdoor struct {\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedOxidizedCopperTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_oxidized_copper_trapdoor\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedOxidizedCopperTrapdoor) New(props BlockProperties) Block {\r\n\treturn WaxedOxidizedCopperTrapdoor{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedOxidizedCutCopper.go",
    "content": "package block\r\n\r\ntype WaxedOxidizedCutCopper struct {\r\n}\r\n\r\nfunc (b WaxedOxidizedCutCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_oxidized_cut_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedOxidizedCutCopper) New(props BlockProperties) Block {\r\n\treturn WaxedOxidizedCutCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedOxidizedCutCopperSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedOxidizedCutCopperSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedOxidizedCutCopperSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_oxidized_cut_copper_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedOxidizedCutCopperSlab) New(props BlockProperties) Block {\r\n\treturn WaxedOxidizedCutCopperSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedOxidizedCutCopperStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedOxidizedCutCopperStairs struct {\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedOxidizedCutCopperStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_oxidized_cut_copper_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedOxidizedCutCopperStairs) New(props BlockProperties) Block {\r\n\treturn WaxedOxidizedCutCopperStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedWeatheredChiseledCopper.go",
    "content": "package block\r\n\r\ntype WaxedWeatheredChiseledCopper struct {\r\n}\r\n\r\nfunc (b WaxedWeatheredChiseledCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_weathered_chiseled_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedWeatheredChiseledCopper) New(props BlockProperties) Block {\r\n\treturn WaxedWeatheredChiseledCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedWeatheredCopper.go",
    "content": "package block\r\n\r\ntype WaxedWeatheredCopper struct {\r\n}\r\n\r\nfunc (b WaxedWeatheredCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_weathered_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedWeatheredCopper) New(props BlockProperties) Block {\r\n\treturn WaxedWeatheredCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedWeatheredCopperBulb.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedWeatheredCopperBulb struct {\r\n\tLit bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WaxedWeatheredCopperBulb) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_weathered_copper_bulb\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedWeatheredCopperBulb) New(props BlockProperties) Block {\r\n\treturn WaxedWeatheredCopperBulb{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedWeatheredCopperDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedWeatheredCopperDoor struct {\r\n\tHinge string\r\n\tOpen bool\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n}\r\n\r\nfunc (b WaxedWeatheredCopperDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_weathered_copper_door\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedWeatheredCopperDoor) New(props BlockProperties) Block {\r\n\treturn WaxedWeatheredCopperDoor{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedWeatheredCopperGrate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedWeatheredCopperGrate struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedWeatheredCopperGrate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_weathered_copper_grate\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedWeatheredCopperGrate) New(props BlockProperties) Block {\r\n\treturn WaxedWeatheredCopperGrate{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedWeatheredCopperTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedWeatheredCopperTrapdoor struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WaxedWeatheredCopperTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_weathered_copper_trapdoor\", BlockProperties{\r\n\t\t\"half\": b.Half,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b WaxedWeatheredCopperTrapdoor) New(props BlockProperties) Block {\r\n\treturn WaxedWeatheredCopperTrapdoor{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedWeatheredCutCopper.go",
    "content": "package block\r\n\r\ntype WaxedWeatheredCutCopper struct {\r\n}\r\n\r\nfunc (b WaxedWeatheredCutCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_weathered_cut_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WaxedWeatheredCutCopper) New(props BlockProperties) Block {\r\n\treturn WaxedWeatheredCutCopper{}\r\n}"
  },
  {
    "path": "server/world/block/waxedWeatheredCutCopperSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedWeatheredCutCopperSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WaxedWeatheredCutCopperSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_weathered_cut_copper_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedWeatheredCutCopperSlab) New(props BlockProperties) Block {\r\n\treturn WaxedWeatheredCutCopperSlab{\r\n\t\tType: props[\"type\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/waxedWeatheredCutCopperStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WaxedWeatheredCutCopperStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b WaxedWeatheredCutCopperStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:waxed_weathered_cut_copper_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WaxedWeatheredCutCopperStairs) New(props BlockProperties) Block {\r\n\treturn WaxedWeatheredCutCopperStairs{\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/weatheredChiseledCopper.go",
    "content": "package block\r\n\r\ntype WeatheredChiseledCopper struct {\r\n}\r\n\r\nfunc (b WeatheredChiseledCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weathered_chiseled_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WeatheredChiseledCopper) New(props BlockProperties) Block {\r\n\treturn WeatheredChiseledCopper{}\r\n}"
  },
  {
    "path": "server/world/block/weatheredCopper.go",
    "content": "package block\r\n\r\ntype WeatheredCopper struct {\r\n}\r\n\r\nfunc (b WeatheredCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weathered_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WeatheredCopper) New(props BlockProperties) Block {\r\n\treturn WeatheredCopper{}\r\n}"
  },
  {
    "path": "server/world/block/weatheredCopperBulb.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WeatheredCopperBulb struct {\r\n\tLit bool\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WeatheredCopperBulb) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weathered_copper_bulb\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WeatheredCopperBulb) New(props BlockProperties) Block {\r\n\treturn WeatheredCopperBulb{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/weatheredCopperDoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WeatheredCopperDoor struct {\r\n\tPowered bool\r\n\tFacing string\r\n\tHalf string\r\n\tHinge string\r\n\tOpen bool\r\n}\r\n\r\nfunc (b WeatheredCopperDoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weathered_copper_door\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"hinge\": b.Hinge,\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t}\r\n}\r\n\r\nfunc (b WeatheredCopperDoor) New(props BlockProperties) Block {\r\n\treturn WeatheredCopperDoor{\r\n\t\tHinge: props[\"hinge\"],\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/weatheredCopperGrate.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WeatheredCopperGrate struct {\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WeatheredCopperGrate) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weathered_copper_grate\", BlockProperties{\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WeatheredCopperGrate) New(props BlockProperties) Block {\r\n\treturn WeatheredCopperGrate{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/weatheredCopperTrapdoor.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WeatheredCopperTrapdoor struct {\r\n\tHalf string\r\n\tOpen bool\r\n\tPowered bool\r\n\tWaterlogged bool\r\n\tFacing string\r\n}\r\n\r\nfunc (b WeatheredCopperTrapdoor) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weathered_copper_trapdoor\", BlockProperties{\r\n\t\t\"open\": strconv.FormatBool(b.Open),\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t}\r\n}\r\n\r\nfunc (b WeatheredCopperTrapdoor) New(props BlockProperties) Block {\r\n\treturn WeatheredCopperTrapdoor{\r\n\t\tOpen: props[\"open\"] != \"false\",\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/weatheredCutCopper.go",
    "content": "package block\r\n\r\ntype WeatheredCutCopper struct {\r\n}\r\n\r\nfunc (b WeatheredCutCopper) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weathered_cut_copper\", BlockProperties{}\r\n}\r\n\r\nfunc (b WeatheredCutCopper) New(props BlockProperties) Block {\r\n\treturn WeatheredCutCopper{}\r\n}"
  },
  {
    "path": "server/world/block/weatheredCutCopperSlab.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WeatheredCutCopperSlab struct {\r\n\tType string\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WeatheredCutCopperSlab) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weathered_cut_copper_slab\", BlockProperties{\r\n\t\t\"type\": b.Type,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WeatheredCutCopperSlab) New(props BlockProperties) Block {\r\n\treturn WeatheredCutCopperSlab{\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tType: props[\"type\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/weatheredCutCopperStairs.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WeatheredCutCopperStairs struct {\r\n\tWaterlogged bool\r\n\tFacing string\r\n\tHalf string\r\n\tShape string\r\n}\r\n\r\nfunc (b WeatheredCutCopperStairs) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weathered_cut_copper_stairs\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"half\": b.Half,\r\n\t\t\"shape\": b.Shape,\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WeatheredCutCopperStairs) New(props BlockProperties) Block {\r\n\treturn WeatheredCutCopperStairs{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tHalf: props[\"half\"],\r\n\t\tShape: props[\"shape\"],\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/weepingVines.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WeepingVines struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b WeepingVines) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weeping_vines\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b WeepingVines) New(props BlockProperties) Block {\r\n\treturn WeepingVines{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/weepingVinesPlant.go",
    "content": "package block\r\n\r\ntype WeepingVinesPlant struct {\r\n}\r\n\r\nfunc (b WeepingVinesPlant) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:weeping_vines_plant\", BlockProperties{}\r\n}\r\n\r\nfunc (b WeepingVinesPlant) New(props BlockProperties) Block {\r\n\treturn WeepingVinesPlant{}\r\n}"
  },
  {
    "path": "server/world/block/wetSponge.go",
    "content": "package block\r\n\r\ntype WetSponge struct {\r\n}\r\n\r\nfunc (b WetSponge) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:wet_sponge\", BlockProperties{}\r\n}\r\n\r\nfunc (b WetSponge) New(props BlockProperties) Block {\r\n\treturn WetSponge{}\r\n}"
  },
  {
    "path": "server/world/block/wheat.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype Wheat struct {\r\n\tAge int\r\n}\r\n\r\nfunc (b Wheat) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:wheat\", BlockProperties{\r\n\t\t\"age\": strconv.Itoa(b.Age),\r\n\t}\r\n}\r\n\r\nfunc (b Wheat) New(props BlockProperties) Block {\r\n\treturn Wheat{\r\n\t\tAge: atoi(props[\"age\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/whiteBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WhiteBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b WhiteBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b WhiteBanner) New(props BlockProperties) Block {\r\n\treturn WhiteBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/whiteBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WhiteBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b WhiteBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_bed\", BlockProperties{\r\n\t\t\"part\": b.Part,\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t}\r\n}\r\n\r\nfunc (b WhiteBed) New(props BlockProperties) Block {\r\n\treturn WhiteBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/whiteCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WhiteCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b WhiteCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_candle\", BlockProperties{\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t}\r\n}\r\n\r\nfunc (b WhiteCandle) New(props BlockProperties) Block {\r\n\treturn WhiteCandle{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/whiteCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WhiteCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b WhiteCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b WhiteCandleCake) New(props BlockProperties) Block {\r\n\treturn WhiteCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/whiteCarpet.go",
    "content": "package block\r\n\r\ntype WhiteCarpet struct {\r\n}\r\n\r\nfunc (b WhiteCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b WhiteCarpet) New(props BlockProperties) Block {\r\n\treturn WhiteCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/whiteConcrete.go",
    "content": "package block\r\n\r\ntype WhiteConcrete struct {\r\n}\r\n\r\nfunc (b WhiteConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b WhiteConcrete) New(props BlockProperties) Block {\r\n\treturn WhiteConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/whiteConcretePowder.go",
    "content": "package block\r\n\r\ntype WhiteConcretePowder struct {\r\n}\r\n\r\nfunc (b WhiteConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b WhiteConcretePowder) New(props BlockProperties) Block {\r\n\treturn WhiteConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/whiteGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype WhiteGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b WhiteGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b WhiteGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn WhiteGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/whiteShulkerBox.go",
    "content": "package block\r\n\r\ntype WhiteShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b WhiteShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b WhiteShulkerBox) New(props BlockProperties) Block {\r\n\treturn WhiteShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/whiteStainedGlass.go",
    "content": "package block\r\n\r\ntype WhiteStainedGlass struct {\r\n}\r\n\r\nfunc (b WhiteStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b WhiteStainedGlass) New(props BlockProperties) Block {\r\n\treturn WhiteStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/whiteStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WhiteStainedGlassPane struct {\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n\tEast bool\r\n}\r\n\r\nfunc (b WhiteStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_stained_glass_pane\", BlockProperties{\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t}\r\n}\r\n\r\nfunc (b WhiteStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn WhiteStainedGlassPane{\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/whiteTerracotta.go",
    "content": "package block\r\n\r\ntype WhiteTerracotta struct {\r\n}\r\n\r\nfunc (b WhiteTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b WhiteTerracotta) New(props BlockProperties) Block {\r\n\treturn WhiteTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/whiteTulip.go",
    "content": "package block\r\n\r\ntype WhiteTulip struct {\r\n}\r\n\r\nfunc (b WhiteTulip) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_tulip\", BlockProperties{}\r\n}\r\n\r\nfunc (b WhiteTulip) New(props BlockProperties) Block {\r\n\treturn WhiteTulip{}\r\n}"
  },
  {
    "path": "server/world/block/whiteWallBanner.go",
    "content": "package block\r\n\r\ntype WhiteWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b WhiteWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b WhiteWallBanner) New(props BlockProperties) Block {\r\n\treturn WhiteWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/whiteWool.go",
    "content": "package block\r\n\r\ntype WhiteWool struct {\r\n}\r\n\r\nfunc (b WhiteWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:white_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b WhiteWool) New(props BlockProperties) Block {\r\n\treturn WhiteWool{}\r\n}"
  },
  {
    "path": "server/world/block/witherRose.go",
    "content": "package block\r\n\r\ntype WitherRose struct {\r\n}\r\n\r\nfunc (b WitherRose) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:wither_rose\", BlockProperties{}\r\n}\r\n\r\nfunc (b WitherRose) New(props BlockProperties) Block {\r\n\treturn WitherRose{}\r\n}"
  },
  {
    "path": "server/world/block/witherSkeletonSkull.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WitherSkeletonSkull struct {\r\n\tPowered bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b WitherSkeletonSkull) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:wither_skeleton_skull\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b WitherSkeletonSkull) New(props BlockProperties) Block {\r\n\treturn WitherSkeletonSkull{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/witherSkeletonWallSkull.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype WitherSkeletonWallSkull struct {\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b WitherSkeletonWallSkull) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:wither_skeleton_wall_skull\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b WitherSkeletonWallSkull) New(props BlockProperties) Block {\r\n\treturn WitherSkeletonWallSkull{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/yellowBanner.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype YellowBanner struct {\r\n\tRotation int\r\n}\r\n\r\nfunc (b YellowBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_banner\", BlockProperties{\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b YellowBanner) New(props BlockProperties) Block {\r\n\treturn YellowBanner{\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/yellowBed.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype YellowBed struct {\r\n\tFacing string\r\n\tOccupied bool\r\n\tPart string\r\n}\r\n\r\nfunc (b YellowBed) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_bed\", BlockProperties{\r\n\t\t\"occupied\": strconv.FormatBool(b.Occupied),\r\n\t\t\"part\": b.Part,\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b YellowBed) New(props BlockProperties) Block {\r\n\treturn YellowBed{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tOccupied: props[\"occupied\"] != \"false\",\r\n\t\tPart: props[\"part\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/yellowCandle.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype YellowCandle struct {\r\n\tCandles int\r\n\tLit bool\r\n\tWaterlogged bool\r\n}\r\n\r\nfunc (b YellowCandle) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_candle\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"candles\": strconv.Itoa(b.Candles),\r\n\t}\r\n}\r\n\r\nfunc (b YellowCandle) New(props BlockProperties) Block {\r\n\treturn YellowCandle{\r\n\t\tCandles: atoi(props[\"candles\"]),\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/yellowCandleCake.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype YellowCandleCake struct {\r\n\tLit bool\r\n}\r\n\r\nfunc (b YellowCandleCake) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_candle_cake\", BlockProperties{\r\n\t\t\"lit\": strconv.FormatBool(b.Lit),\r\n\t}\r\n}\r\n\r\nfunc (b YellowCandleCake) New(props BlockProperties) Block {\r\n\treturn YellowCandleCake{\r\n\t\tLit: props[\"lit\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/yellowCarpet.go",
    "content": "package block\r\n\r\ntype YellowCarpet struct {\r\n}\r\n\r\nfunc (b YellowCarpet) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_carpet\", BlockProperties{}\r\n}\r\n\r\nfunc (b YellowCarpet) New(props BlockProperties) Block {\r\n\treturn YellowCarpet{}\r\n}"
  },
  {
    "path": "server/world/block/yellowConcrete.go",
    "content": "package block\r\n\r\ntype YellowConcrete struct {\r\n}\r\n\r\nfunc (b YellowConcrete) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_concrete\", BlockProperties{}\r\n}\r\n\r\nfunc (b YellowConcrete) New(props BlockProperties) Block {\r\n\treturn YellowConcrete{}\r\n}"
  },
  {
    "path": "server/world/block/yellowConcretePowder.go",
    "content": "package block\r\n\r\ntype YellowConcretePowder struct {\r\n}\r\n\r\nfunc (b YellowConcretePowder) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_concrete_powder\", BlockProperties{}\r\n}\r\n\r\nfunc (b YellowConcretePowder) New(props BlockProperties) Block {\r\n\treturn YellowConcretePowder{}\r\n}"
  },
  {
    "path": "server/world/block/yellowGlazedTerracotta.go",
    "content": "package block\r\n\r\ntype YellowGlazedTerracotta struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b YellowGlazedTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_glazed_terracotta\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b YellowGlazedTerracotta) New(props BlockProperties) Block {\r\n\treturn YellowGlazedTerracotta{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/yellowShulkerBox.go",
    "content": "package block\r\n\r\ntype YellowShulkerBox struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b YellowShulkerBox) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_shulker_box\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b YellowShulkerBox) New(props BlockProperties) Block {\r\n\treturn YellowShulkerBox{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/yellowStainedGlass.go",
    "content": "package block\r\n\r\ntype YellowStainedGlass struct {\r\n}\r\n\r\nfunc (b YellowStainedGlass) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_stained_glass\", BlockProperties{}\r\n}\r\n\r\nfunc (b YellowStainedGlass) New(props BlockProperties) Block {\r\n\treturn YellowStainedGlass{}\r\n}"
  },
  {
    "path": "server/world/block/yellowStainedGlassPane.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype YellowStainedGlassPane struct {\r\n\tEast bool\r\n\tNorth bool\r\n\tSouth bool\r\n\tWaterlogged bool\r\n\tWest bool\r\n}\r\n\r\nfunc (b YellowStainedGlassPane) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_stained_glass_pane\", BlockProperties{\r\n\t\t\"north\": strconv.FormatBool(b.North),\r\n\t\t\"south\": strconv.FormatBool(b.South),\r\n\t\t\"waterlogged\": strconv.FormatBool(b.Waterlogged),\r\n\t\t\"west\": strconv.FormatBool(b.West),\r\n\t\t\"east\": strconv.FormatBool(b.East),\r\n\t}\r\n}\r\n\r\nfunc (b YellowStainedGlassPane) New(props BlockProperties) Block {\r\n\treturn YellowStainedGlassPane{\r\n\t\tSouth: props[\"south\"] != \"false\",\r\n\t\tWaterlogged: props[\"waterlogged\"] != \"false\",\r\n\t\tWest: props[\"west\"] != \"false\",\r\n\t\tEast: props[\"east\"] != \"false\",\r\n\t\tNorth: props[\"north\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/yellowTerracotta.go",
    "content": "package block\r\n\r\ntype YellowTerracotta struct {\r\n}\r\n\r\nfunc (b YellowTerracotta) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_terracotta\", BlockProperties{}\r\n}\r\n\r\nfunc (b YellowTerracotta) New(props BlockProperties) Block {\r\n\treturn YellowTerracotta{}\r\n}"
  },
  {
    "path": "server/world/block/yellowWallBanner.go",
    "content": "package block\r\n\r\ntype YellowWallBanner struct {\r\n\tFacing string\r\n}\r\n\r\nfunc (b YellowWallBanner) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_wall_banner\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t}\r\n}\r\n\r\nfunc (b YellowWallBanner) New(props BlockProperties) Block {\r\n\treturn YellowWallBanner{\r\n\t\tFacing: props[\"facing\"],\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/yellowWool.go",
    "content": "package block\r\n\r\ntype YellowWool struct {\r\n}\r\n\r\nfunc (b YellowWool) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:yellow_wool\", BlockProperties{}\r\n}\r\n\r\nfunc (b YellowWool) New(props BlockProperties) Block {\r\n\treturn YellowWool{}\r\n}"
  },
  {
    "path": "server/world/block/zombieHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ZombieHead struct {\r\n\tPowered bool\r\n\tRotation int\r\n}\r\n\r\nfunc (b ZombieHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:zombie_head\", BlockProperties{\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t\t\"rotation\": strconv.Itoa(b.Rotation),\r\n\t}\r\n}\r\n\r\nfunc (b ZombieHead) New(props BlockProperties) Block {\r\n\treturn ZombieHead{\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t\tRotation: atoi(props[\"rotation\"]),\r\n\t}\r\n}"
  },
  {
    "path": "server/world/block/zombieWallHead.go",
    "content": "package block\r\n\r\nimport (\r\n\t\"strconv\"\r\n)\r\n\r\ntype ZombieWallHead struct {\r\n\tFacing string\r\n\tPowered bool\r\n}\r\n\r\nfunc (b ZombieWallHead) Encode() (string, BlockProperties) {\r\n\treturn \"minecraft:zombie_wall_head\", BlockProperties{\r\n\t\t\"facing\": b.Facing,\r\n\t\t\"powered\": strconv.FormatBool(b.Powered),\r\n\t}\r\n}\r\n\r\nfunc (b ZombieWallHead) New(props BlockProperties) Block {\r\n\treturn ZombieWallHead{\r\n\t\tFacing: props[\"facing\"],\r\n\t\tPowered: props[\"powered\"] != \"false\",\r\n\t}\r\n}"
  },
  {
    "path": "server/world/chunk/anvil.go",
    "content": "package chunk\n\ntype AnvilBlock struct {\n\tProperties map[string]string\n\tName       string\n}\n"
  },
  {
    "path": "server/world/chunk/chunk.go",
    "content": "// Package chunk provides a way of encoding and modifying chunks\npackage chunk\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/zeppelinmc/zeppelin/server/container\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk/heightmaps\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk/section\"\n)\n\ntype Generator interface {\n\tNewChunk(x, z int32) Chunk\n\tGenerateWorldSpawn() (x, y, z int32)\n}\n\nconst MinChunkY = -4\n\ntype BlockEntity struct {\n\tId         string `nbt:\"id\"`\n\tX          int32  `nbt:\"x\"`\n\tY          int32  `nbt:\"y\"`\n\tZ          int32  `nbt:\"z\"`\n\tKeepPacked bool   `nbt:\"keepPacked\"`\n\n\t// for chest entities\n\tItems container.Container `nbt:\"Items,omitempty\"`\n}\n\ntype Chunk struct /*{\n\t//LastModified int64\n\tX, Y, Z    int32\n\tHeightmaps heightmaps.Heightmaps\n\n\tSections      []*section.Section\n\tBlockEntities []BlockEntity\n}*/{\n\tDataVersion   int32\n\tHeightmaps    heightmaps.Heightmaps\n\tInhabitedTime int64\n\tLastUpdate    int64\n\tStatus        string\n\tBlockEntities []BlockEntity `nbt:\"block_entities,omitempty\"`\n\n\tSections []section.Section `nbt:\"sections\"`\n\n\tX int32 `nbt:\"xPos\"`\n\tY int32 `nbt:\"yPos\"`\n\tZ int32 `nbt:\"zPos\"`\n}\n\nfunc NewChunk(x, z int32) Chunk {\n\tc := Chunk{\n\t\tY: MinChunkY,\n\t\tX: x,\n\t\tZ: z,\n\t\t//LastModified: time.Now().UnixMilli(),\n\n\t\tSections: make([]section.Section, 24),\n\t}\n\n\tfor i := range c.Sections {\n\t\tc.Sections[i] = section.Section{\n\t\t\tY: int8(i - MinChunkY),\n\t\t\tBlockStates: section.AnvilBlockStates{\n\t\t\t\tPalette: []section.AnvilBlock{{Name: \"minecraft:air\"}},\n\t\t\t},\n\t\t\tBiomes: section.AnvilBiomes{\n\t\t\t\tPalette: []string{\"minecraft:plains\"},\n\t\t\t},\n\t\t\tSkyLight: *(*[]int8)(unsafe.Pointer(&fullLightBuffer)),\n\t\t}\n\t}\n\n\treturn c\n}\n\n// X and Z should be relative to the chunk (aka x&0x0f, z&0x0f), but Y should be absolute.\nfunc (chunk *Chunk) Block(x, y, z int32) (section.AnvilBlock, error) {\n\tsecIndex := (y >> 4) - chunk.Y\n\tif secIndex < 0 || secIndex >= int32(len(chunk.Sections)) {\n\t\treturn section.AnvilBlock{}, fmt.Errorf(\"null section\")\n\t}\n\tsec := chunk.Sections[secIndex]\n\n\treturn sec.Block(byte(x), byte(y)&0x0f, byte(z)), nil\n}\n\n// This function does not update the block for the players, so it should not be used. X and Z should be relative to the chunk (aka x&0x0f, z&0x0f), but Y should be absolute.\nfunc (chunk *Chunk) SetBlock(x, y, z int32, b section.AnvilBlock) (state int64, err error) {\n\t//c.LastModified = time.Now().UnixMilli()\n\tsecIndex := (y >> 4) - chunk.Y\n\tif secIndex < 0 || secIndex >= int32(len(chunk.Sections)) {\n\t\treturn 0, fmt.Errorf(\"null section\")\n\t}\n\tsec := chunk.Sections[secIndex]\n\treturn sec.SetBlock(byte(x), byte(y)&0x0f, byte(z), b), nil\n}\n\n// This function does not update the block for the players, so it should not be used. X and Z should be relative to the chunk (aka x&0x0f, z&0x0f), but Y should be absolute.\nfunc (chunk *Chunk) SetSkylightLevel(x, y, z int32, value byte) error {\n\t//c.LastModified = time.Now().UnixMilli()\n\tsecIndex := (y >> 4) - chunk.Y\n\tif secIndex < 0 || secIndex >= int32(len(chunk.Sections)) {\n\t\treturn fmt.Errorf(\"null section\")\n\t}\n\tsec := chunk.Sections[secIndex]\n\treturn sec.SetSkylightLevel(int(x), int(y)&0x0f, int(z), value)\n}\n\n// X and Z should be relative to the chunk (aka x&0x0f, z&0x0f), but Y should be absolute.\nfunc (chunk *Chunk) SkyLightLevel(x, y, z int32) (byte, error) {\n\tsecIndex := (y >> 4) - chunk.Y\n\tif secIndex < 0 || secIndex >= int32(len(chunk.Sections)) {\n\t\treturn 0, fmt.Errorf(\"null section\")\n\t}\n\tsec := chunk.Sections[secIndex]\n\treturn sec.SkyLightLevel(int(x), int(y)&0x0f, int(z))\n}\n\n// Returns the block state at the position. All of the position values should be absolute (aka (chunkPos<<4)+pos)\nfunc (chunk *Chunk) BlockEntity(x, y, z int32) (*BlockEntity, bool) {\n\tfor _, entity := range chunk.BlockEntities {\n\t\tif entity.X == x && entity.Y == y && entity.Z == z {\n\t\t\treturn &entity, true\n\t\t}\n\t}\n\treturn nil, false\n}\n\n// This function does not update the block for the players, so it should not be used. All of the position values should be absolute (aka (chunkPos<<4)+pos\nfunc (chunk *Chunk) SetBlockEntity(x, y, z int32, be BlockEntity) {\n\t//c.LastModified = time.Now().UnixMilli()\n\tvar index int = -1\n\tbe.X, be.Y, be.Z = x, y, z\n\tfor i, entity := range chunk.BlockEntities {\n\t\tif entity.X == x && entity.Y == y && entity.Z == z {\n\t\t\tindex = i\n\t\t\tbreak\n\t\t}\n\t}\n\tif index == -1 {\n\t\tchunk.BlockEntities = append(chunk.BlockEntities, be)\n\t\treturn\n\t}\n\tchunk.BlockEntities[index] = be\n}\n"
  },
  {
    "path": "server/world/chunk/encode.go",
    "content": "package chunk\n\nimport (\n\t\"bytes\"\n\t\"slices\"\n\t\"unsafe\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/buffers\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/encoding\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk/section\"\n\t\"github.com/zeppelinmc/zeppelin/util/log\"\n)\n\nvar emptyLightBuffer = make([]byte, 2048)\nvar fullLightBuffer = make([]byte, 2048)\n\nfunc init() {\n\tfor i := range fullLightBuffer {\n\t\tfullLightBuffer[i] = 0xFF\n\t}\n}\n\nfunc (chunk *Chunk) Encode(biomeIndexes []string) *play.ChunkDataUpdateLight {\n\tbuf := buffers.Buffers.Get().(*bytes.Buffer)\n\tbuf.Reset()\n\tdefer buffers.Buffers.Put(buf)\n\treturn chunk.EncodeBuf(biomeIndexes, buf)\n}\n\nfunc (chunk *Chunk) EncodeBuf(biomeIndexes []string, buf *bytes.Buffer) *play.ChunkDataUpdateLight {\n\tbstateId := int32(slices.Index(biomeIndexes, \"minecraft:plains\"))\n\n\tw := encoding.NewWriter(buf)\n\n\tpk := &play.ChunkDataUpdateLight{\n\t\tCX: chunk.X,\n\t\tCZ: chunk.Z,\n\n\t\tData: buf,\n\n\t\tHeightmaps: *(*play.Heightmaps)(unsafe.Pointer(&chunk.Heightmaps)),\n\n\t\t//BlockEntities: make([]play.BlockEntity, len(chunk.BlockEntities)),\n\n\t\tSkyLightMask:      make(encoding.BitSet, 1),\n\t\tEmptySkyLightMask: make(encoding.BitSet, 1),\n\t\tSkyLightArrays:    make([][]byte, 1, len(chunk.Sections)+1),\n\n\t\tBlockLightMask:      make(encoding.BitSet, 1),\n\t\tEmptyBlockLightMask: make(encoding.BitSet, 1),\n\t\tBlockLightArrays:    make([][]byte, 1, len(chunk.Sections)+1),\n\t}\n\n\tpk.SkyLightMask.Set(1)\n\tpk.EmptySkyLightMask.Set(1)\n\tpk.SkyLightArrays[0] = emptyLightBuffer\n\n\tpk.BlockLightMask.Set(1)\n\tpk.EmptyBlockLightMask.Set(1)\n\tpk.BlockLightArrays[0] = emptyLightBuffer\n\n\t/*for i, entity := range chunk.BlockEntities {\n\t\tpk.BlockEntities[i] = play.BlockEntity{\n\t\t\tX:    entity.X,\n\t\t\tY:    entity.Y,\n\t\t\tZ:    entity.Z,\n\t\t\tType: registry.BlockEntityType.Get(entity.Id),\n\t\t\tData: entity,\n\t\t}\n\t}*/\n\n\tfor secI, sec := range chunk.Sections {\n\t\tvar blockCount int16 = 1024\n\t\tblockBitsPerEntry, biomeBitsPerEntry := sec.BPE()\n\t\t//var airId = -1\n\n\t\t/*for i, state := range blockPalette {\n\t\t\tname, _ := state.Encode()\n\t\t\tif name == \"minecraft:air\" {\n\t\t\t\tairId = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif airId == -1 {\n\t\t\tblockCount = 4096\n\t\t}\n\n\t\tif blockCount != 4096 {\n\t\t\tfor _, long := range blockStates {\n\t\t\t\tvar pos int\n\n\t\t\t\tfor i := 0; i < 64; i++ {\n\t\t\t\t\tif blockCount == 4096 {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tif pos+blockBitsPerEntry > 64-pos {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tvar entry = (long >> pos) & (int64((1 << blockBitsPerEntry) - 1))\n\n\t\t\t\t\tif entry != int64(airId) {\n\t\t\t\t\t\tblockCount++\n\t\t\t\t\t}\n\n\t\t\t\t\tpos += blockBitsPerEntry\n\t\t\t\t}\n\t\t\t}\n\t\t}*/\n\n\t\t//Block Count\n\t\tw.Short(blockCount)\n\n\t\t//\n\t\t// Block Palette\n\t\t//\n\t\tw.Ubyte(byte(blockBitsPerEntry))\n\n\t\tswitch {\n\t\tcase blockBitsPerEntry == 0:\n\t\t\tstateId, _ := section.BlockStateId(sec.BlockStates.Palette[0])\n\t\t\tw.VarInt(stateId)\n\t\tcase blockBitsPerEntry >= 4 && blockBitsPerEntry <= 8:\n\t\t\tw.VarInt(int32(len(sec.BlockStates.Palette)))\n\t\t\tfor _, e := range sec.BlockStates.Palette {\n\t\t\t\tstateId, _ := section.BlockStateId(e)\n\t\t\t\tw.VarInt(stateId)\n\t\t\t}\n\t\tcase blockBitsPerEntry == 15: // no palette\n\t\tdefault:\n\t\t\tlog.Println(\"invalid block bits per entry\", blockBitsPerEntry, (len(sec.BlockStates.Data)*64)/4096)\n\t\t}\n\n\t\tw.VarInt(int32(len(sec.BlockStates.Data)))\n\t\tfor _, long := range sec.BlockStates.Data {\n\t\t\tw.Long(long)\n\t\t}\n\n\t\t//\n\t\t// Biome Palette\n\t\t//\n\n\t\tw.Ubyte(byte(biomeBitsPerEntry))\n\n\t\tswitch {\n\t\tcase biomeBitsPerEntry == 0:\n\t\t\t//pale := biomePalette[0]\n\t\t\t/*stateId := int32(slices.Index(biomeIndexes, pale))\n\t\t\tif stateId == -1 {\n\t\t\t\tfmt.Println(\"h\", pale)\n\t\t\t}*/\n\n\t\t\tw.VarInt(bstateId)\n\t\tcase biomeBitsPerEntry >= 1 && biomeBitsPerEntry <= 3:\n\t\t\tw.VarInt(int32(len(sec.Biomes.Palette)))\n\t\t\tfor _, e := range sec.Biomes.Palette {\n\t\t\t\t_ = e\n\t\t\t\t/*stateId := int32(slices.Index(biomeIndexes, e))\n\t\t\t\tif stateId == -1 {\n\t\t\t\t\tfmt.Println(\"h\", e)\n\t\t\t\t}*/\n\n\t\t\t\tw.VarInt(bstateId)\n\t\t\t}\n\t\tcase biomeBitsPerEntry == 6: // no palette\n\t\tdefault:\n\t\t\tlog.Println(\"invalid biome bits per entry\", pk.CX, pk.CZ, sec.Y, biomeBitsPerEntry)\n\t\t}\n\n\t\tw.VarInt(int32(len(sec.Biomes.Data)))\n\t\tfor _, long := range sec.Biomes.Data {\n\t\t\tw.Long(long)\n\t\t}\n\n\t\t//\n\t\t// Lighting\n\t\t//\n\n\t\tif sec.SkyLight != nil {\n\t\t\tpk.SkyLightMask.Set(secI + 1)\n\t\t\tif allZero(sec.SkyLight) {\n\t\t\t\tpk.EmptySkyLightMask.Set(secI + 1)\n\t\t\t}\n\t\t\tpk.SkyLightArrays = append(pk.SkyLightArrays, *(*[]byte)(unsafe.Pointer(&sec.SkyLight)))\n\t\t}\n\n\t\tif sec.BlockLight != nil {\n\t\t\tpk.BlockLightMask.Set(secI + 1)\n\t\t\tif allZero(sec.BlockLight) {\n\t\t\t\tpk.EmptyBlockLightMask.Set(secI + 1)\n\t\t\t}\n\t\t\tpk.BlockLightArrays = append(pk.BlockLightArrays, *(*[]byte)(unsafe.Pointer(&sec.BlockLight)))\n\t\t}\n\t}\n\t/*pk.SkyLightArrays = append(pk.SkyLightArrays, emptyLightBuffer)\n\tpk.SkyLightMask.Set(len(chunk.sections))\n\tpk.EmptySkyLightMask.Set(len(chunk.sections))\n\n\tpk.BlockLightArrays = append(pk.BlockLightArrays, emptyLightBuffer)\n\tpk.BlockLightMask.Set(len(chunk.sections))\n\tpk.EmptyBlockLightMask.Set(len(chunk.sections))*/\n\n\t//for i := 0; i < 24; i++ {\n\t//\tfmt.Println(pk.SkyLightMask.Get(i), len(pk.SkyLightArrays[i+1]))\n\t//}\n\n\t//pk.Data = buf.Bytes()\n\n\treturn pk\n}\n\nfunc allZero(inp []int8) bool {\n\tfor _, i := range inp {\n\t\tif i != 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "server/world/chunk/heightmaps/heightmaps.go",
    "content": "package heightmaps\r\n\r\n/* credit to https://github.com/aimjel for these calculations */\r\n\r\nconst MinY = -64\r\n\r\nconst HeightMapBitsPerEntry = 9\r\n\r\ntype Heightmap []int64\r\n\r\ntype Heightmaps struct {\r\n\tMotionBlocking Heightmap `nbt:\"MOTION_BLOCKING\"`\r\n\tWorldSurface   Heightmap `nbt:\"WORLD_SURFACE\"`\r\n}\r\n\r\nfunc (hm Heightmap) offset(x, z int32) (int32, int32) {\r\n\tblockNumber := z + x*16\r\n\tstartLong := (blockNumber * HeightMapBitsPerEntry) / 63\r\n\tstateOffset := (blockNumber * HeightMapBitsPerEntry) % 63\r\n\r\n\treturn startLong, stateOffset\r\n}\r\n\r\nfunc (hm Heightmap) Get(x, z int32) int32 {\r\n\ti, off := hm.offset(x, z)\r\n\r\n\tstates := hm[i] >> off\r\n\r\n\treturn int32(states & (1<<HeightMapBitsPerEntry - 1))\r\n}\r\n\r\nfunc (hm *Heightmap) Set(x, z, y int32) {\r\n\ty += -MinY + 1\r\n\r\n\ti, off := hm.offset(x, z)\r\n\tmask := int64(^((1<<HeightMapBitsPerEntry - 1) << off))\r\n\tif len(*hm) <= int(i) {\r\n\t\t*hm = append(*hm, make(Heightmap, 37-len(*hm))...)\r\n\t}\r\n\t(*hm)[i] &= mask\r\n\t(*hm)[i] |= int64(y) << off\r\n}\r\n"
  },
  {
    "path": "server/world/chunk/section/block.go",
    "content": "package section\r\n\r\ntype Block interface {\r\n\t// returns the name and properties of the block\r\n\tEncode() (name string, properties map[string]string)\r\n\t// creates a new instance of the block with the specified properties\r\n\tNew(properties map[string]string) Block\r\n}\r\n\r\ntype UnknownBlock struct {\r\n\tname  string\r\n\tprops map[string]string\r\n}\r\n\r\nfunc (block UnknownBlock) Encode() (string, map[string]string) {\r\n\treturn block.name, block.props\r\n}\r\n\r\nfunc (block UnknownBlock) New(props map[string]string) Block {\r\n\treturn UnknownBlock{name: block.name, props: props}\r\n}\r\n\r\n// make sure unknown block implements block\r\nvar _ Block = (*UnknownBlock)(nil)\r\n"
  },
  {
    "path": "server/world/chunk/section/blockRegister.go",
    "content": "package section\n\nimport (\n\t_ \"embed\"\n\t\"github.com/aimjel/minecraft/nbt\"\n\t\"github.com/zeppelinmc/zeppelin/util\"\n)\n\ntype blockState struct {\n\tId         int32             `json:\"id\"`\n\tProperties map[string]string `json:\"properties\"`\n}\n\ntype blockInfo struct {\n\tStates []blockState `json:\"states\"`\n}\n\nvar blocks = make(map[string]blockInfo)\n\n//go:embed data/blocks.nbt\nvar blockData []byte\n\nfunc init() {\n\tnbt.Unmarshal(blockData, &blocks)\n}\n\nvar registeredBlocks = make(map[string]Block)\n\n// Registers a block struct that will be used for creating blocks with the name returned by the block's Encode function\nfunc RegisterBlock(b Block) {\n\tname, _ := b.Encode()\n\tregisteredBlocks[name] = b\n}\n\n// Returns the block struct found for the block name\nfunc GetBlock(name string) Block {\n\tif b, ok := registeredBlocks[name]; ok {\n\t\treturn b\n\t}\n\treturn UnknownBlock{name: name}\n}\n\n// returns the block state id for this block\nfunc BlockStateId(b AnvilBlock) (id int32, ok bool) {\n\tblock := blocks[b.Name]\n\n\tfor _, state := range block.States {\n\t\tif util.MapEqual(b.Properties, state.Properties) {\n\t\t\treturn state.Id, true\n\t\t}\n\t}\n\treturn 0, false\n}\n"
  },
  {
    "path": "server/world/chunk/section/section.go",
    "content": "// Package section provides methods of modifying chunk sections\npackage section\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"math/bits\"\n\t\"reflect\"\n)\n\n/* credit to https://github.com/aimjel for these calculations */\n\ntype AnvilBlock struct {\n\tProperties map[string]string\n\tName       string\n}\n\ntype AnvilBiomes struct {\n\tData    []int64  `nbt:\"data,omitempty\"`\n\tPalette []string `nbt:\"palette\"`\n}\n\ntype AnvilBlockStates struct {\n\tData    []int64      `nbt:\"data,omitempty\"`\n\tPalette []AnvilBlock `nbt:\"palette\"`\n}\n\n// Section is a 16x16x16 chunk\ntype Section struct {\n\tBlockLight  []int8 `nbt:\"BlockLight,omitempty\"`\n\tSkyLight    []int8 `nbt:\"SkyLight,omitempty\"`\n\tY           int8\n\tBiomes      AnvilBiomes      `nbt:\"biomes\"`\n\tBlockStates AnvilBlockStates `nbt:\"block_states\"`\n\n\tblockBitsPerEntry, biomeBitsPerEntry int\n}\n\nfunc (s *Section) Init() {\n\ts.blockBitsPerEntry = blockBitsPerEntry(len(s.BlockStates.Palette))\n\ts.biomeBitsPerEntry = biomeBitsPerEntry(len(s.Biomes.Palette))\n}\n\nfunc (s *Section) BPE() (block, biome int) {\n\treturn s.blockBitsPerEntry, s.biomeBitsPerEntry\n}\n\nfunc (s *Section) offset(x, y, z int) (long, offset int) {\n\tblockNumber := ((((y * 16) + z) * 16) + x) * s.blockBitsPerEntry\n\tstartLong := blockNumber >> 6\n\tstateOffset := blockNumber & 63\n\n\treturn startLong, stateOffset\n}\n\n// X, Y, Z should be relative to the chunk section (AKA x&0x0f, y&0x0f, z&0x0f)\nfunc (s *Section) Block(x, y, z byte) AnvilBlock {\n\tif len(s.BlockStates.Data) == 0 {\n\t\treturn s.BlockStates.Palette[0]\n\t}\n\n\tlong, off := s.offset(int(x), int(y), int(z))\n\tl := s.BlockStates.Data[long]\n\tindex := (l >> off) & (1<<s.blockBitsPerEntry - 1)\n\n\treturn s.BlockStates.Palette[index]\n}\n\nfunc (s *Section) blockState(x, y, z byte) int64 {\n\tif len(s.BlockStates.Data) == 0 {\n\t\treturn 0\n\t}\n\n\tlong, off := s.offset(int(x), int(y), int(z))\n\tl := s.BlockStates.Data[long]\n\tindex := (l >> off) & (1<<s.blockBitsPerEntry - 1)\n\n\treturn index\n}\n\n// Sets the block at the position to the index in the palette. Errors if the state is bigger than the length of the palette or negative\n// X, Y, Z should be relative to the chunk section (AKA x&0x0f, y&0x0f, z&0x0f)\nfunc (s *Section) setBlockState(x, y, z byte, state int64) error {\n\tif state < 0 || len(s.BlockStates.Data) <= int(state) {\n\t\treturn fmt.Errorf(\"block state not in palette\")\n\t}\n\tlong, off := s.offset(int(x), int(y), int(z))\n\tmask := int64(^((1<<s.blockBitsPerEntry - 1) << off))\n\n\ts.BlockStates.Data[long] &= mask\n\ts.BlockStates.Data[long] |= state << off\n\treturn nil\n}\n\n// Sets the block at the position and returns its new state (index in the block palette). Resizes the palette if needed\n// X, Y, Z should be relative to the chunk section (AKA x&0x0f, y&0x0f, z&0x0f)\nfunc (s *Section) SetBlock(x, y, z byte, b AnvilBlock) (state int64) {\n\tvar ok bool\n\tstate, ok = s.index(b)\n\tif !ok {\n\t\tpanic(\"not now\")\n\t\toldBPE := s.blockBitsPerEntry\n\t\ts.add(b)\n\t\tstate = int64(len(s.BlockStates.Palette) - 1)\n\t\tif oldBPE != s.blockBitsPerEntry {\n\t\t\tnewDataLen := 4096 / (64 / s.blockBitsPerEntry)\n\t\t\tif len(s.BlockStates.Data) < newDataLen {\n\t\t\t\ts.BlockStates.Data = make([]int64, newDataLen)\n\t\t\t}\n\t\t\tclear(s.BlockStates.Data)\n\n\t\t\tfor x := byte(0); x < 16; x++ {\n\t\t\t\tfor y := byte(0); y < 16; y++ {\n\t\t\t\t\tfor z := byte(0); z < 16; z++ {\n\t\t\t\t\t\ts.setBlockState(x, y, z, s.blockState(x, y, z))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlong, off := s.offset(int(x), int(y), int(z))\n\tmask := int64(^((1<<s.blockBitsPerEntry - 1) << off))\n\n\ts.BlockStates.Data[long] &= mask\n\ts.BlockStates.Data[long] |= state << off\n\n\treturn state\n}\n\nfunc (s *Section) index(b AnvilBlock) (i int64, ok bool) {\n\tfor i, entry := range s.BlockStates.Palette {\n\t\tif reflect.DeepEqual(entry, b) { //todo optimize\n\t\t\treturn int64(i), true\n\t\t}\n\t}\n\treturn 0, false\n}\n\nfunc (s *Section) add(b AnvilBlock) {\n\ts.BlockStates.Palette = append(s.BlockStates.Palette, b)\n\ts.blockBitsPerEntry = blockBitsPerEntry(len(s.BlockStates.Palette))\n}\n\nfunc (s *Section) SkyLightLevel(x, y, z int) (byte, error) {\n\tindex := (y << 8) | (z << 4) | x\n\tif index < 0 || int(index) > len(s.SkyLight) {\n\t\treturn 0, fmt.Errorf(\"light index exceeds light length\")\n\t}\n\n\tvar mask uint8 = 0x0f\n\tvar shift uint8 = 0\n\tif math.Remainder(float64(index), 2) != 0 {\n\t\tmask = 0xf0\n\t\tshift = 4\n\t}\n\n\tindex /= 2\n\n\treturn (uint8(s.SkyLight[index]) & mask) >> shift, nil\n}\n\nfunc (s *Section) SetSkylightLevel(x, y, z int, level byte) error {\n\tif level > 0x0F {\n\t\treturn fmt.Errorf(\"light level must not exceed 4 bits (15)\")\n\t}\n\tindex := (y << 8) | (z << 4) | x\n\tif index < 0 || int(index) > len(s.SkyLight) {\n\t\treturn fmt.Errorf(\"light index exceeds light length\")\n\t}\n\n\tvar mask uint8 = 0x0f\n\tif math.Remainder(float64(index), 2) != 0 {\n\t\tmask = 0xf0\n\t\tlevel <<= 4\n\t}\n\n\tindex /= 2\n\n\ts.SkyLight[index] = s.SkyLight[index] & ^int8(mask)\n\ts.SkyLight[index] |= int8(level)\n\n\treturn nil\n}\n\nfunc blockBitsPerEntry(paletteSize int) int {\n\tln := bits.Len32(uint32(paletteSize) - 1)\n\tif ln <= 4 && ln != 0 {\n\t\tln = 4\n\t}\n\n\t//log.Println(paletteSize, ln)\n\n\treturn ln\n}\n\nfunc biomeBitsPerEntry(paletteSize int) int {\n\treturn bits.Len32(uint32(paletteSize - 1))\n}\n"
  },
  {
    "path": "server/world/dimension/dimension.go",
    "content": "package dimension\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"sync\"\n\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk/section\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/dimension/window\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/level\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/level/region\"\n\t\"github.com/zeppelinmc/zeppelin/util/log\"\n)\n\nfunc New(regionPath, typ, name string, chunkGenerator chunk.Generator, level level.Level) *Dimension {\n\treturn &Dimension{\n\t\tregions: make(map[uint64]*region.File),\n\n\t\tregionPath:    regionPath,\n\t\ttyp:           typ,\n\t\tname:          name,\n\t\tgenerator:     chunkGenerator,\n\t\tWindowManager: window.NewManager(),\n\t\tLevel:         level,\n\t}\n}\n\ntype Dimension struct {\n\treg_mu  sync.Mutex\n\tregions map[uint64]*region.File\n\tLevel   level.Level\n\n\tgenerator     chunk.Generator\n\tWindowManager *window.WindowManager\n\n\ttyp  string\n\tname string\n\n\tregionPath string\n}\n\nfunc (d *Dimension) Type() string {\n\treturn d.typ\n}\n\nfunc (d *Dimension) Name() string {\n\treturn d.name\n}\n\nfunc (d *Dimension) Save() {\n\td.syncWindows()\n\t//s.saveAllRegions()\n\td.Level.Close()\n\tlog.Infoln(\"Saved dimension\", d.name)\n}\n\nfunc (d *Dimension) syncWindows() {\n\td.WindowManager.Range(func(i pos.BlockPosition, w *window.Window) {\n\t\tif w.ChunkEntityType != \"\" {\n\t\t\td.SetBlockEntity(i, chunk.BlockEntity{\n\t\t\t\tX: i.X(), Y: i.Y(), Z: i.Z(),\n\t\t\t\tId:    w.ChunkEntityType,\n\t\t\t\tItems: w.Items,\n\t\t\t})\n\t\t}\n\t})\n}\n\nfunc (d *Dimension) saveAllRegions() {\n\td.reg_mu.Lock()\n\tdefer d.reg_mu.Unlock()\n\t_ = os.MkdirAll(d.regionPath, 0755)\n\tfor hash, reg := range d.regions {\n\t\trx, rz := d.regionUnhash(hash)\n\t\tpath := fmt.Sprintf(\"%s/r.%d.%d.mca\", d.regionPath, rx, rz)\n\t\tfile, err := os.Create(path)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif reg.Encode(file, region.CompressionZlib) != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif file.Close() != nil {\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\nfunc (d *Dimension) LoadedChunks() int32 {\n\td.reg_mu.Lock()\n\tdefer d.reg_mu.Unlock()\n\tvar count int32\n\n\tfor _, reg := range d.regions {\n\t\tcount += reg.LoadedChunks()\n\t}\n\n\treturn count\n}\n\nfunc (d *Dimension) Block(x, y, z int32) (section.AnvilBlock, error) {\n\tchunkX, chunkZ := x>>4, z>>4\n\tchunk, err := d.GetChunk(chunkX, chunkZ)\n\tif err != nil {\n\t\treturn section.AnvilBlock{}, err\n\t}\n\treturn chunk.Block(x&0x0f, y, z&0x0f)\n}\n\nfunc (d *Dimension) SetBlock(pos pos.BlockPosition, b section.AnvilBlock, placeSound bool) (state int64, err error) {\n\tchunkX, chunkZ := pos.ChunkX(), pos.ChunkZ()\n\tchunk, err := d.GetChunk(chunkX, chunkZ)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\ti, err := chunk.SetBlock(pos.SectionX(), pos.Y(), pos.SectionZ(), b)\n\tif err != nil {\n\t\treturn i, err\n\t}\n\t//s.broadcast.UpdateBlock(pos, b, s.name, placeSound)\n\treturn i, err\n}\n\nfunc (d *Dimension) SetBlockEntity(pos pos.BlockPosition, be chunk.BlockEntity) error {\n\tchunkX, chunkZ := pos.ChunkX(), pos.ChunkZ()\n\tchunk, err := d.GetChunk(chunkX, chunkZ)\n\tif err != nil {\n\t\treturn err\n\t}\n\tchunk.SetBlockEntity(pos.X(), pos.Y(), pos.Z(), be)\n\t//s.broadcast.UpdateBlockEntity(pos, be, s.name)\n\n\treturn nil\n}\nfunc (d *Dimension) BlockEntity(x, y, z int32) (*chunk.BlockEntity, bool) {\n\tchunkX, chunkZ := x>>4, z>>4\n\tchunk, err := d.GetChunk(chunkX, chunkZ)\n\tif err != nil {\n\t\treturn nil, false\n\t}\n\treturn chunk.BlockEntity(x, y, z)\n}\n\nfunc (d *Dimension) GetChunkBuf(x, z int32, buf *bytes.Buffer) (*chunk.Chunk, error) {\n\trx, rz := d.chunkPosToRegionPos(x, z)\n\tregion, err := d.getRegion(rx, rz)\n\tif err != nil {\n\t\tif d.generator != nil {\n\t\t\tregion = d.newRegion(rx, rz)\n\t\t} else {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn region.GetChunkBuf(x, z, buf)\n}\n\nfunc (d *Dimension) GetChunk(x, z int32) (*chunk.Chunk, error) {\n\trx, rz := d.chunkPosToRegionPos(x, z)\n\tregion, err := d.getRegion(rx, rz)\n\tif err != nil {\n\t\tif d.generator != nil {\n\t\t\tregion = d.newRegion(rx, rz)\n\t\t} else {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn region.GetChunk(x, z)\n}\n\nfunc (d *Dimension) newRegion(rx, rz int32) *region.File {\n\td.reg_mu.Lock()\n\tdefer d.reg_mu.Unlock()\n\thash := d.regionHash(rx, rz)\n\td.regions[hash] = new(region.File)\n\tregion.Empty(d.regions[hash], rx, rz, d.generator)\n\n\treturn d.regions[hash]\n}\n\nfunc (d *Dimension) getRegion(rx, rz int32) (*region.File, error) {\n\td.reg_mu.Lock()\n\tdefer d.reg_mu.Unlock()\n\tif r, ok := d.regions[d.regionHash(rx, rz)]; ok {\n\t\treturn r, nil\n\t}\n\n\treg, err := d.openRegion(rx, rz)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn reg, err\n}\n\nfunc (d *Dimension) regionHash(rx, rz int32) uint64 {\n\treturn uint64(uint32(rx)) | uint64(uint32(rz))<<32\n}\n\nfunc (d *Dimension) regionUnhash(hash uint64) (rx, rz int32) {\n\turx := uint32(hash)\n\turz := uint32(hash >> 32)\n\n\treturn int32(urx), int32(urz)\n}\n\nfunc (d *Dimension) chunkPosToRegionPos(x, z int32) (rx, rz int32) {\n\treturn x >> 5, z >> 5\n}\n\nfunc (d *Dimension) openRegion(rx, rz int32) (*region.File, error) {\n\tpath := fmt.Sprintf(\"%s/r.%d.%d.mca\", d.regionPath, rx, rz)\n\tfile, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t//defer file.Close()\n\thash := d.regionHash(rx, rz)\n\n\td.regions[hash] = new(region.File)\n\n\terr = region.Decode(file, d.regions[hash], rx, rz, d.generator)\n\n\treturn d.regions[hash], err\n}\n"
  },
  {
    "path": "server/world/dimension/manager.go",
    "content": "package dimension\n\nimport (\n\t\"github.com/zeppelinmc/zeppelin/util/log\"\n\t\"strings\"\n)\n\nfunc NewDimensionManager(dimensions map[string]*Dimension) DimensionManager {\n\treturn DimensionManager{dimensions: dimensions}\n}\n\ntype DimensionManager struct {\n\tdimensions map[string]*Dimension\n}\n\n// Dimension returns the dimension struct for the dimension name\nfunc (w *DimensionManager) Dimension(name string) *Dimension {\n\tif !strings.Contains(name, \":\") {\n\t\tname = \"minecraft:\" + name\n\t}\n\n\treturn w.dimensions[name]\n}\n\nfunc (w *DimensionManager) Save() {\n\tfor _, dim := range w.dimensions {\n\t\tdim.Save()\n\t}\n\tlog.Infoln(\"Closed world\")\n}\n\nfunc (w *DimensionManager) RegisterDimension(name string, dim *Dimension) {\n\tw.dimensions[name] = dim\n}\n\nfunc (w *DimensionManager) LoadedChunks() int32 {\n\tvar count int32\n\n\tfor _, dim := range w.dimensions {\n\t\tcount += dim.LoadedChunks()\n\t}\n\n\treturn count\n}\n"
  },
  {
    "path": "server/world/dimension/tick.go",
    "content": "package dimension\r\n\r\nfunc (d *Dimension) tick() {\r\n\r\n}\r\n"
  },
  {
    "path": "server/world/dimension/window/window.go",
    "content": "package window\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"sync\"\r\n\t\"sync/atomic\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/container\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/block/pos\"\r\n)\r\n\r\nvar windowId atomic.Int32\r\n\r\ntype WindowManager struct {\r\n\twindows map[pos.BlockPosition]*Window\r\n\tmu      sync.RWMutex\r\n}\r\n\r\nfunc NewManager() *WindowManager {\r\n\treturn &WindowManager{windows: make(map[pos.BlockPosition]*Window)}\r\n}\r\n\r\nfunc (mgr *WindowManager) AddWindow(position pos.BlockPosition, w *Window) error {\r\n\tif w.Id == 0 {\r\n\t\treturn fmt.Errorf(\"window id should not be 0\")\r\n\t}\r\n\tmgr.mu.Lock()\r\n\tdefer mgr.mu.Unlock()\r\n\tmgr.windows[position] = w\r\n\treturn nil\r\n}\r\n\r\nfunc (mgr *WindowManager) Range(itr func(pos.BlockPosition, *Window)) {\r\n\tmgr.mu.RLock()\r\n\tdefer mgr.mu.RUnlock()\r\n\tfor pos, w := range mgr.windows {\r\n\t\titr(pos, w)\r\n\t}\r\n}\r\n\r\nfunc (mgr *WindowManager) At(x, y, z int32) (*Window, bool) {\r\n\tmgr.mu.RLock()\r\n\tdefer mgr.mu.RUnlock()\r\n\tw, ok := mgr.windows[[3]int32{x, y, z}]\r\n\treturn w, ok\r\n}\r\n\r\nfunc (mgr *WindowManager) Get(id int32) (pos.BlockPosition, *Window, bool) {\r\n\tmgr.mu.RLock()\r\n\tdefer mgr.mu.RUnlock()\r\n\tfor pos, w := range mgr.windows {\r\n\t\tif w.Id == id {\r\n\t\t\treturn pos, w, true\r\n\t\t}\r\n\t}\r\n\treturn [3]int32{}, nil, false\r\n}\r\n\r\n// window types are found at https://wiki.vg/Inventory\r\nfunc (mgr *WindowManager) New(windowType, chunkEntityType string, items container.Container, title text.TextComponent) *Window {\r\n\treturn &Window{\r\n\t\tmgr:             mgr,\r\n\t\tItems:           items,\r\n\t\tId:              windowId.Add(1),\r\n\t\tTitle:           title,\r\n\t\tType:            windowType,\r\n\t\tChunkEntityType: chunkEntityType,\r\n\t}\r\n}\r\n\r\ntype Window struct {\r\n\tmgr *WindowManager\r\n\r\n\tChunkEntityType string\r\n\r\n\tItems container.Container\r\n\tId    int32\r\n\tType  string\r\n\tTitle text.TextComponent\r\n\r\n\tViewers byte\r\n}\r\n\r\nfunc (w *Window) Position() (x, y, z int32, ok bool) {\r\n\tpos, _, ok := w.mgr.Get(w.Id)\r\n\r\n\treturn pos[0], pos[1], pos[2], ok\r\n}\r\n"
  },
  {
    "path": "server/world/level/entity.go",
    "content": "package level\n\nimport \"github.com/zeppelinmc/zeppelin/server/world/level/uuid\"\n\ntype Entity struct {\n\tAir int16\n\n\tCustomName        string\n\tCustomNameVisible bool\n\n\tFallDistance  float32\n\tFire          int16\n\tGlowing       bool\n\tHasVisualFire bool\n\n\tId string `nbt:\"id\"`\n\n\tInvulnerable bool\n\n\tMotion     [3]float64\n\tNoGravity  bool\n\tOnGround   bool\n\tPassengers []Entity\n\n\tPortalCooldown int32\n\tPos            [3]float64\n\tRotation       [2]float32\n\n\tSilent      bool `nbt:\"Silent,omitempty\"`\n\tTags        []string\n\tTicksFrozen int32 `nbt:\"TicksFrozen,omitempty\"`\n\tUUID        uuid.UUID\n\n\t//TODO add state subclasses\n}\n"
  },
  {
    "path": "server/world/level/item/attribute_modifiers.go",
    "content": "package item\r\n\r\ntype AttributeModifiers struct {\r\n\tModifiers     []Modifier `nbt:\"modifier\"`\r\n\tShowInTooltip bool       `nbt:\"show_in_tooltip\"`\r\n}\r\n\r\ntype ModifierOperation string\r\n\r\nconst (\r\n\tAddValue           ModifierOperation = \"add_value\"\r\n\tAddMultipliedBase  ModifierOperation = \"add_multiplied_base\"\r\n\tAddMultipliedTotal ModifierOperation = \"add_multiplied_total\"\r\n)\r\n\r\ntype Modifier struct {\r\n\tType     string            `nbt:\"type\"`\r\n\tSlot     string            `nbt:\"slot\"`\r\n\tId       string            `nbt:\"id\"`\r\n\tAmount   float64           `nbt:\"amount\"`\r\n\tOperator ModifierOperation `nbt:\"operation\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/banner_patterns.go",
    "content": "package item\r\n\r\ntype BannerPattern struct {\r\n\tColor   string `nbt:\"color\"`\r\n\tPattern any    `nbt:\"pattern\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/bees.go",
    "content": "package item\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/server/entity\"\r\n\r\ntype Bee struct {\r\n\tEntityData         entity.LevelEntity `nbt:\"entity_data\"` // import cycle :(\r\n\tMinimumTicksInHive int32              `nbt:\"min_ticks_in_hive\"`\r\n\tTicksInHive        int32              `nbt:\"ticks_in_hive\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/bucket_entity_data.go",
    "content": "package item\r\n\r\ntype BucketEntityData struct {\r\n\tNoAI             bool    `nbt:\"NoAI\"`\r\n\tSilent           bool    `nbt:\"Silent\"`\r\n\tNoGravity        bool    `nbt:\"NoGravity\"`\r\n\tGlowing          bool    `nbt:\"Glowing\"`\r\n\tInvulnerable     bool    `nbt:\"Invulnerable\"`\r\n\tHealth           float32 `nbt:\"Health\"`\r\n\tAge              int32   `nbt:\"Age\"`\r\n\tVariant          int32   `nbt:\"Variant\"`\r\n\tHuntingCooldown  int64   `nbt:\"HuntingCooldown\"`\r\n\tBucketVariantTag int32   `nbt:\"BucketVariantTag\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/can_do.go",
    "content": "package item\r\n\r\n// Both CanBreak and CanPlace have the same contents so im using the same class\r\ntype CanDo struct {\r\n\tShowInTooltip bool         `nbt:\"show_in_tooltip\"`\r\n\tState         any          `nbt:\"state\"`  // Have to put any cause theres an infinite amount of key value pairs there could be\r\n\tBlocks        any          `nbt:\"blocks\"` //Can be string, or list\r\n\tNBT           string       `nbt:\"nbt\"`\r\n\tPredicates    []Predicates `nbt:\"predicates\"`\r\n}\r\n\r\ntype Predicates struct {\r\n\tState  any    `nbt:\"state\"`\r\n\tBlocks any    `nbt:\"blocks\"`\r\n\tNBT    string `nbt:\"nbt\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/container_loot.go",
    "content": "package item\r\n\r\ntype ContainerLoot struct {\r\n\tLootTable string `nbt:\"loot_table\"`\r\n\tSeed      int64  `nbt:\"seed\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/creative_slot_lock.go",
    "content": "package item\r\n\r\n// Do not add this tag at all if you don't need it!\r\ntype CreativeSlotLock struct {\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/enchantments.go",
    "content": "package item\r\n\r\ntype Enchantments struct {\r\n\tShowInTooltip bool `nbt:\"show_in_tooltip\"`\r\n\tLevels        any  `nbt:\"levels\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/entity_data.go",
    "content": "package item\r\n\r\nimport \"github.com/zeppelinmc/zeppelin/server/entity\"\r\n\r\ntype EntityData struct {\r\n\tEntityData entity.LevelEntity `nbt:\"minecraft:entity_data\"` // NBT\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/fire_resistant.go",
    "content": "package item\r\n\r\n// Do not add this tag at all if you don't want it to be fire resistant!\r\ntype FireResistant struct {\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/firework_explosion.go",
    "content": "package item\r\n\r\ntype FireworkExplosion struct {\r\n\tShape      string  `nbt:\"shape\"`\r\n\tColors     []int32 `nbt:\"colors\"`\r\n\tFadeColors []int32 `nbt:\"fade_colors\"`\r\n\tHasTrail   bool    `nbt:\"has_trail\"`\r\n\tHasTwinkle bool    `nbt:\"has_twinkle\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/fireworks.go",
    "content": "package item\r\n\r\ntype Fireworks struct {\r\n\tFlightDuration int8 `nbt:\"flight_duration\"`\r\n\tExplosions []Explosion `nbt:\"explosions\"`\r\n}\r\n\r\ntype Explosion struct {\r\n\tShape      string  `nbt:\"shape\"`\r\n\tColors     []int32 `nbt:\"colors\"`\r\n\tFadeColors []int32 `nbt:\"fade_colors\"`\r\n\tHasTrail   bool    `nbt:\"has_trail\"`\r\n\tHasTwinkle bool    `nbt:\"has_twinkle\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/food.go",
    "content": "package item\r\n\r\ntype Food struct {\r\n\tNutrition       int32    `nbt:\"nutrition\"`\r\n\tSaturation      float32  `nbt:\"saturation\"`\r\n\tCanAlwaysEat    bool     `nbt:\"can_always_eat\"`\r\n\tEatSeconds      float32  `nbt:\"eat_seconds\"`\r\n\tUsingConvertsTo Item     `nbt:\"using_converts_to\"`\r\n\tEffects         []Effect `nbt:\"effects\"`\r\n}\r\n\r\ntype Effects struct {\r\n\tEffect      Effect  `nbt:\"effect\"`\r\n\tProbability float32 `nbt:\"probability\"`\r\n}\r\n\r\ntype Effect struct {\r\n\tID            string `nbt:\"id\"`\r\n\tAmplifier     int8   `nbt:\"amplifier\"`\r\n\tDuration      int32  `nbt:\"duration\"`\r\n\tAmbient       bool   `nbt:\"ambient\"`\r\n\tShowParticles bool   `nbt:\"show_particles\"`\r\n\tShowIcon      bool   `nbt:\"show_icon\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/hide_additional_tooltip.go",
    "content": "package item\r\n\r\n// Do not add this tag at all if you don't want it to hide additional tooltip(s)!\r\ntype HideAdditionalTooltip struct {\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/hide_tooltip.go",
    "content": "package item\r\n\r\n// Do not add this tag at all if you don't want it to hide the tooltip!\r\ntype HideTooltip struct {\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/intangible_projectile.go",
    "content": "package item\r\n\r\n// Do not add this tag at all if you don't want it to intangible!\r\ntype IntangibleProjectile struct {\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/item.go",
    "content": "package item\n\nimport (\n\t\"fmt\"\n\t\"slices\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/slot\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/tags\"\n\t\"github.com/zeppelinmc/zeppelin/server/registry\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk/section\"\n)\n\ntype DataSlot int8\n\nfunc (slot DataSlot) Network() int32 {\n\tswitch {\n\tcase slot == 100:\n\t\treturn 8\n\tcase slot == 101:\n\t\treturn 7\n\tcase slot == 102:\n\t\treturn 6\n\tcase slot == 103:\n\t\treturn 5\n\tcase slot == -106:\n\t\treturn 45\n\tcase slot <= 8:\n\t\treturn int32(slot + 36)\n\tcase slot >= 80 && slot <= 83:\n\t\treturn int32(slot - 79)\n\tdefault:\n\t\treturn int32(slot)\n\t}\n}\n\nfunc DataSlotFrom(network int32) DataSlot {\n\tswitch {\n\tcase network == 8:\n\t\treturn 100\n\tcase network == 7:\n\t\treturn 101\n\tcase network == 6:\n\t\treturn 102\n\tcase network == 5:\n\t\treturn 103\n\tcase network == 45:\n\t\treturn -106\n\tcase network >= 36 && network <= 44:\n\t\treturn DataSlot(network - 36)\n\tcase network >= 1 && network <= 4:\n\t\treturn DataSlot(network + 79)\n\tdefault:\n\t\treturn DataSlot(network)\n\t}\n}\n\ntype Item struct {\n\t// The slot (as stored in the player data)\n\tSlot DataSlot `nbt:\"Slot\"`\n\t// the amount of items in the slot\n\tCount int32 `nbt:\"count\"`\n\t// The string id of this item\n\tId string `nbt:\"id\"`\n\t// Components of this item (https://minecraft.wiki/w/Data_component_format#List_of_components)\n\tComponents struct{} `nbt:\"components\"` /*struct {\n\t\tAttributeModifiers       any                      `nbt:\"minecraft:attribute_modifiers\"`\n\t\tBannerPatterns           []BannerPattern          `nbt:\"minecraft:banner_patterns\"`\n\t\tBaseColor                string                   `nbt:\"minecraft:base_color\"`\n\t\tBees                     []Bee                    `nbt:\"minecraft:bees\"`\n\t\tBlockEntityData          any                      `nbt:\"minecraft:block_entity_data\"`\n\t\tBlockState               any                      `nbt:\"minecraft:block_state\"`\n\t\tBucketEntityData         BucketEntityData         `nbt:\"minecraft:bucket_entity_data\"`\n\t\tBundleContents           []Item                   `nbt:\"minecraft_bundle_contents\"`\n\t\tCanBreak                 CanDo                    `nbt:\"minecraft:can_break\"`\n\t\tCanPlaceOn               CanDo                    `nbt:\"minecraft:can_place_on\"`\n\t\tChargedProjectiles       []Item                   `nbt:\"minecraft:charged_projectiles\"`\n\t\tContainer                []Item                   `nbt:\"minecraft:container\"`\n\t\tContainerLoot            ContainerLoot            `nbt:\"minecraft_container_loot\"`\n\t\tCustomData               any                      `nbt:\"minecraft:custom_data\"`\n\t\tCustomModelData          int32                    `nbt:\"minecraft:custom_model_data\"`\n\t\tCustomName               string                   `nbt:\"minecraft:custom_name\"`\n\t\tDamage                   int32                    `nbt:\"minecraft:damage\"`\n\t\tDebugStickState          any                      `nbt:\"minecraft:debug_stick_state\"`\n\t\tDyedColor                any                      `nbt:\"minecraft:dyed_color\"`\n\t\tEnchantmentGlintOverride bool                     `nbt:\"minecraft:enchantment_glint_override\"`\n\t\tEnchantments             Enchantments             `nbt:\"minecraft:enchantments\"`\n\t\tEntityData               state.LevelEntity       `nbt:\"minecraft:entity_data\"`\n\t\tFireResistant            FireResistant            `nbt:\"minecraft:fire_resistant\"`\n\t\tFireworkExplosion        FireworkExplosion        `nbt:\"minecraft:firework_explosion\"`\n\t\tFireworks                Fireworks                `nbt:\"minecraft:fireworks\"`\n\t\tFood                     Food                     `nbt:\"minecraft:food\"`\n\t\tHideAdditionalTooltip    HideAdditionalTooltip    `nbt:\"minecraft:hide_additional_tooltip\"`\n\t\tHideTooltip              HideTooltip              `nbt:\"minecraft:hide_tooltip\"`\n\t\tInstrument               any                      `nbt:\"minecraft:instrument\"`\n\t\tIntangibleProjectile     IntangibleProjectile     `nbt:\"minecraft:intangible_projectile\"`\n\t\tItemName                 string                   `nbt:\"minecraft:item_name\"`\n\t\tJukeboxPlayable          JukeboxPlayable          `nbt:\"minecraft:jukebox_playable\"`\n\t\tLock                     string                   `nbt:\"minecraft:lock\"`\n\t\tLodestoneTracker         LodestoneTracker         `nbt:\"minecraft:lodestone_tracker\"`\n\t\tLore                     []string                 `nbt:\"minecraft:lore\"`\n\t\tMapColor                 int32                    `nbt:\"minecraft:map_color\"`\n\t\tMapDecorations           any                      `nbt:\"minecraft:map_decorations\"`\n\t\tMapID                    int32                    `nbt:\"minecraft:map_id\"`\n\t\tMaxDamage                int32                    `nbt:\"minecraft:max_damage\"`\n\t\tMaxStackSize             int32                    `nbt:\"minecraft:max_stack_size\"`\n\t\tNoteBlockSound           string                   `nbt:\"minecraft:note_block_sound\"`\n\t\tOminousBottleAmplifier   int32                    `nbt:\"minecraft:ominous_bottle_amplifier\"`\n\t\tPotDecorations           []string                 `nbt:\"minecraft:pot_decorations\"`\n\t\tPotionContents           any                      `nbt:\"minecraft:potion_contents\"`\n\t\tProfile                  any                      `nbt:\"minecraft:profile\"`\n\t\tRarity                   string                   `nbt:\"minecraft:rarity\"`\n\t\tRecipes                  []string                 `nbt:\"minecraft:recipes\"`\n\t\tRepairCost               int32                    `nbt:\"minecraft:repair_cost\"`\n\t\tStoredEnchantments       StoredEnchantments       `nbt:\"minecraft:stored_enchantments\"`\n\t\tSuspiciousStewEffects    []SuspiciousStewEffect   `nbt:\"minecraft:suspicious_stew_effects\"`\n\t\tTool                     Tool                     `nbt:\"minecraft:tool\"`\n\t\tTrim                     Trim                     `nbt:\"minecraft:trim\"`\n\t\tUnbreakable              Unbreakable              `nbt:\"minecraft:unbreakable\"`\n\t\tWritableBookContent      WritableBookContent      `nbt:\"minecraft:writable_book_content\"`\n\t\tWrittenBookContent       WrittenBookContent       `nbt:\"minecraft:written_book_content\"`\n\t\tCreativeSlotLock         CreativeSlotLock         `nbt:\"minecraft:creative_slot_lock\"`\n\t\tMapPostProcessing        int32                    `nbt:\"minecraft:map_post_processing\"`\n\t} `nbt:\"components\"`*/\n}\n\n// Is checks if the tag applies to the item\nfunc (item *Item) IsTag(tagName string) bool {\n\treturn slices.Index(tags.Tags.Tags[\"minecraft:item\"][tagName], registry.Item.Get(item.Id)) != -1\n}\n\nfunc (item *Item) Is(i Item) bool {\n\treturn item.Id == i.Id && item.Components == i.Components\n}\n\n// returns the block of the item, if found\nfunc (i Item) Block() (block section.Block, ok bool) {\n\tb := section.GetBlock(i.Id)\n\t_, ok = registry.Block.Lookup(i.Id)\n\n\treturn b, ok\n}\n\n// New creates an item from the slot provided\nfunc New(slot int32, item slot.Slot) (Item, error) {\n\ti := Item{\n\t\tSlot:  DataSlotFrom(slot),\n\t\tCount: item.ItemCount,\n\t}\n\tid, ok := registry.Item.NameOf(item.ItemId)\n\tif !ok {\n\t\treturn i, fmt.Errorf(\"invalid item id\")\n\t}\n\n\ti.Id = id\n\n\treturn i, nil\n}\n"
  },
  {
    "path": "server/world/level/item/items.go",
    "content": "package item\r\n\r\nvar Air = Item{Id: \"minecraft:air\"}\r\n"
  },
  {
    "path": "server/world/level/item/jukebox_playable.go",
    "content": "package item\r\n\r\ntype JukeboxPlayable struct {\r\n\tSong          string `nbt:\"song\"`\r\n\tShowInTooltip bool   `nbt:\"show_in_tooltip\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/lodestone_tracker.go",
    "content": "package item\r\n\r\ntype LodestoneTracker struct {\r\n\tTarget  Target `nbt:\"target\"`\r\n\tTracked bool   `nbt:\"tracked\"`\r\n}\r\n\r\ntype Target struct {\r\n\tPos       []int32 `nbt:\"pos\"`\r\n\tDimension string  `nbt:\"dimension\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/map_post_processing.go",
    "content": "package item\r\n\r\ntype MapPostProcessing struct {\r\n\tMapPostProcessing int32 `nbt:\"map_post_processing\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/stored_enchantments.go",
    "content": "package item\r\n\r\ntype StoredEnchantments struct {\r\n\tLevels        any  `nbt:\"levels\"`\r\n\tShowInTooltip bool `nbt:\"show_in_tooltip\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/susipicious_stew_effects.go",
    "content": "package item\r\n\r\ntype SuspiciousStewEffect *struct {\r\n\tID       string `nbt:\"id\"`\r\n\tDuration int32  `nbt:\"duration\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/tool.go",
    "content": "package item\r\n\r\ntype Tool struct {\r\n\tDefaultMiningSpeed float32 `nbt:\"default_mining_speed\"`\r\n\tDamagePerBlock     int32   `nbt:\"damage_per_block\"`\r\n\tRules              []Rule  `nbt:\"rules\"`\r\n}\r\n\r\ntype Rule struct {\r\n\tBlocks          any     `nbt:\"blocks\"`\r\n\tSpeed           float32 `nbt:\"speed\"`\r\n\tCorrectForDrops bool    `nbt:\"correct_for_drops\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/trim.go",
    "content": "package item\r\n\r\ntype Trim struct {\r\n\tPattern       string `nbt:\"pattern\"`\r\n\tMaterial      string `nbt:\"material\"`\r\n\tShowInTooltip bool   `nbt:\"show_in_tooltip\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/unbreakable.go",
    "content": "package item\r\n\r\ntype Unbreakable struct {\r\n\tShowInTooltip bool `nbt:\"show_in_tooltip\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/writable_book_content.go",
    "content": "package item\r\n\r\ntype WritableBookContent struct {\r\n\tPages any `nbt:\"pages\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/item/written_book_content.go",
    "content": "package item\r\n\r\ntype WrittenBookContent struct {\r\n\tPages      any    `nbt:\"pages\"`\r\n\tTitle      Title  `nbt:\"title\"`\r\n\tAuthor     string `nbt:\"author\"`\r\n\tGeneration int32  `nbt:\"generation\"`\r\n\tResolved   bool   `nbt:\"resolved\"`\r\n}\r\n\r\ntype Title struct {\r\n\tRaw      string `nbt:\"raw\"`\r\n\tFiltered string `nbt:\"filtered\"`\r\n}\r\n"
  },
  {
    "path": "server/world/level/level.go",
    "content": "// Package level provides documentation and loading of .dat files found in the world folder (according to https://minecraft.wiki)\n// .dat files are NBT (Named Binary Tag) files compressed with Gunzip.\n// when writing a .dat file, the previous .dat file is renamed to .dat_old\n\npackage level\n\nimport (\n\t\"compress/gzip\"\n\t\"errors\"\n\t\"github.com/zeppelinmc/zeppelin/properties\"\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/nbt\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/level/seed\"\n)\n\nvar ErrAlreadyClosed = errors.New(\"already closed\")\n\nvar SessionLock = []byte{0xE2, 0x98, 0x83}\n\n// GameRule is a string containing an integer or a boolean\ntype GameRule string\n\n// Boolean returns the boolean inside of the game rule string\nfunc (rule GameRule) Boolean() (bool, error) {\n\treturn strconv.ParseBool(string(rule))\n}\n\n// Integer returns the int inside of the game rule string\nfunc (rule GameRule) Integer() (int, error) {\n\treturn strconv.Atoi(string(rule))\n}\n\n// UnixMilliTimestamp is date represented by the amount of milliseconds since January 1st, 1970\ntype UnixMilliTimestamp int64\n\nfunc (stamp UnixMilliTimestamp) Time() time.Time {\n\treturn time.UnixMilli(int64(stamp))\n}\n\nfunc Now() UnixMilliTimestamp {\n\treturn UnixMilliTimestamp(time.Now().UnixMilli())\n}\n\ntype DimensionGenerationSettings struct {\n\tGenerator struct {\n\t\tBiomeSource struct {\n\t\t\tPreset string `nbt:\"preset,omitempty\"`\n\t\t\tType   string `nbt:\"type\"`\n\t\t} `nbt:\"biome_source\"`\n\t\t//Settings string `nbt:\"settings\"` // Can be both string and compound, skip for now\n\t\tType string `nbt:\"type\"`\n\t} `nbt:\"generator\"`\n\tType string `nbt:\"type\"`\n}\n\ntype Level struct {\n\tData struct {\n\t\tBorderCenterX        float64\n\t\tBorderCenterZ        float64\n\t\tBorderDamagePerBlock float64\n\t\tBorderSize           float64\n\t\tBorderSafeZone       float64\n\t\tBorderSizeLerpTarget float64\n\t\tBorderSizeLerpTime   int64\n\t\tBorderWarningBlocks  float64\n\t\tBorderWarningTime    float64\n\n\t\tDataPacks struct {\n\t\t\tDisabled []string\n\t\t\tEnabled  []string\n\t\t}\n\n\t\tDataVersion      int32\n\t\tDayTime          int64\n\t\tDifficulty       byte\n\t\tDifficultyLocked bool\n\t\tDragonFight      struct {\n\t\t\tDragonKilled       bool\n\t\t\tGateways           []int32\n\t\t\tNeedsStateScanning bool\n\t\t\tPreviouslyKilled   byte\n\t\t}\n\n\t\tGameRules    map[string]GameRule\n\t\tGameType     GameMode\n\t\tLastPlayed   UnixMilliTimestamp\n\t\tLevelName    string\n\t\tServerBrands []string\n\n\t\tSpawnAngle             float32\n\t\tSpawnX, SpawnY, SpawnZ int32\n\n\t\tTime    int64 // time since the world has started in ticks\n\t\tVersion struct {\n\t\t\tId       int32\n\t\t\tName     string\n\t\t\tSeries   string\n\t\t\tSnapshot int8\n\t\t}\n\n\t\tWanderingTraderId          []int32\n\t\tWanderingTraderSpawnChance int32\n\t\tWanderingTraderSpawnDelay  int32\n\t\tWasModded                  bool\n\n\t\tWorldGenSettings struct {\n\t\t\tBonusChest       bool                                   `nbt:\"bonus_chest\"`\n\t\t\tDimensions       map[string]DimensionGenerationSettings `nbt:\"dimensions\"`\n\t\t\tGenerateFeatures bool                                   `nbt:\"generate_features\"`\n\t\t\tSeed             seed.Seed                              `nbt:\"seed\"`\n\t\t}\n\n\t\tAllowCommands    bool  `nbt:\"allowCommands\"`\n\t\tClearWeatherTime int32 `nbt:\"clearWeatherTime\"`\n\t\tHardcore         bool  `nbt:\"hardcore\"`\n\t\tInitialized      bool  `nbt:\"initialized\"`\n\n\t\tRainTime    int32 `nbt:\"rainTime\"`\n\t\tRaining     bool  `nbt:\"raining\"`\n\t\tThundertime int32 `nbt:\"thunderTime\"`\n\t\tThundering  bool  `nbt:\"thundering\"`\n\t\tVersionInt  int32 `nbt:\"version\"`\n\t}\n\n\t// the base path of the world\n\tbasePath string `nbt:\"-\"`\n\n\tclosed bool\n}\n\n// TODO fix EOF error\n// worldPath is the base path of the world\nfunc Open(worldPath string) (Level, error) {\n\tvar level Level\n\tfile, err := os.Open(worldPath + \"/level.dat\")\n\tif err != nil {\n\t\treturn level, err\n\t}\n\trd, err := gzip.NewReader(file)\n\tif err != nil {\n\t\treturn level, err\n\t}\n\n\tvar buf, _ = io.ReadAll(rd)\n\n\trd.Close()\n\tfile.Close()\n\n\t_, err = nbt.Unmarshal(buf, &level)\n\tlevel.basePath = worldPath\n\n\treturn level, err\n}\n\nfunc Create(l Level) error {\n\tfile, err := os.Create(l.basePath + \"/level.dat\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tw := gzip.NewWriter(file)\n\n\tdefer w.Close()\n\tdefer file.Close()\n\n\treturn nbt.NewEncoder(w).Encode(\"\", l)\n}\n\nfunc (l *Level) Close() error {\n\tif l.closed {\n\t\treturn ErrAlreadyClosed\n\t}\n\tl.closed = true\n\treturn Create(*l)\n}\n\nfunc New(gen chunk.Generator, props properties.ServerProperties, worldPath string) Level {\n\tvar l Level\n\tl.Data.SpawnX, l.Data.SpawnY, l.Data.SpawnZ = gen.GenerateWorldSpawn()\n\tl.Data.AllowCommands = true\n\tl.Data.BorderDamagePerBlock = 0.2\n\tl.Data.BorderSize = 60000000\n\tl.Data.BorderSafeZone = 5\n\tl.Data.BorderSizeLerpTarget = 60000000\n\tl.Data.BorderWarningBlocks = 5\n\tl.Data.BorderWarningTime = 15\n\tl.Data.DataPacks.Enabled = []string{\"vanilla\"}\n\tl.Data.Difficulty = diffstr(props.Difficulty)\n\tl.Data.WorldGenSettings.Seed = seed.New(props.LevelSeed)\n\tl.Data.WorldGenSettings.GenerateFeatures = props.GenerateStructures\n\tl.Data.GameType = gmstr(props.Gamemode)\n\tl.Data.Hardcore = props.Hardcore\n\tl.Data.Initialized = true\n\tl.Data.LastPlayed = Now()\n\tl.Data.LevelName = props.LevelName\n\tl.Data.VersionInt = 19133\n\n\tl.Data.Version.Id = 3953\n\tl.Data.Version.Name = \"1.21\"\n\tl.Data.Version.Series = \"main\"\n\tl.Data.ServerBrands = []string{\"Zeppelin\"}\n\tl.basePath = worldPath\n\n\treturn l\n}\n\nfunc (l *Level) Refresh(props properties.ServerProperties) {\n\tl.Data.AllowCommands = true\n\tl.Data.DataPacks.Enabled = []string{\"vanilla\"}\n\tl.Data.Difficulty = diffstr(props.Difficulty)\n\tl.Data.WorldGenSettings.GenerateFeatures = props.GenerateStructures\n\tl.Data.GameType = gmstr(props.Gamemode)\n\tl.Data.Hardcore = props.Hardcore\n\tl.Data.Initialized = true\n\tl.Data.LastPlayed = Now()\n\tl.Data.LevelName = props.LevelName\n\tl.Data.VersionInt = 19133\n\n\tl.Data.Version.Id = 3953\n\tl.Data.Version.Name = \"1.21\"\n\tl.Data.Version.Series = \"main\"\n\tl.Data.ServerBrands = []string{\"Zeppelin\"}\n}\n\nfunc diffstr(str string) byte {\n\tswitch str {\n\tcase \"peaceful\":\n\t\treturn 0\n\tcase \"normal\":\n\t\treturn 2\n\tcase \"hard\":\n\t\treturn 3\n\tdefault:\n\t\treturn 1\n\t}\n}\n\nfunc gmstr(str string) GameMode {\n\tswitch str {\n\tcase \"creative\":\n\t\treturn GameModeCreative\n\tcase \"adventure\":\n\t\treturn GameModeAdventure\n\tcase \"spectator\":\n\t\treturn GameModeSpectator\n\n\tdefault:\n\t\treturn GameModeSurvival\n\t}\n}\n"
  },
  {
    "path": "server/world/level/playerdata.go",
    "content": "package level\r\n\r\nimport (\r\n\t\"bytes\"\r\n\t\"compress/gzip\"\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"os\"\r\n\r\n\t\"github.com/google/uuid\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/nbt\"\r\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/packet/play\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/container\"\r\n\t\"github.com/zeppelinmc/zeppelin/server/entity\"\r\n\tdatauuid \"github.com/zeppelinmc/zeppelin/server/world/level/uuid\"\r\n)\r\n\r\ntype Player struct {\r\n\t// the path of this playerdata file, not a field in the nbt\r\n\tpath string `nbt:\"-\"`\r\n\t// the base path of the world\r\n\tbasePath string `nbt:\"-\"`\r\n\r\n\tAbsorptionAmount float32\r\n\tAir              int16\r\n\tBrain            struct {\r\n\t\tMemories struct{} `nbt:\"memories\"`\r\n\t}\r\n\tDataVersion       int32\r\n\tDeathTime         int16\r\n\tDimension         string\r\n\tEnderItems        container.Container\r\n\tFallFlying        bool\r\n\tFire              int16\r\n\tHealth            float32\r\n\tHurtByTimestamp   int32\r\n\tHurtTime          int16\r\n\tInventory         container.Container\r\n\tInvulnerable      bool\r\n\tLastDeathLocation struct {\r\n\t\tDimension string   `nbt:\"dimension\"`\r\n\t\tPos       [3]int32 `nbt:\"pos\"`\r\n\t}\r\n\tMotion           [3]float64\r\n\tOnGround         bool\r\n\tPortalCooldown   int32\r\n\tPos              [3]float64\r\n\tRotation         [2]float32\r\n\tScore            int32\r\n\tSelectedItemSlot int32\r\n\tSleepTimer       int16\r\n\tUUID             datauuid.UUID\r\n\r\n\tXpLevel int32\r\n\tXpP     float32\r\n\tXpSeed  int32\r\n\tXpTotal int32\r\n\r\n\tAbilities PlayerAbilities `nbt:\"abilities\"`\r\n\r\n\tActiveEffects []struct {\r\n\t\tDuration      int32  `nbt:\"duration\"`\r\n\t\tId            string `nbt:\"id\"`\r\n\t\tShowIcon      bool   `nbt:\"show_icon\"`\r\n\t\tShowParticles bool   `nbt:\"show_particles\"`\r\n\t} `nbt:\"active_effects\"`\r\n\r\n\tAttributes []entity.Attribute `nbt:\"attributes\"`\r\n\r\n\tCurrentImpulseContextResetGraceTime int32 `nbt:\"current_impulse_context_reset_grace_time\"`\r\n\r\n\tFoodExhaustionLevel float32 `nbt:\"foodExhaustionLevel\"`\r\n\tFoodLevel           int32   `nbt:\"foodLevel\"`\r\n\tFoodSaturationLevel float32 `nbt:\"foodSaturationLevel\"`\r\n\tFoodTickTimer       int32   `nbt:\"foodTickTimer\"`\r\n\r\n\tIgnoreFallDamageFromCurrentExplosion bool     `nbt:\"ignore_fall_damage_from_current_explosion\"`\r\n\tPlayerGameType                       GameMode `nbt:\"playerGameType\"`\r\n\r\n\tRecipeBook RecipeBook `nbt:\"recipeBook\"`\r\n\r\n\tSeenCredits               bool `nbt:\"seenCredits\"`\r\n\tSpawnExtraParticlesOnFall bool `nbt:\"spawn_extra_particles_on_fall\"`\r\n\tWardenSpawnTracker        struct {\r\n\t\tCooldownTicks         int32 `nbt:\"cooldown_ticks\"`\r\n\t\tTicksSinceLastWarning int32 `nbt:\"ticks_since_last_warning\"`\r\n\t\tWarningLevel          int32 `nbt:\"warning_level\"`\r\n\t} `nbt:\"warden_spawn_tracker\"`\r\n}\r\n\r\nfunc (data *Player) Save() error {\r\n\tos.MkdirAll(data.basePath+\"/playerdata\", 0755)\r\n\tos.Rename(data.path, data.path+\"_old\")\r\n\tfile, err := os.Create(data.path)\r\n\tif err != nil {\r\n\t\treturn err\r\n\t}\r\n\tgzip := gzip.NewWriter(file)\r\n\tif err := nbt.NewEncoder(gzip).Encode(\"\", *data); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\tif err := gzip.Close(); err != nil {\r\n\t\treturn err\r\n\t}\r\n\r\n\treturn file.Close()\r\n}\r\n\r\nfunc (w *Level) PlayerData(uuid string) (Player, error) {\r\n\tvar playerData Player\r\n\tpath := fmt.Sprintf(\"%s/playerdata/%s.dat\", w.basePath, uuid)\r\n\r\n\tfile, err := os.Open(path)\r\n\tif err != nil {\r\n\t\treturn playerData, err\r\n\t}\r\n\trd, err := gzip.NewReader(file)\r\n\tif err != nil {\r\n\t\treturn playerData, err\r\n\t}\r\n\r\n\tvar buf, _ = io.ReadAll(rd)\r\n\r\n\trd.Close()\r\n\tfile.Close()\r\n\r\n\t_, err = nbt.NewDecoder(bytes.NewReader(buf)).Decode(&playerData)\r\n\tplayerData.path = path\r\n\r\n\treturn playerData, err\r\n}\r\n\r\nfunc (w *Level) NewPlayerData(uuid uuid.UUID) Player {\r\n\treturn Player{\r\n\t\tpath:     fmt.Sprintf(\"%s/playerdata/%s.dat\", w.basePath, uuid),\r\n\t\tbasePath: w.basePath,\r\n\t\tPos:      [3]float64{float64(w.Data.SpawnX), float64(w.Data.SpawnY), float64(w.Data.SpawnZ)},\r\n\r\n\t\tHealth:              20,\r\n\t\tFoodSaturationLevel: 5,\r\n\t\tFoodLevel:           20,\r\n\t\tFire:                -20,\r\n\r\n\t\tUUID:           datauuid.New(uuid),\r\n\t\tDimension:      \"minecraft:overworld\",\r\n\t\tOnGround:       true,\r\n\t\tPlayerGameType: w.Data.GameType,\r\n\t\tAbilities: PlayerAbilities{\r\n\t\t\tFlySpeed:     0.05,\r\n\t\t\tInstabuild:   w.Data.GameType == GameModeCreative,\r\n\t\t\tInvulnerable: w.Data.GameType == GameModeCreative,\r\n\t\t\tMayFly:       w.Data.GameType == GameModeCreative,\r\n\t\t\tMayBuild:     w.Data.GameType != GameModeAdventure,\r\n\t\t\tWalkSpeed:    0.1,\r\n\t\t},\r\n\t\tAttributes: []entity.Attribute{\r\n\t\t\t{\r\n\t\t\t\tBase: 4.5,\r\n\t\t\t\tId:   \"minecraft:player.block_interaction_range\",\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tBase: 0.1,\r\n\t\t\t\tId:   \"minecraft:generic.movement_speed\",\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tBase: 3,\r\n\t\t\t\tId:   \"minecraft:player.entity_interaction_range\",\r\n\t\t\t},\r\n\t\t},\r\n\t}\r\n}\r\n\r\ntype RecipeBook struct {\r\n\tIsBlastingFurnaceFilteringCraftable bool `nbt:\"isBlastingFurnaceFilteringCraftable\"`\r\n\tIsBlastingFurnaceGuiOpen            bool `nbt:\"isBlastingFurnaceGuiOpen\"`\r\n\tIsFilteringCraftable                bool `nbt:\"isFilteringCraftable\"`\r\n\tIsFurnaceFilteringCraftable         bool `nbt:\"isFurnaceFilteringCraftable\"`\r\n\tIsFurnaceGuiOpen                    bool `nbt:\"isFurnaceGuiOpen\"`\r\n\tIsGuiOpen                           bool `nbt:\"isGuiOpen\"`\r\n\tIsSmokerFilteringCraftable          bool `nbt:\"isSmokerFilteringCraftable\"`\r\n\tIsSmokerGuiOpen                     bool `nbt:\"isSmokerGuiOpen\"`\r\n\r\n\tRecipes       []string `nbt:\"recipes\"`\r\n\tToBeDisplayed []string `nbt:\"toBeDisplayed\"`\r\n}\r\n\r\n// Game Mode\r\ntype GameMode int32\r\n\r\nconst (\r\n\tGameModeSurvival GameMode = iota\r\n\tGameModeCreative\r\n\tGameModeAdventure\r\n\tGameModeSpectator\r\n)\r\n\r\ntype PlayerAbilities struct {\r\n\tFlySpeed     float32 `nbt:\"flySpeed\"`\r\n\tFlying       bool    `nbt:\"flying\"`\r\n\tInstabuild   bool    `nbt:\"instabuild\"`\r\n\tInvulnerable bool    `nbt:\"invulnerable\"`\r\n\tMayBuild     bool    `nbt:\"mayBuild\"`\r\n\tMayFly       bool    `nbt:\"mayfly\"`\r\n\tWalkSpeed    float32 `nbt:\"walkSpeed\"`\r\n}\r\n\r\nfunc (a PlayerAbilities) Encode(fovModifier float32) *play.PlayerAbilitiesClientbound {\r\n\tvar flags int8\r\n\tif a.Invulnerable {\r\n\t\tflags |= 0x01\r\n\t}\r\n\tif a.Flying {\r\n\t\tflags |= 0x02\r\n\t}\r\n\tif a.MayFly {\r\n\t\tflags |= 0x04\r\n\t}\r\n\tif a.Instabuild {\r\n\t\tflags |= 0x08\r\n\t}\r\n\r\n\treturn &play.PlayerAbilitiesClientbound{\r\n\t\tFlags:       flags,\r\n\t\tFlyingSpeed: a.FlySpeed,\r\n\t\tFOVModifier: fovModifier,\r\n\t}\r\n}\r\n"
  },
  {
    "path": "server/world/level/region/anvil.go",
    "content": "// Package region provides decoding and encoding of Region (.mca) files\n\npackage region\n\nconst DataVersion = 3953\n"
  },
  {
    "path": "server/world/level/region/region_dec.go",
    "content": "package region\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"fmt\"\n\t\"io\"\n\t\"sync\"\n\n\t\"github.com/4kills/go-zlib\"\n\t\"github.com/aimjel/minecraft/nbt\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/buffers\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/compress\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\n)\n\ntype File struct {\n\trx, rz int32\n\n\tgenerator chunk.Generator\n\n\treader io.ReaderAt\n\n\tlocations []byte\n\n\tchunks map[uint64]*chunk.Chunk\n\tchu_mu sync.Mutex\n}\n\nfunc chunkLocation(l int32) (offset, size int32) {\n\toffset = ((l >> 8) & 0xFFFFFF)\n\tsize = l & 0xFF\n\n\treturn offset * 4096, size * 4096\n}\n\nfunc (r *File) generateChunkAt(x, z int32, tgt *chunk.Chunk, generator chunk.Generator) {\n\tc := generator.NewChunk(x, z)\n\n\t*tgt = c\n}\n\nfunc (r *File) LoadedChunks() int32 {\n\tr.chu_mu.Lock()\n\tdefer r.chu_mu.Unlock()\n\treturn int32(len(r.chunks))\n}\n\nfunc (r *File) GetChunk(x, z int32) (*chunk.Chunk, error) {\n\tvar chunkBuffer = buffers.Buffers.Get().(*bytes.Buffer)\n\tchunkBuffer.Reset()\n\tdefer buffers.Buffers.Put(chunkBuffer)\n\n\treturn r.GetChunkBuf(x, z, chunkBuffer)\n}\n\nfunc (r *File) GetChunkBuf(x, z int32, chunkBuffer *bytes.Buffer) (*chunk.Chunk, error) {\n\thash := ChunkHash(x, z)\n\n\tr.chu_mu.Lock()\n\tdefer r.chu_mu.Unlock()\n\tif c, ok := r.chunks[hash]; ok {\n\t\treturn c, nil\n\t}\n\n\tlocationIndex := 4 * ((x & 31) + (z&31)<<5)\n\tif int(locationIndex) >= len(r.locations) {\n\t\tif r.generator != nil {\n\t\t\tr.chunks[hash] = new(chunk.Chunk)\n\t\t\tr.generateChunkAt(x, z, r.chunks[hash], r.generator)\n\t\t\treturn r.chunks[hash], nil\n\t\t}\n\t\treturn nil, fmt.Errorf(\"chunk %d %d not found\", x, z)\n\t}\n\n\tl := r.locations[locationIndex : locationIndex+4]\n\tloc := int32(l[0])<<24 | int32(l[1])<<16 | int32(l[2])<<8 | int32(l[3])\n\n\toffset, size := chunkLocation(loc)\n\tif offset == 0 && size == 0 {\n\t\tif r.generator != nil {\n\t\t\tr.chunks[hash] = new(chunk.Chunk)\n\t\t\tr.generateChunkAt(x, z, r.chunks[hash], r.generator)\n\t\t\treturn r.chunks[hash], nil\n\t\t}\n\t\treturn nil, fmt.Errorf(\"chunk %d %d not found\", x, z)\n\t}\n\n\tvar chunkHeader [5]byte\n\n\t_, err := r.reader.ReadAt(chunkHeader[:], int64(offset))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlength := (int32(chunkHeader[0])<<24 | int32(chunkHeader[1])<<16 | int32(chunkHeader[2])<<8 | int32(chunkHeader[3])) - 1\n\tcompression := chunkHeader[4]\n\n\tif length == 0 {\n\t\treturn nil, fmt.Errorf(\"chunk %d %d not found\", x, z)\n\t}\n\n\tvar reader = io.NewSectionReader(r.reader, int64(offset)+5, int64(length))\n\n\tswitch compression {\n\tcase CompressionZlib:\n\t\tz := compress.RZlib.Get().(*zlib.Reader)\n\t\tz.Reset(reader, nil)\n\n\t\tchunkBuffer.ReadFrom(z)\n\t\tcompress.RZlib.Put(z)\n\tcase CompressionGzip:\n\t\tg := compress.RGzip.Get().(*gzip.Reader)\n\t\tg.Reset(reader)\n\n\t\tchunkBuffer.ReadFrom(g)\n\t\tcompress.RGzip.Put(z)\n\tcase CompressionNone:\n\t\tchunkBuffer.ReadFrom(reader)\n\t}\n\n\tvar anvil = new(chunk.Chunk)\n\n\tif err := nbt.Unmarshal(chunkBuffer.Bytes(), anvil); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor i := range anvil.Sections {\n\t\t(&anvil.Sections[i]).Init()\n\t}\n\n\tr.chunks[hash] = anvil\n\n\t/*if emptySections == len(r.chunks[hash].Sections) && r.generateEmpty && r.generator != nil {\n\t\tr.chunks[hash] = new(chunk.Chunk)\n\t\tr.generateChunkAt(x, z, r.chunks[hash], r.generator)\n\t\treturn r.chunks[hash], nil\n\t}*/\n\n\treturn anvil, err\n}\n\nfunc Empty(f *File, rx, rz int32, generator chunk.Generator) {\n\t*f = File{\n\t\tchunks: make(map[uint64]*chunk.Chunk),\n\t\trx:     rx, rz: rz,\n\t\tgenerator: generator,\n\t}\n}\n\nfunc Decode(r io.ReaderAt, f *File, rx, rz int32, generator chunk.Generator) error {\n\tvar locationTable = make([]byte, 4096)\n\n\t_, err := r.ReadAt(locationTable, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*f = File{\n\t\tchunks: make(map[uint64]*chunk.Chunk),\n\t\trx:     rx, rz: rz,\n\t\tgenerator: generator,\n\t\tlocations: locationTable,\n\t\treader:    r,\n\t}\n\n\treturn nil\n\t//return f.decodeAll(locationTable, r)\n}\n\nfunc ChunkHash(x, z int32) uint64 {\n\treturn uint64(uint32(z))<<32 | uint64(uint32(x))\n}\n"
  },
  {
    "path": "server/world/level/region/region_enc.go",
    "content": "package region\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"encoding/binary\"\n\t\"os\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/nbt\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/net/io/buffers\"\n)\n\ntype bufferCloser struct {\n\t*bytes.Buffer\n}\n\nfunc (bufferCloser) Close() error {\n\treturn nil\n}\n\nconst (\n\tCompressionGzip = iota + 1\n\tCompressionZlib\n\tCompressionNone\n\tCompressionLZ4\n)\n\n// 4096B\nvar MaxCompressedPacketSize = 4096\n\n// Encode writes itself to w.\nfunc (f *File) Encode(w *os.File, compressionScheme byte) error {\n\tvar locationTable [4096]byte\n\tvar timestampTable [4096]byte\n\tvar chunksOffset = len(locationTable) + len(timestampTable)\n\n\tvar buf = new(bytes.Buffer)\n\n\tvar chunkBuffer = buffers.Buffers.Get().(*bytes.Buffer)\n\tdefer buffers.Buffers.Put(chunkBuffer)\n\n\tfor _, chunk := range f.chunks {\n\t\tlocationIndex := ((uint32(chunk.X) % 32) + (uint32(chunk.Z)%32)*32) * 4\n\n\t\tlastModified := time.Now().UnixMilli() // this has no purpose\n\t\tbinary.BigEndian.PutUint32(timestampTable[locationIndex:locationIndex+4], uint32(lastModified))\n\n\t\toffset := (buf.Len() + chunksOffset) / 4096\n\n\t\tlocationTable[locationIndex+0],\n\t\t\tlocationTable[locationIndex+1],\n\t\t\tlocationTable[locationIndex+2],\n\t\t\tlocationTable[locationIndex+3] =\n\t\t\tbyte(offset>>16), byte(offset>>8), byte(offset), 1\n\n\t\tchunkBuffer.Reset()\n\n\t\tif err := nbt.NewEncoder(chunkBuffer).Encode(\"\", chunk); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tvar data []byte\n\t\tvar err error\n\n\t\tswitch compressionScheme {\n\t\tcase CompressionGzip:\n\t\t\t//data, err = compress.CompressGzip(chunkBuffer.Bytes(), nil)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase CompressionZlib:\n\t\t\t/*data, err = compress.CompressZlib(chunkBuffer.Bytes(), nil)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}*/\n\t\tcase CompressionNone:\n\t\t\tdata = chunkBuffer.Bytes()\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unknown compression scheme %d\", compressionScheme)\n\t\t}\n\n\t\tchunkLength := chunkBuffer.Len() + 1\n\n\t\tif _, err := buf.Write([]byte{\n\t\t\tbyte(chunkLength >> 24),\n\t\t\tbyte(chunkLength >> 16),\n\t\t\tbyte(chunkLength >> 8),\n\t\t\tbyte(chunkLength),\n\t\t\tcompressionScheme,\n\t\t}); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif _, err := buf.Write(data); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif _, err := buf.Write(make([]byte, (4096-(buf.Len()%4096))%4096)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif _, err := w.Write(locationTable[:]); err != nil {\n\t\treturn err\n\t}\n\tif _, err := w.Write(timestampTable[:]); err != nil {\n\t\treturn err\n\t}\n\t_, err := buf.WriteTo(w)\n\n\treturn err\n}\n"
  },
  {
    "path": "server/world/level/seed/seed.go",
    "content": "// Package seed provides parsing of string seeds and generating them\r\npackage seed\r\n\r\nimport (\r\n\t\"crypto/sha256\"\r\n\t\"encoding/binary\"\r\n\t\"math\"\r\n\t\"math/rand\"\r\n)\r\n\r\ntype Seed int64\r\n\r\n// First 8 bytes of the SHA-256 hash of the world's seed. Used client side for biome noise\r\nfunc (s Seed) Hash() int64 {\r\n\thash := sha256.Sum256(binary.BigEndian.AppendUint64(nil, uint64(s)))\r\n\r\n\treturn int64(binary.BigEndian.Uint64(hash[:8]))\r\n}\r\n\r\nfunc Random() Seed {\r\n\treturn Seed(rand.Int63())\r\n}\r\n\r\nfunc New(str string) Seed {\r\n\treturn Seed(hashCode(str))\r\n}\r\n\r\n// HashCode is an implementation of Java's hashCode function. It used to turn any string seed into a long seed\r\nfunc hashCode(s string) int64 {\r\n\tif len(s) == 0 {\r\n\t\treturn 0\r\n\t}\r\n\tvar result int64\r\n\tn := len(s)\r\n\r\n\tfor i := 0; i < len(s)-1; i++ {\r\n\t\tresult += int64(s[i]) * int64(math.Pow(31, float64(n-(i+1))))\r\n\t}\r\n\r\n\treturn result + int64(s[int(n)-1])\r\n}\r\n"
  },
  {
    "path": "server/world/level/uuid/uuid.go",
    "content": "// Package uuid provides a type for UUIDs stored in level files\n\npackage uuid\n\nimport \"github.com/google/uuid\"\n\nfunc New(u uuid.UUID) UUID {\n\treturn UUID{\n\t\tint32(u[0])<<24 | int32(u[1])<<16 | int32(u[2])<<8 | int32(u[3]),\n\t\tint32(u[4])<<24 | int32(u[5])<<16 | int32(u[6])<<8 | int32(u[7]),\n\t\tint32(u[8])<<24 | int32(u[9])<<16 | int32(u[10])<<8 | int32(u[11]),\n\t\tint32(u[12])<<24 | int32(u[13])<<16 | int32(u[14])<<8 | int32(u[15]),\n\t}\n}\n\n// A uuid saved in playerdata and state files contains 4 integers of the 128 bit uuid ordered from most to least significant\ntype UUID [4]int32\n\n// Returns the UUID object of this data uuid\nfunc (u UUID) UUID() uuid.UUID {\n\treturn uuid.UUID{\n\t\tbyte(u[0] >> 24),\n\t\tbyte(u[0] >> 16),\n\t\tbyte(u[0] >> 8),\n\t\tbyte(u[0]),\n\n\t\tbyte(u[1] >> 24),\n\t\tbyte(u[1] >> 16),\n\t\tbyte(u[1] >> 8),\n\t\tbyte(u[1]),\n\n\t\tbyte(u[2] >> 24),\n\t\tbyte(u[2] >> 16),\n\t\tbyte(u[2] >> 8),\n\t\tbyte(u[2]),\n\n\t\tbyte(u[3] >> 24),\n\t\tbyte(u[3] >> 16),\n\t\tbyte(u[3] >> 8),\n\t\tbyte(u[3]),\n\t}\n}\n"
  },
  {
    "path": "server/world/terrain/superflat.go",
    "content": "package terrain\r\n\r\nimport (\r\n\t\"math/rand\"\r\n\r\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\r\n)\r\n\r\n// superflat chunk generator\r\ntype SuperflatTerrain struct {\r\n}\r\n\r\nfunc (SuperflatTerrain) NewChunk(cx, cz int32) chunk.Chunk {\r\n\tc := chunk.NewChunk(cx, cz)\r\n\r\n\tfor x := int32(0); x < 16; x++ {\r\n\t\tfor z := int32(0); z < 16; z++ {\r\n\t\t\tc.SetBlock(x, 4, z, grassBlock)\r\n\t\t\tc.SetBlock(x, 2, z, dirt)\r\n\t\t\tc.SetBlock(x, 1, z, dirt)\r\n\t\t\tc.SetBlock(x, 0, z, bedrock)\r\n\t\t}\r\n\t}\r\n\r\n\treturn c\r\n}\r\n\r\nfunc (SuperflatTerrain) GenerateWorldSpawn() (x, y, z int32) {\r\n\treturn rand.Int31n(160), 5, rand.Int31n(160)\r\n}\r\n"
  },
  {
    "path": "server/world/terrain/terrain.go",
    "content": "package terrain\n\nimport (\n\t\"math\"\n\t\"math/rand\"\n\n\t\"github.com/aquilax/go-perlin\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/block\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk/section\"\n)\n\ntype TerrainGenerator struct {\n\tnoise *perlin.Perlin\n\tseed  int64\n}\n\nfunc (g TerrainGenerator) GenerateWorldSpawn() (x, y, z int32) {\n\tx, z = rand.Int31n(160), rand.Int31n(160)\n\ty = int32(math.Ceil(g.y(x, z)))\n\n\treturn\n}\n\nfunc (g TerrainGenerator) y(x, z int32) float64 {\n\treturn g.noise.Noise2D(float64(x)/30, float64(z)/30)*10 + 80\n}\n\nfunc (g TerrainGenerator) NewChunk(cx, cz int32) chunk.Chunk {\n\tc := chunk.NewChunk(cx, cz)\n\n\tvar (\n\t\ttreeY int32\n\t)\n\n\tfor x := int32(0); x < 16; x++ {\n\t\tfor z := int32(0); z < 16; z++ {\n\t\t\tabsX, absZ := (cx<<4)+x, (cz<<4)+z\n\n\t\t\ty := int32(g.y(absX, absZ))\n\n\t\t\tif y <= -64 {\n\t\t\t\ty = -64\n\t\t\t} else if y >= 320 {\n\t\t\t\ty = 320\n\t\t\t}\n\n\t\t\tc.Heightmaps.WorldSurface.Set(x, z, y)\n\t\t\tc.Heightmaps.MotionBlocking.Set(x, z, y)\n\t\t\tc.SetBlock(x, y, z, grassBlock)\n\t\t\tfor s := int32(chunk.MinChunkY * 16); s < y; s++ {\n\t\t\t\tc.SetBlock(x, int32(s), z, dirt)\n\t\t\t}\n\n\t\t\tif x == 7 && z == 7 {\n\t\t\t\ttreeY = y\n\t\t\t}\n\t\t}\n\t}\n\n\tif rand.Int31()&0x01 == 00 {\n\t\tg.generateTree(c, 7, 7, treeY)\n\t}\n\n\treturn c\n}\n\n// tree, woody plant that regularly renews its growth (perennial). Most plants classified as trees have a single self-supporting trunk containing woody tissues, and in most species the trunk produces secondary limbs, called branches\nfunc (g TerrainGenerator) generateTree(c chunk.Chunk, x, z, surface int32) {\n\t// set the block under the tree to be dirt\n\tc.SetBlock(x, surface, z, dirt)\n\t// set 4 layers of oak logs\n\tc.SetBlock(x, surface+1, z, oakLog)\n\tc.SetBlock(x, surface+2, z, oakLog)\n\tc.SetBlock(x, surface+3, z, oakLog)\n\tc.SetBlock(x, surface+4, z, oakLog)\n\n\tfor i := x - 2; i <= x+2; i++ {\n\t\tfor j := z - 2; j <= z+2; j++ {\n\t\t\t// generate the bottom 2 layers of the tree's leaves (3x3 excluding corners)\n\t\t\tif !isCorner(i, j, x-2, z-2, x+2, z+2) {\n\t\t\t\tc.SetBlock(i, surface+5, j, oakLeaves)\n\t\t\t\tif i != x || j != z {\n\t\t\t\t\tc.SetBlock(i, surface+4, j, oakLeaves)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// generate the top 2 layers of the tree's leaves (both 2x2 and one excluding corners)\n\t\t\tif i >= x-1 && i <= x+1 && j >= z-1 && j <= z+1 {\n\t\t\t\tc.SetBlock(i, surface+6, j, oakLeaves)\n\n\t\t\t\tif !isCorner(i, j, x-1, z-1, x+1, z+1) {\n\t\t\t\t\tc.SetBlock(i, surface+7, j, oakLeaves)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc NewTerrainGenerator(seed int64) TerrainGenerator {\n\treturn TerrainGenerator{\n\t\tnoise: perlin.NewPerlin(2, 2, 1, seed),\n\t\tseed:  seed,\n\t}\n}\n\nfunc isCorner(x, z, minX, minZ, maxX, maxZ int32) bool {\n\treturn (x == minX && z == minZ) || (x == maxX && z == maxZ) || (x == maxX && z == minZ) || (x == minZ && z == maxZ)\n}\n\nvar grassBlock = section.AnvilBlock{Name: \"minecraft:grass_block\"} //block.GrassBlock{}\nvar dirt = section.AnvilBlock{Name: \"minecraft:dirt\"}\nvar bedrock = section.AnvilBlock{Name: \"minecraft:bedrock\"}\nvar oakLog = section.AnvilBlock{Name: \"minecraft:oak_log\", Properties: map[string]string{\"axis\": block.AxisY}}\nvar oakLeaves = section.AnvilBlock{Name: \"minecraft:leaves\", Properties: map[string]string{\"distance\": \"1\"}}\n"
  },
  {
    "path": "server/world/world.go",
    "content": "package world\n\nimport (\n\t\"fmt\"\n\t\"github.com/zeppelinmc/zeppelin/properties\"\n\t\"os\"\n\t\"sync/atomic\"\n\n\t//\"github.com/zeppelinmc/zeppelin/server/session\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/chunk\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/dimension\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/level\"\n\t\"github.com/zeppelinmc/zeppelin/server/world/terrain\"\n)\n\ntype World struct {\n\tlevel.Level\n\tdimension.DimensionManager\n\t//Broadcast  *session.Broadcast\n\n\tlevelPrepared bool\n\n\tprops properties.ServerProperties\n\n\tlock *os.File\n\n\tpath              string\n\tworldAge, dayTime atomic.Int64\n}\n\nconst version = 19133\n\nfunc NewWorld(props properties.ServerProperties) (*World, error) {\n\tvar err error\n\tw := &World{\n\t\tpath: props.LevelName,\n\t\t//Broadcast: session.NewBroadcast(props),\n\t\tprops: props,\n\t}\n\n\towgen := terrain.NewTerrainGenerator(int64(w.Data.WorldGenSettings.Seed))\n\n\tw.Level, err = level.Open(props.LevelName)\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\t_ = w.prepareLevel(owgen, props)\n\t}\n\n\tif w.Level.Data.VersionInt > version {\n\t\treturn nil, fmt.Errorf(\"world is too old\")\n\t}\n\tif w.Level.Data.VersionInt < version {\n\t\treturn nil, fmt.Errorf(\"world is too new\")\n\t}\n\n\tif w.obtainLock() != nil {\n\t\treturn nil, fmt.Errorf(\"failed to obtain session.lock\")\n\t}\n\n\tw.worldAge.Store(w.Level.Data.Time)\n\tw.dayTime.Store(w.Level.Data.DayTime)\n\tw.DimensionManager = dimension.NewDimensionManager(map[string]*dimension.Dimension{\n\t\t\"minecraft:overworld\": dimension.New(\n\t\t\tprops.LevelName+\"/region\",\n\t\t\t\"minecraft:overworld\",\n\t\t\t\"minecraft:overworld\",\n\t\t\t//w.Broadcast,\n\t\t\t//owgen,\n\t\t\tnil,\n\t\t\tw.Level,\n\t\t),\n\t})\n\n\tw.Level.Refresh(w.props)\n\n\treturn w, nil\n}\n\n// prepareLevel creates a new level.dat file and other world folders\nfunc (w *World) prepareLevel(owgen chunk.Generator, props properties.ServerProperties) error {\n\tw.Level = level.New(owgen, props, w.path)\n\n\treturn anyerror(\n\t\tos.MkdirAll(w.path+\"/playerdata\", 0755),\n\t\tos.Mkdir(w.path+\"/region\", 0755),\n\t\tos.Mkdir(w.path+\"/poi\", 0755),\n\t\tos.Mkdir(w.path+\"/entities\", 0755),\n\n\t\tos.MkdirAll(w.path+\"/DIM-1/region\", 0755),\n\t\tos.MkdirAll(w.path+\"/DIM1/region\", 0755),\n\t)\n}\n\nfunc anyerror(err ...error) error {\n\tfor _, err := range err {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (w *World) obtainLock() error {\n\tf, err := os.OpenFile(w.path+\"/session.lock\", os.O_RDWR|os.O_CREATE, 0755)\n\tif err != nil {\n\t\treturn err\n\t}\n\tf.Write(level.SessionLock)\n\tw.lock = f\n\treturn nil\n}\n\n// increments the day time and world age by one tick and returns the updated time\nfunc (w *World) IncrementTime() (worldAge, dayTime int64) {\n\tworldAge = w.worldAge.Add(1)\n\tdayTime = w.dayTime.Add(1)\n\n\treturn\n}\n\nfunc (w *World) Time() (worldAge, dayTime int64) {\n\treturn w.worldAge.Load(), w.dayTime.Load()\n}\n\nfunc (w *World) DaytimeAdd(delta int64) {\n\tw.dayTime.Add(delta)\n}\n\nfunc (w *World) DaytimeSet(v int64) {\n\tw.dayTime.Store(v)\n}\n\nfunc (w *World) WorldAgeSet(v int64) {\n\tw.worldAge.Store(v)\n}\n"
  },
  {
    "path": "util/atomic/atomic.go",
    "content": "package atomic\r\n\r\nimport \"sync/atomic\"\r\n\r\ntype AtomicValue[T any] struct {\r\n\tv atomic.Value\r\n}\r\n\r\nfunc (a *AtomicValue[T]) Get() T {\r\n\tval := a.v.Load()\r\n\tif val == nil {\r\n\t\tvar e T\r\n\t\treturn e\r\n\t}\r\n\tv, _ := val.(T)\r\n\r\n\treturn v\r\n}\r\n\r\nfunc (a *AtomicValue[T]) Set(t T) {\r\n\ta.v.Store(t)\r\n}\r\n\r\nfunc Value[T any](value T) AtomicValue[T] {\r\n\tval := AtomicValue[T]{}\r\n\tval.Set(value)\r\n\treturn val\r\n}\r\n"
  },
  {
    "path": "util/atomic/slice.go",
    "content": "package atomic\n\nimport (\n\t\"sync/atomic\"\n\t\"unsafe\"\n)\n\n// Pointer is the size of pointers\nvar Pointer = unsafe.Sizeof(0)\n\n//go:linkname mallocgc runtime.mallocgc\nfunc mallocgc(size uintptr, typ unsafe.Pointer, needzero bool) unsafe.Pointer\n\nfunc memcpy(dst, src unsafe.Pointer, n uintptr) {\n\tdstS := unsafe.Slice((*byte)(dst), n)\n\tsrcS := unsafe.Slice((*byte)(src), n)\n\n\tcopy(dstS, srcS)\n}\n\nfunc Make(len, cap, sizeOfElement uintptr) Slice {\n\treturn Slice{\n\t\tptr: uintptr(mallocgc(cap, nil, false)),\n\t\tlen: len, cap: cap,\n\n\t\tsizeOfElement: sizeOfElement,\n\t}\n}\n\n// Slice is an atomic slice with all read only fields. Entries cannot be removed.\ntype Slice struct {\n\tptr, len, cap uintptr\n\n\t//not atomic\n\tsizeOfElement uintptr\n}\n\nfunc (a *Slice) Len() uintptr {\n\treturn atomic.LoadUintptr(&a.len)\n}\n\nfunc (a *Slice) Cap() uintptr {\n\treturn atomic.LoadUintptr(&a.cap)\n}\n\nfunc (a *Slice) Pointer() unsafe.Pointer {\n\treturn unsafe.Pointer(atomic.LoadUintptr(&a.ptr))\n}\n\n// At returns the element at the specified index, while checking that the index is in bounds\nfunc (a *Slice) At(index uintptr) unsafe.Pointer {\n\tif a.Cap() < index {\n\t\tpanic(\"out of bounds\")\n\t}\n\tif a.Len() < index {\n\t\tatomic.StoreUintptr(&a.len, index+1)\n\t}\n\treturn a.Element(index)\n}\n\n// Element returns the element at the specified index, without checking that the index is in bounds\nfunc (a *Slice) Element(index uintptr) unsafe.Pointer {\n\treturn unsafe.Add(a.Pointer(), index*a.sizeOfElement)\n}\n\n// Grow grows the slice to capacity of cap\nfunc (a *Slice) Grow(cap uintptr) {\n\tnewPtr := mallocgc(cap*a.sizeOfElement, nil, false)\n\tlength := a.Len()\n\n\tmemcpy(newPtr, a.Pointer(), a.sizeOfElement*length)\n\n\tatomic.StoreUintptr(&a.ptr, uintptr(newPtr))\n\tatomic.StoreUintptr(&a.cap, cap)\n}\n\n// TrimStart removes the first count elements from the slice\nfunc (a *Slice) TrimStart(count uintptr) {\n\tif count > a.Cap() {\n\t\tpanic(\"out of bounds\")\n\t}\n\n\tatomic.AddUintptr(&a.ptr, count*a.sizeOfElement)\n}\n\n// TrimEnd removes the last count elements from the slice\nfunc (a *Slice) TrimEnd(count uintptr) {\n\tif count > a.Cap() {\n\t\tpanic(\"out of bounds\")\n\t}\n\n\tatomic.AddUintptr(&a.len, -count*a.sizeOfElement)\n}\n\n// Append adds the elements from the specified pointers to the slice\nfunc (a *Slice) Append(elements ...unsafe.Pointer) {\n\tcurrentLength := a.Len()\n\tcurrentCapacity := a.Cap()\n\n\tcount := uintptr(len(elements))\n\n\t// need to expand the slice\n\tif newLength := currentLength + count; newLength > currentCapacity {\n\t\ta.Grow(newLength)\n\t\ta.Append(elements...)\n\t\treturn\n\t}\n\n\tbasePtr := unsafe.Add(a.Pointer(), currentLength*a.sizeOfElement)\n\n\tfor _, element := range elements {\n\t\tmemcpy(basePtr, element, a.sizeOfElement)\n\t\tbasePtr = unsafe.Add(basePtr, a.sizeOfElement)\n\t}\n\n\tatomic.AddUintptr(&a.len, count)\n}\n"
  },
  {
    "path": "util/console/console.go",
    "content": "package console\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n\t\"github.com/zeppelinmc/zeppelin/server\"\n\t\"github.com/zeppelinmc/zeppelin/util/log\"\n)\n\ntype console struct{}\n\nfunc (c console) SystemMessage(t text.TextComponent) error {\n\tlog.Chat(t)\n\treturn nil\n}\n\nvar Console console\n\nfunc GetFlag(name string) (string, bool) {\n\tname = \"--\" + name + \"=\"\n\tfor _, a := range os.Args {\n\t\tif i := strings.Index(a, name); i == 0 {\n\t\t\tif len(name)+i < len(a) {\n\t\t\t\treturn a[len(name)+i:], true\n\t\t\t}\n\t\t}\n\t}\n\n\treturn \"\", false\n}\n\nfunc StartConsole(srv *server.Server) {\n\tvar line string\n\tvar scanner = bufio.NewScanner(os.Stdin)\n\n\tinterrupt := make(chan os.Signal, 1)\n\tsignal.Notify(interrupt, os.Interrupt, os.Kill)\n\n\tgo func() {\n\t\tfor range interrupt {\n\t\t\tnewText := \"\\r> stop\"\n\t\t\tfmt.Print(newText)\n\t\t\tl := len(line) + 3 // the addtitional 3 chars are \"\\r> \"\n\t\t\tif l > len(newText) {\n\t\t\t\tfmt.Print(strings.Repeat(\" \", l-len(newText)))\n\t\t\t}\n\t\t\tfmt.Println()\n\t\t\tsrv.Stop()\n\t\t\tos.Stdin.Close()\n\t\t}\n\t}()\n\n\tfor {\n\t\tif !scanner.Scan() {\n\t\t\tbreak\n\t\t}\n\t\tline = scanner.Text()\n\t\tsrv.CommandManager.Call(line, Console)\n\t\tfmt.Print(\"\\r> \")\n\t}\n}\n\nfunc StartRawConsole(srv *server.Server) {\n\tvar char [1]byte\n\tvar currentLine string\n\n\tvar previousLines []string\n\tvar previousLinesIndex int\n\n\tvar currentLineIndex int\n\ncharl:\n\tfor {\n\t\tos.Stdin.Read(char[:])\n\t\tif char[0] == 27 {\n\t\t\tos.Stdin.Read(char[:])\n\t\t\tif char[0] != 91 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tos.Stdin.Read(char[:])\n\n\t\t\tswitch char[0] {\n\t\t\tcase 'A': //up\n\t\t\t\tif len(previousLines[previousLinesIndex:]) == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tl := previousLines[previousLinesIndex]\n\t\t\t\tpreviousLinesIndex++\n\n\t\t\t\tfmt.Print(\"\\r> \", l)\n\t\t\t\tif l, l0 := len(currentLine), len(l); l > l0 {\n\t\t\t\t\tfmt.Print(strings.Repeat(\" \", l-l0))\n\t\t\t\t}\n\t\t\t\tcurrentLineIndex = len(l) - 1\n\t\t\t\tcurrentLine = l\n\t\t\tcase 'B': //down\n\t\t\tcase 'C': //right\n\t\t\t\tif currentLineIndex == len(currentLine) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfmt.Printf(\"%c\", currentLine[currentLineIndex])\n\t\t\t\tcurrentLineIndex++\n\t\t\tcase 'D': //left\n\t\t\t\tif currentLineIndex == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tcurrentLineIndex--\n\t\t\t\tfmt.Print(\"\\b\")\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tswitch char[0] {\n\t\tcase '\\b', 127: //backspace\n\t\t\tif len(currentLine) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfmt.Print(\"\\b \\b\")\n\t\t\tcurrentLine = currentLine[:len(currentLine)-1]\n\t\t\tcurrentLineIndex--\n\t\tcase 3: //ctrl-c\n\t\t\tnewText := \"\\r> stop\"\n\t\t\tfmt.Print(newText)\n\t\t\tl := len(currentLine) + 3 // the addtitional 3 chars are \"\\r> \"\n\t\t\tif l > len(newText) {\n\t\t\t\tfmt.Print(strings.Repeat(\" \", l-len(newText)))\n\t\t\t}\n\t\t\tfmt.Println()\n\t\t\tsrv.Stop()\n\t\t\tbreak charl\n\t\tcase 13: // enter\n\t\t\tif currentLine == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfmt.Println()\n\t\t\tsrv.CommandManager.Call(currentLine, Console)\n\t\t\tpreviousLines = append([]string{currentLine}, previousLines...)\n\t\t\tcurrentLine = \"\"\n\t\t\tcurrentLineIndex = 0\n\t\t\tfmt.Print(\"\\r> \")\n\t\tdefault:\n\t\t\tif currentLineIndex < len(currentLine) {\n\t\t\t\t*unsafe.StringData(currentLine[currentLineIndex:]) = char[0]\n\t\t\t} else {\n\t\t\t\tcurrentLine += fmt.Sprintf(\"%c\", char[0])\n\t\t\t}\n\t\t\tcurrentLineIndex++\n\t\t\tfmt.Printf(\"%c\", char[0])\n\t\t}\n\t}\n}\n\n//8 erase\n//3\n"
  },
  {
    "path": "util/log/log.go",
    "content": "package log\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"net\"\n\t\"runtime\"\n\t\"runtime/debug\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/fatih/color\"\n\t\"github.com/zeppelinmc/zeppelin/protocol/text\"\n)\n\nvar timeColor = color.New(color.FgHiBlack).SprintFunc()\nvar stackColor = color.New(color.FgHiBlack).SprintFunc()\nvar infoColor = color.New(color.FgHiBlue, color.Bold).SprintFunc()\nvar errorColor = color.New(color.FgRed, color.Bold).SprintFunc()\nvar warningColor = color.New(color.FgYellow, color.Bold).SprintFunc()\nvar chatColor = color.New(color.FgHiGreen, color.Bold).SprintFunc()\n\nvar buildInfo, _ = debug.ReadBuildInfo()\nvar mainModuleName = buildInfo.Main.Path[strings.LastIndex(buildInfo.Main.Path, \"/\")+1:]\n\nfunc FormatAddr(logIps bool, addr net.Addr) string {\n\tif logIps {\n\t\treturn \"[\" + addr.String() + \"] \"\n\t}\n\treturn \"\"\n}\n\nfunc timeString() string {\n\ttime := time.Now()\n\n\treturn fmt.Sprintf(\"%02d:%02d:%02d\", time.Hour(), time.Minute(), time.Second())\n}\n\nfunc Time() string {\n\treturn timeColor(timeString())\n}\n\nvar strs = sync.Pool{\n\tNew: func() any { return new(strings.Builder) },\n}\n\nfunc SprintText(msg text.TextComponent) string {\n\tstr := strs.Get().(*strings.Builder)\n\tstr.Reset()\n\tdefer strs.Put(str)\n\n\tvar components = append([]text.TextComponent{msg}, msg.Extra...)\n\tfor _, component := range components {\n\t\tc := colors[component.Color]\n\t\tif c == nil {\n\t\t\tc = colors[\"white\"]\n\t\t}\n\t\tif component.Bold {\n\t\t\tc = c.Add(color.Bold)\n\t\t}\n\t\tif component.Strikethrough {\n\t\t\tc = c.Add(color.CrossedOut)\n\t\t}\n\t\tif component.Underlined {\n\t\t\tc = c.Add(color.Underline)\n\t\t}\n\t\tif component.Italic {\n\t\t\tc = c.Add(color.Italic)\n\t\t}\n\t\tstr.WriteString(c.Sprint(component.Text))\n\t}\n\n\treturn strings.ReplaceAll(str.String(), \"\\n\", \"\\n\\r\")\n}\n\nvar colors = map[string]*color.Color{\n\t\"black\":        color.New(color.FgBlack),\n\t\"dark_blue\":    color.New(color.FgBlue),\n\t\"dark_green\":   color.New(color.FgGreen),\n\t\"dark_aqua\":    color.New(color.FgCyan),\n\t\"dark_red\":     color.New(color.FgRed, color.Bold),\n\t\"dark_purple\":  color.New(color.FgMagenta),\n\t\"gold\":         color.New(color.FgYellow, color.Bold),\n\t\"gray\":         color.New(color.FgWhite),\n\t\"dark_gray\":    color.New(color.FgHiBlack),\n\t\"blue\":         color.New(color.FgHiBlue, color.Bold),\n\t\"green\":        color.New(color.FgGreen),\n\t\"aqua\":         color.New(color.FgHiCyan),\n\t\"red\":          color.New(color.FgHiRed),\n\t\"light_purple\": color.New(color.FgHiMagenta),\n\t\"yellow\":       color.New(color.FgHiYellow),\n\t\"white\":        color.New(color.FgHiWhite),\n}\n\nvar stackBuf = sync.Pool{\n\tNew: func() any {\n\t\treturn make([]byte, 1024)\n\t},\n}\n\nfunc stackCallerModule(i int) string {\n\tbuf := stackBuf.Get().([]byte)\n\tdefer stackBuf.Put(buf)\n\n\tbuf = buf[:runtime.Stack(buf, false)]\n\tstr := unsafe.String(unsafe.SliceData(buf), len(buf))\n\n\tlines := strings.Split(str, \"\\n\")[1:]\n\n\ti = int(math.RoundToEven(float64(i))) + 1\n\tline := lines[i]\n\n\tsp := strings.Split(line, \"/\")\n\tif len(sp) == 0 {\n\t\treturn \"\"\n\t}\n\ti = strings.Index(sp[len(sp)-1], \".\")\n\tif i != -1 {\n\t\tsp[len(sp)-1] = sp[len(sp)-1][:i]\n\t}\n\n\tif i := strings.Index(sp[0], \".\"); i != -1 {\n\t\tsp = sp[2:]\n\t}\n\n\tmodName := sp[0]\n\tpkgName := sp[len(sp)-1]\n\n\tif modName == \"main\" {\n\t\tmodName = mainModuleName\n\t}\n\n\treturn modName + \"::\" + pkgName\n}\n\n/*\nPrintln prints the content prefixed and suffixed with a carriage return with an endline in the end.\nUnlike fmt.Println, this doesn't add spaces between the elements\n\nThis should be used if raw terminal is enabled, but it works without it aswell\n*/\nfunc Println(v ...any) (i int, err error) {\n\tif i0, err := fmt.Print(\"\\r\"); err != nil {\n\t\treturn i0, err\n\t} else {\n\t\ti += i0\n\t}\n\n\tif i0, err := fmt.Print(v...); err != nil {\n\t\treturn i0, err\n\t} else {\n\t\ti += i0\n\t}\n\ti0, err := fmt.Println(\"\\r\")\n\n\treturn i + i0, err\n}\n\n/*\nPrint prints the content prefixed and suffixed with a carriage return.\n\nThis should be used if raw terminal is enabled, but it works without it aswell\n*/\nfunc Print(v ...any) (i int, err error) {\n\tif i0, err := fmt.Print(\"\\r\"); err != nil {\n\t\treturn i0, err\n\t} else {\n\t\ti += i0\n\t}\n\n\ti0, err := fmt.Print(v...)\n\treturn i + i0, err\n}\n\n/*\nPrintf prints the content formatted, and prefixed and suffixed with a carriage return.\n\nThis should be used if raw terminal is enabled, but it works without it aswell\n*/\nfunc Printf(format string, v ...any) (i int, err error) {\n\treturn fmt.Printf(\"\\r\"+format, v...)\n}\n\n/*\nPrintln prints the content formatted, and prefixed and suffixed with a carriage return with an endline in the end.\nUnlike fmt.Println, this doesn't add spaces between the elements\n\nThis should be used if raw terminal is enabled, but it works without it aswell\n*/\nfunc Printlnf(format string, v ...any) (i int, err error) {\n\tif i0, err := fmt.Print(\"\\r\"); err != nil {\n\t\treturn i0, err\n\t} else {\n\t\ti += i0\n\t}\n\n\tif i0, err := fmt.Printf(format, v...); err != nil {\n\t\treturn i0, err\n\t} else {\n\t\ti += i0\n\t}\n\ti0, err := fmt.Println(\"\\r\")\n\n\treturn i + i0, err\n}\n\nfunc Chat(t text.TextComponent) {\n\tPrintlnf(\"%s %s %s: %s\", timeColor(timeString()), chatColor(\"CHAT \"), stackColor(stackCallerModule(5)), SprintText(t))\n}\n\n// prints the contents prefixed by a carriage return + time, blue info text and suffixed with a newline and \"> \"\nfunc Infoln(v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: \", timeColor(timeString()), infoColor(\"INFO \"), stackColor(stackCallerModule(3)))\n\tfmt.Println(v...)\n\tfmt.Print(\"\\r> \")\n}\n\n// prints the contents prefixed by a carriage return + blue info text and suffixed with a new line\nfunc InfolnClean(v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: \", timeColor(timeString()), infoColor(\"INFO \"), stackColor(stackCallerModule(3)))\n\tfmt.Print(v...)\n\tfmt.Println(\"\\r\")\n}\n\n// prints the contents formatted prefixed by a carriage return + blue info text and suffixed with a new line\nfunc InfolnfClean(format string, v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: \", timeColor(timeString()), infoColor(\"INFO \"), stackColor(stackCallerModule(3)))\n\tfmt.Printf(format, v...)\n\tfmt.Println(\"\\r\")\n}\n\n// prints the contents prefixed by a carriage return + blue info text\nfunc Info(v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: \", timeColor(timeString()), infoColor(\"INFO \"), stackColor(stackCallerModule(3)))\n\tfmt.Print(v...)\n}\n\n// prints the contents prefixed by a carriage return + blue info text\nfunc Infof(format string, v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: %s\", timeColor(timeString()), infoColor(\"INFO \"), stackColor(stackCallerModule(3)), fmt.Sprintf(format, v...))\n}\n\n// prints the contents prefixed by a carriage return + blue info text and suffixed with a newline and \"> \"\nfunc Infolnf(format string, v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: %s\\n\\r> \", timeColor(timeString()), infoColor(\"INFO \"), stackColor(stackCallerModule(3)), fmt.Sprintf(format, v...))\n}\n\n// prints the contents prefixed by a carriage return + blue info text and suffixed with a newline and \"> \"\nfunc Errorln(v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: \", timeColor(timeString()), errorColor(\"ERROR\"), stackColor(stackCallerModule(3)))\n\tfmt.Println(v...)\n\tfmt.Print(\"\\r> \")\n}\n\n// prints the contents prefixed by a carriage return + blue info text and suffixed with a new line\nfunc ErrorlnClean(v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: \", timeColor(timeString()), errorColor(\"ERROR\"), stackColor(stackCallerModule(3)))\n\tfmt.Print(v...)\n\tfmt.Println(\"\\r\")\n}\n\n// prints the contents prefixed by a carriage return + blue info text\nfunc Error(v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: \", timeColor(timeString()), errorColor(\"ERROR\"), stackColor(stackCallerModule(3)))\n\tfmt.Print(v...)\n}\n\n// prints the contents prefixed by a carriage return + blue info text\nfunc Errorf(format string, v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: %s\", timeColor(timeString()), errorColor(\"ERROR\"), stackColor(stackCallerModule(3)), fmt.Sprintf(format, v...))\n}\n\n// prints the contents prefixed by a carriage return + blue info text and suffixed with a newline and \"> \"\nfunc Errorlnf(format string, v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: %s\\n\\r> \", timeColor(timeString()), errorColor(\"ERROR\"), stackColor(stackCallerModule(3)), fmt.Sprintf(format, v...))\n}\n\n// prints the contents prefixed by a carriage return + blue info text and suffixed with a newline and \"> \"\nfunc Warnln(v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: \", timeColor(timeString()), warningColor(\"WARN \"), stackColor(stackCallerModule(3)))\n\tfmt.Println(v...)\n\tfmt.Print(\"\\r> \")\n}\n\n// prints the contents prefixed by a carriage return + blue info text and suffixed with a new line\nfunc WarnlnClean(v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: \", timeColor(timeString()), warningColor(\"WARN \"), stackColor(stackCallerModule(3)))\n\tfmt.Print(v...)\n\tfmt.Println(\"\\r\")\n}\n\n// prints the contents prefixed by a carriage return + blue info text\nfunc Warn(v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: \", timeColor(timeString()), warningColor(\"WARN \"), stackColor(stackCallerModule(3)))\n\tfmt.Print(v...)\n}\n\n// prints the contents prefixed by a carriage return + blue info text\nfunc Warnf(format string, v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: %s\", timeColor(timeString()), warningColor(\"WARN \"), stackColor(stackCallerModule(3)), fmt.Sprintf(format, v...))\n}\n\n// prints the contents prefixed by a carriage return + blue info text and suffixed with a newline and \"> \"\nfunc Warnlnf(format string, v ...any) {\n\tfmt.Printf(\"\\r%s %s %s: %s\\n\\r> \", timeColor(timeString()), warningColor(\"WARN \"), stackColor(stackCallerModule(3)), fmt.Sprintf(format, v...))\n}\n"
  },
  {
    "path": "util/mapequal.go",
    "content": "package util\r\n\r\nfunc MapEqual(m1, m2 map[string]string) bool {\r\n\tif m1 == nil && m2 == nil {\r\n\t\treturn true\r\n\t}\r\n\tif len(m1) != len(m2) {\r\n\t\treturn false\r\n\t}\r\n\tfor key, value1 := range m1 {\r\n\t\tif m2[key] != value1 {\r\n\t\t\treturn false\r\n\t\t}\r\n\t}\r\n\r\n\treturn true\r\n}\r\n"
  },
  {
    "path": "util/rot.go",
    "content": "package util\r\n\r\nimport \"math\"\r\n\r\nfunc DegreesToAngle(degrees float32) byte {\r\n\treturn byte(math.Round(float64(degrees) * (256.0 / 360.0)))\r\n}\r\n\r\nfunc AngleToDegrees(angle byte) float32 {\r\n\treturn float32(angle) * (360.0 / 256.0)\r\n}\r\n\r\nconst (\r\n\tDirectionPX = \"east\"\r\n\tDirectionPZ = \"south\"\r\n\tDirectionNX = \"west\"\r\n\tDirectionNZ = \"north\"\r\n)\r\n\r\nfunc YawDirection(yaw float32) string {\r\n\tnormalizedYaw := NormalizeYaw(yaw)\r\n\tif normalizedYaw >= 315.0 || normalizedYaw < 45.0 {\r\n\t\treturn DirectionPZ // North\r\n\t} else if normalizedYaw >= 45.0 && normalizedYaw < 135.0 {\r\n\t\treturn DirectionPX // East\r\n\t} else if normalizedYaw >= 135.0 && normalizedYaw < 225.0 {\r\n\t\treturn DirectionNZ // South\r\n\t} else if normalizedYaw >= 225.0 && normalizedYaw < 315.0 {\r\n\t\treturn DirectionNX // West\r\n\t}\r\n\r\n\treturn \"\"\r\n}\r\n\r\nfunc NormalizeYaw(yaw float32) float32 {\r\n\tyaw = EuclideanRemainder(yaw, 360)\r\n\tif yaw > 180 {\r\n\t\tyaw -= 360\r\n\t}\r\n\r\n\treturn yaw\r\n}\r\n\r\nfunc EuclideanRemainder(a, b float32) float32 {\r\n\tremainder := float32(math.Mod(float64(a), float64(b)))\r\n\tif remainder < 0 {\r\n\t\tremainder += b\r\n\t}\r\n\treturn remainder\r\n}\r\n"
  },
  {
    "path": "util/unit.go",
    "content": "package util\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"strconv\"\r\n\t\"strings\"\r\n)\r\n\r\nvar sizeUnits = map[string]uint64{\r\n\t\"kb\":  1000,                      // kilobyte (decimal)\r\n\t\"kib\": 1024,                      // kibibyte (binary)\r\n\t\"mb\":  1000 * 1000,               // megabyte (decimal)\r\n\t\"mib\": 1024 * 1024,               // mebibyte (binary)\r\n\t\"gb\":  1000 * 1000 * 1000,        // gigabyte (decimal)\r\n\t\"gib\": 1024 * 1024 * 1024,        // gibibyte (binary)\r\n\t\"tb\":  1000 * 1000 * 1000 * 1000, // terabyte (decimal)\r\n\t\"tib\": 1024 * 1024 * 1024 * 1024, // tebibyte (binary)\r\n}\r\n\r\n// ParseSizeUnit parses a size string into a number of bytes.\r\nfunc ParseSizeUnit(sizeStr string) (uint64, error) {\r\n\t// Trim any surrounding whitespace and convert to lowercase.\r\n\tsizeStr = strings.TrimSpace(strings.ToLower(sizeStr))\r\n\r\n\t// Find the position where the letters start.\r\n\tfor unit := range sizeUnits {\r\n\t\tif strings.HasSuffix(sizeStr, unit) {\r\n\t\t\t// Extract the numeric part of the string.\r\n\t\t\tnumberStr := strings.TrimSuffix(sizeStr, unit)\r\n\t\t\tnumber, err := strconv.ParseUint(numberStr, 10, 64)\r\n\t\t\tif err != nil {\r\n\t\t\t\treturn 0, fmt.Errorf(\"invalid number format: %w\", err)\r\n\t\t\t}\r\n\r\n\t\t\t// Convert the number to bytes using the corresponding unit.\r\n\t\t\treturn number * sizeUnits[unit], nil\r\n\t\t}\r\n\t}\r\n\r\n\tnumber, err := strconv.ParseUint(sizeStr, 10, 64)\r\n\treturn number, err\r\n}\r\n\r\nvar sizeUnitsS = []struct {\r\n\tUnit   string\r\n\tFactor uint64\r\n}{\r\n\t{\"B\", 1},\r\n\t{\"KiB\", 1024},\r\n\t{\"MiB\", 1024 * 1024},\r\n\t{\"GiB\", 1024 * 1024 * 1024},\r\n\t{\"TiB\", 1024 * 1024 * 1024 * 1024},\r\n\t{\"PiB\", 1024 * 1024 * 1024 * 1024 * 1024},\r\n}\r\n\r\n// FormatSizeUnit formats a number of bytes into a human-readable string.\r\nfunc FormatSizeUnit(bytes uint64) string {\r\n\tif bytes == 0 {\r\n\t\treturn \"0 B\"\r\n\t}\r\n\r\n\tvar result strings.Builder\r\n\tfor i := len(sizeUnitsS) - 1; i >= 0; i-- {\r\n\t\tunit := sizeUnitsS[i]\r\n\t\tif bytes >= unit.Factor {\r\n\t\t\tvalue := float64(bytes) / float64(unit.Factor)\r\n\t\t\tresult.WriteString(fmt.Sprintf(\"%.2f %s\", value, unit.Unit))\r\n\t\t\treturn result.String()\r\n\t\t}\r\n\t}\r\n\r\n\t// This should never be reached since we handle all sizes\r\n\treturn \"0 B\"\r\n}\r\n"
  }
]