[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report with detailed information for faster fixes\ntitle: \"[Bug]\"\nlabels: Bug\nassignees: ''\n\n---\n\n<!-- I suggest to use //report next time to get a link to a prefilled issue template! -->\n<!-- Please make sure you have properly installed the plugin. If you run the plugin from source, do verify you got DEVirion, the proper virions and their correct versions installed! -->\n### Description\n<!-- DESCRIPTION OF YOUR ISSUE -->\n<!-- Please provide steps to reproduce the bug, for example which commands you have run -->\n\n---\n<!-- Please insert the data of //version here -->\n| MagicWE2 | Information |\n| --- | --- |\n| Version | INSERT PLUGIN VERSION HERE |\n| Plugin API Version | INSERT PLUGIN API HERE (optional) |\n| PMMP Protocol Version | SEE /VERSION |\n| PMMP Version | SEE /VERSION |\n| PMMP API Version | SEE /VERSION |\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea or request a feature for this project\ntitle: \"[FR]\"\nlabels: Feature Request\nassignees: thebigsmileXD\n\n---\n\n<!-- Please use english. If you can not describe what you want (due to limited english knowledge for example), you may also add a link to a similar feature in another plugin or even WorldEdit -->\n**Describe the feature you want here**\n\n**Suggestions**\nSuggest changes here\n\n**Related issues and pull requests**\nPlease tag related issues and pull request here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/todo-list.md",
    "content": "---\nname: TODO list\nabout: Template for the maintainers for things under TODO\ntitle: \"[TODO]\"\nlabels: TODO\nassignees: ''\n\n---\n\n**Description:**\n\n---\nTODO list:\n- [ ]\n- [ ]\n- [ ]\n- [ ]\n- [ ]\n- [ ]\n- [ ]\n"
  },
  {
    "path": ".github/workflows/main.yml",
    "content": "name: PHPStan\n\non: [push, pull_request]\n\njobs:\n  phpstan:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v2\n      with:\n        ref: ${{ github.ref }}\n    - name: Create Vendor Directory\n      run: |\n        echo Making directory...\n        mkdir vendor\n        echo Directory made.\n    - name: Download virions to vendor\n      run: |\n        php -f resources/parsepoggit.php > virion_urls.txt\n        cat virion_urls.txt\n        wget -P vendor --content-disposition -i virion_urls.txt\n        rm virion_urls.txt\n    - name: Run PHPStan\n      uses: larryTheCoder/pmmp-phpstan-action@master\n      with:\n        phpstan-config: phpstan.neon.dist\n"
  },
  {
    "path": ".gitignore",
    "content": ".idea/*"
  },
  {
    "path": ".poggit.yml",
    "content": "--- # Poggit-CI Manifest. Open the CI at https://poggit.pmmp.io/ci/thebigsmileXD/MagicWE2\nprojects:\n  MagicWE2:\n    path: \"\"\n    icon: \"resources/magicwe_icon_square_small.png\"\n    excludeFiles:\n      - \"resources/magicwe_icon_square.png\"\n      - \"resources/magicwe_icon_square_small.png\"\n      - \"resources/magicwe_icon_wide.png\"\n    lint:\n      phpstan: false\n    libs:\n      - src: BlockHorizons/libschematic/libschematic\n        version: ^2.0.0\n      - src: thebigsmilexd/customui/customui\n        version: ^4.0.0\n        branch: PM4\n      - src: thebigsmilexd/apibossbar/apibossbar\n        version: ^0.1.3\n        branch: PM4\n      - src: CortexPE/Commando/Commando\n        version: ^3.0.0\n        branch: PM4\n      - src: muqsit/invmenu/InvMenu\n        version: ^4.0.1\n        branch: \"4.0\"\n      - src: thebigsmilexd/libstructure/libstructure\n        version: ^0.1.1\n        branch: mcstructure\n      - src: buchwasa/ScoreFactory/ScoreFactory\n        version: ^3.0.1\n        branch: pm4\n...\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    {one line to give the program's name and a brief idea of what it does.}\n    Copyright (C) {year}  {name of author}\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    {project}  Copyright (C) {year}  {fullname}\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.md",
    "content": "![MagicWE2's awesome wide banner!](https://github.com/thebigsmileXD/MagicWE2/blob/master/resources/magicwe_icon_wide.png)\n---\n# MagicWE2\nLag free asynchronous world editor for [PMMP](https://github.com/pmmp/PocketMine-MP)\n\nTry the new MagicWE, now way more powerful, with more support, more commands, new tools and more!\n\n[![Poggit-CI](https://poggit.pmmp.io/ci.badge/thebigsmileXD/MagicWE2/MagicWE2/master)](https://poggit.pmmp.io/ci/thebigsmileXD/MagicWE2)\n[![](https://poggit.pmmp.io/shield.state/MagicWE2)](https://poggit.pmmp.io/p/MagicWE2)\n[![](https://poggit.pmmp.io/shield.api/MagicWE2)](https://poggit.pmmp.io/p/MagicWE2)\n![PHPStan](https://github.com/thebigsmileXD/MagicWE2/workflows/PHPStan/badge.svg)\n## Why MagicWE2?\n_Rainbow sprinkles!_\n\nJokes aside, here is a list of pros:\n\n- Simple usage\n- Translations\n- Good performance and great speeds\n- Progress bars like on Windows 98!\n- Sessions\n- Clipboards\n- Optimized item / block parsing - you can place any block, by id, name, and item!\n- Alot more commands\n- Command auto-completion\n- Command flags (i.e. -p for relative copying/pasting, -h for hollow objects)\n- UI for brush setup and configuration\n- Fancy icon and optional startup ASCII art\n- Direct bug reporting to GitHub\n<!-- \n- schematic support\n- MyPlot support\n-->\n\n## Commands\n| Command | Alias | Description | Usage |\n| --- | --- | --- | --- |\n| `//pos1` | `//1` | `Select first position` | `//pos1` |\n| `//pos2` | `//2` | `Select second position` | `//pos2` |\n| `//set` | `//fill` | `Fill an area with the specified blocks` | `//set <blocks:string> [flags:text]` |\n| `//replace` | | `Replace blocks in an area with other blocks` | `//replace <findblocks:string> <replaceblocks:string> [flags:text]` |\n| `//copy` | | `Copy an area into a clipboard` | `//copy [flags:text]` |\n| `//paste` |  | `Paste your clipboard` | `//paste [flags:text]` |\n| `//wand` |  | `Gives you the selection wand` | `//wand` |\n| `//togglewand` |  | `Toggle the wand tool on/off` | `//togglewand` |\n| `//undo` |  | `Rolls back the last action` | `//undo` |\n| `//redo` |  | `Applies the last undo action again` | `//redo` |\n| `//debug` |  | `Gives you the debug stick, which gives information about the clicked block` | `//debug` |\n| `//toggledebug` |  | `Toggle the debug stick on/off` | `//toggledebug` |\n| `//cylinder` | `//cyl` | `Create a cylinder` | `//cylinder <blocks:string> <diameter:int> [height:int] [flags:text]` |\n| `//count` | `//analyze` | `Count blocks in selection` | `//count [blocks:string] [flags:text]` |\n| `//help` | `//?,//mwe,//wehelp` | `MagicWE help command` | `//help [command:string]` |\n| `//version` | `//ver` | `MagicWE version` | `//version` |\n| `//info` |  | `Information about MagicWE` | `//info` |\n| `//report` | `//bug,//github` | `Report a bug to GitHub` | `//report [title:text]` |\n| `//donate` | `//support,//paypal` | `Donate to support development of MagicWE!` | `//donate` |\n| `//brush` |  | `Opens the brush tool menu` | `//brush` |\n| `//flood` |  | `Opens the flood tool menu` | `//flood` |\n\n## Planned features\n- Saved sessions (saved brushes and clipboards)\n- More commands, a glimpse at the plugin.yml should give you a good look what is coming up\n- Command based flags, since they are currently in a global state\n- Schematic and structure block data support\n- Clipboard naming, exporting and switching\n- ScoreboardAPI integration\n- Better and more brushes. For now i suggest using [BlockSniper](https://github.com/BlockHorizons/BlockSniper) for brushes!\n- [MyPlot](https://github.com/jasonwynn10/MyPlot) integration\n\n## Fast updates\nYou have an urgent issue, your server is crashing or players mess with the world and start griefing?\n\nConsider using //report to create a pre-filled GitHub issue!\n\nFeel free to open issues, feature requests and criticism are welcome!\n\nIf you have an urgent issue, tag me on Twitter for faster response time: [@xenialdan](https://twitter.com/xenialdan)\n\n## Quotes\n- _\"MagicWE2 has a new fresh coating over the plugin, with rainbow colored sprinkle topping!\"_ ~ XenialDan, 2017\n\n### Foot notes\nLicense: GNU GENERAL PUBLIC LICENSE\n\nReadme last updated: 4th August 2019"
  },
  {
    "path": "TODO.md",
    "content": "TODO and bug list\n- [x] Redo does not apply changes\n- [ ] Setbiome does not send the changes, but //biomeinfo returns that it was set\n- [x] Count returns no messages\n- [x] Wand left click does not work without breaking blocks\n- [x] Brush command needs rework\n- [x] Undo seems to execute the action offset by 1\n- [x] Shape does not refresh after pos1 and pos2 were set once\n- [x] Cylinder is 1 block too tall\n- [ ] Boss bar title does not always reset //appears to work now\n- [ ] Action with 0 blocks gets stuck (ErrorException: \"Division by zero\" (EXCEPTION) in \"plugins/MagicWE2.phar/src/xenialdan/MagicWE2/task/AsyncFillTask\" at line 119)\n- [ ] The flag  is unknown //should be fixed by now\n- [x] \"Created new session\" string contains { and }\n- [ ] Session destructs upon re-login instead upon logout\n- [ ] Undo \"steals\" blocks that were changed manually later - todo test if fixed\n- [x] Rewrite CopyClipboard\n- [ ] Undo is incredibly slow - probably getAABB()\n- [ ] If an async task crashes, the user gets no feedback, and the boss bar gets stuck"
  },
  {
    "path": "phpstan.neon.dist",
    "content": "parameters:\n    level: 7\n\n    checkMissingIterableValueType: false\n\n    ignoreErrors: []\n\n    paths:\n        - /source/src\n    bootstrapFiles:\n        - phar:///pocketmine/PocketMine-MP.phar/vendor/autoload.php\n    scanDirectories:\n        - /source/src\n        - phar:///source/vendor/customui.phar/src\n        - phar:///source/vendor/apibossbar.phar/src\n        - phar:///source/vendor/Commando.phar/src\n        - phar:///source/vendor/libschematic.phar/src\n        - phar:///source/vendor/InvMenu.phar/src\n        - phar:///source/vendor/libstructure.phar/src\n        - phar:///source/vendor/ScoreFactory.phar/src\n    excludes_analyse:\n        - source/vendor"
  },
  {
    "path": "plugin.yml",
    "content": "---\nname: MagicWE2\nmain: xenialdan\\MagicWE2\\Loader\nversion: 10.1.2\napi: [\"4.0.0\"]\nphp: \"7.4\"\nauthors:\n  - XenialDan\ndescription: Lag free asynchronous world editor for PMMP with plenty of options\nprefix: 'MWE2'\nwebsite: https://github.com/thebigsmileXD/MagicWE2\npermissions:\n  we.session:\n    default: op\n  we.donator:\n    default: false\n  we.command:\n    default: op\n  we.command.donate:\n    default: true\n  we.command.language:\n    default: op\n  we.command.help:\n    default: op\n  we.command.info:\n    default: true\n  we.command.limit:\n    default: op\n  we.command.report:\n    default: op\n  we.command.setrange:\n    default: op\n  we.command.version:\n    default: op\n  we.command.biome:\n    default: op\n  we.command.biome.info:\n    default: op\n  we.command.biome.list:\n    default: op\n  we.command.biome.set:\n    default: op\n  we.command.brush:\n    default: op\n  we.command.brush.name:\n    default: op\n  we.command.clipboard:\n    default: op\n  we.command.clipboard.clear:\n    default: op\n  we.command.clipboard.copy:\n    default: op\n  we.command.clipboard.cut:\n    default: op\n  we.command.clipboard.flip:\n    default: op\n  we.command.clipboard.paste:\n    default: op\n  we.command.clipboard.rotate:\n    default: op\n  we.command.generation:\n    default: op\n  we.command.generation.cyl:\n    default: op\n  we.command.history:\n    default: op\n  we.command.history.clear:\n    default: op\n  we.command.history.redo:\n    default: op\n  we.command.history.undo:\n    default: op\n  we.command.region:\n    default: op\n  we.command.region.overlay:\n    default: op\n  we.command.region.replace:\n    default: op\n  we.command.region.set:\n    default: op\n  we.command.selection:\n    default: op\n  we.command.selection.chunk:\n    default: op\n  we.command.selection.hpos:\n    default: op\n  we.command.selection.pos:\n    default: op\n  we.command.selection.info:\n    default: op\n  we.command.selection.info.count:\n    default: op\n  we.command.selection.info.listchunks:\n    default: op\n  we.command.selection.info.size:\n    default: op\n  we.command.tool:\n    default: op\n  we.command.tool.debug:\n    default: op\n  we.command.tool.floodfill:\n    default: op\n  we.command.tool.toggledebug:\n    default: op\n  we.command.tool.togglewand:\n    default: op\n  we.command.tool.wand:\n    default: op\n  we.command.utility:\n    default: op\n  we.command.utility.calculate:\n    default: op\n  we.command.utility.togglewaila:\n    default: op\n  we.command.test:\n    default: op\n...\n"
  },
  {
    "path": "resources/ContentLog__Wednesday__2020_February_19__00_27_24_1.txt",
    "content": "00:32:58[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"oak\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:32:59[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"spruce\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:00[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"birch\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:01[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"jungle\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:01[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"oak\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:02[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"spruce\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:03[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"birch\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:04[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"jungle\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:04[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"oak\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:05[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"spruce\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:06[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"birch\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:07[Scripting][inform]-{\"0\":\"{\\\"old_log_type\\\":\\\"jungle\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:07[Scripting][inform]-{\"0\":\"{\\\"pillar_axis\\\":\\\"y\\\",\\\"stripped_bit\\\":false,\\\"wood_type\\\":\\\"oak\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:08[Scripting][inform]-{\"0\":\"{\\\"pillar_axis\\\":\\\"y\\\",\\\"stripped_bit\\\":false,\\\"wood_type\\\":\\\"spruce\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:09[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0,\\\"triggered_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:10[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1,\\\"triggered_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:10[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:33:11[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:33:12[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:33:13[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:33:13[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0,\\\"triggered_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:14[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1,\\\"triggered_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:15[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:33:16[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:33:16[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":2,\\\"triggered_bit\\\":true}\",\"180\":\"{\\\"facing_direction\\\":5,\\\"triggered_bit\\\":true}\",\"270\":\"{\\\"facing_direction\\\":3,\\\"triggered_bit\\\":true}\",\"x\":\"{\\\"triggered_bit\\\":true}\",\"z\":\"{\\\"facing_direction\\\":5,\\\"triggered_bit\\\":true}\",\"xz\":\"{\\\"facing_direction\\\":5,\\\"triggered_bit\\\":true}\"}\r\n\r\r\n00:33:17[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":3,\\\"triggered_bit\\\":true}\",\"180\":\"{\\\"facing_direction\\\":4,\\\"triggered_bit\\\":true}\",\"270\":\"{\\\"facing_direction\\\":2,\\\"triggered_bit\\\":true}\",\"x\":\"{\\\"triggered_bit\\\":true}\",\"z\":\"{\\\"facing_direction\\\":4,\\\"triggered_bit\\\":true}\",\"xz\":\"{\\\"facing_direction\\\":4,\\\"triggered_bit\\\":true}\"}\r\n\r\r\n00:33:18[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":0}\",\"90\":\"{\\\"rail_direction\\\":1}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":1}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:19[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":1}\",\"90\":\"{\\\"rail_direction\\\":0}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":0}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:19[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":2}\",\"90\":\"{\\\"rail_direction\\\":5}\",\"180\":\"{\\\"rail_direction\\\":3}\",\"270\":\"{\\\"rail_direction\\\":4}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":3}\",\"xz\":\"{\\\"rail_direction\\\":3}\"}\r\n\r\r\n00:33:20[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":3}\",\"90\":\"{\\\"rail_direction\\\":4}\",\"180\":\"{\\\"rail_direction\\\":2}\",\"270\":\"{\\\"rail_direction\\\":5}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":2}\",\"xz\":\"{\\\"rail_direction\\\":2}\"}\r\n\r\r\n00:33:21[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":4}\",\"90\":\"{\\\"rail_direction\\\":2}\",\"180\":\"{\\\"rail_direction\\\":5}\",\"270\":\"{\\\"rail_direction\\\":3}\",\"x\":\"{\\\"rail_direction\\\":5}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":5}\"}\r\n\r\r\n00:33:22[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":5}\",\"90\":\"{\\\"rail_direction\\\":3}\",\"180\":\"{\\\"rail_direction\\\":4}\",\"270\":\"{\\\"rail_direction\\\":2}\",\"x\":\"{\\\"rail_direction\\\":4}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":4}\"}\r\n\r\r\n00:33:22[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":0}\",\"90\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":1}\",\"180\":\"{\\\"rail_data_bit\\\":true}\",\"270\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":1}\",\"x\":\"{\\\"rail_data_bit\\\":true}\",\"z\":\"{\\\"rail_data_bit\\\":true}\",\"xz\":\"{\\\"rail_data_bit\\\":true}\"}\r\n\r\r\n00:33:23[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":1}\",\"90\":\"{\\\"rail_direction\\\":0}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":0}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:24[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":2}\",\"90\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":5}\",\"180\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":3}\",\"270\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":4}\",\"x\":\"{\\\"rail_data_bit\\\":true}\",\"z\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":3}\",\"xz\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":3}\"}\r\n\r\r\n00:33:25[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":3}\",\"90\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":4}\",\"180\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":2}\",\"270\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":5}\",\"x\":\"{\\\"rail_data_bit\\\":true}\",\"z\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":2}\",\"xz\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":2}\"}\r\n\r\r\n00:33:25[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":4}\",\"90\":\"{\\\"rail_direction\\\":2}\",\"180\":\"{\\\"rail_direction\\\":5}\",\"270\":\"{\\\"rail_direction\\\":3}\",\"x\":\"{\\\"rail_direction\\\":5}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":5}\"}\r\n\r\r\n00:33:26[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":5}\",\"90\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":3}\",\"180\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":4}\",\"270\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":2}\",\"x\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":4}\",\"z\":\"{\\\"rail_data_bit\\\":true}\",\"xz\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":4}\"}\r\n\r\r\n00:33:27[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":0}\",\"90\":\"{\\\"rail_direction\\\":1}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":1}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:28[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":1}\",\"90\":\"{\\\"rail_direction\\\":0}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":0}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:28[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":2}\",\"90\":\"{\\\"rail_direction\\\":5}\",\"180\":\"{\\\"rail_direction\\\":3}\",\"270\":\"{\\\"rail_direction\\\":4}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":3}\",\"xz\":\"{\\\"rail_direction\\\":3}\"}\r\n\r\r\n00:33:29[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":3}\",\"90\":\"{\\\"rail_direction\\\":4}\",\"180\":\"{\\\"rail_direction\\\":2}\",\"270\":\"{\\\"rail_direction\\\":5}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":2}\",\"xz\":\"{\\\"rail_direction\\\":2}\"}\r\n\r\r\n00:33:30[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":4}\",\"90\":\"{\\\"rail_direction\\\":2}\",\"180\":\"{\\\"rail_direction\\\":5}\",\"270\":\"{\\\"rail_direction\\\":3}\",\"x\":\"{\\\"rail_direction\\\":5}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":5}\"}\r\n\r\r\n00:33:31[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":5}\",\"90\":\"{\\\"rail_direction\\\":3}\",\"180\":\"{\\\"rail_direction\\\":4}\",\"270\":\"{\\\"rail_direction\\\":2}\",\"x\":\"{\\\"rail_direction\\\":4}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":4}\"}\r\n\r\r\n00:33:31[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":0}\",\"90\":\"{\\\"rail_direction\\\":1}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":1}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:32[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":1}\",\"90\":\"{\\\"rail_direction\\\":0}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":0}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:33[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":2}\",\"90\":\"{\\\"rail_direction\\\":5}\",\"180\":\"{\\\"rail_direction\\\":3}\",\"270\":\"{\\\"rail_direction\\\":4}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":3}\",\"xz\":\"{\\\"rail_direction\\\":3}\"}\r\n\r\r\n00:33:34[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":3}\",\"90\":\"{\\\"rail_direction\\\":4}\",\"180\":\"{\\\"rail_direction\\\":2}\",\"270\":\"{\\\"rail_direction\\\":5}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":2}\",\"xz\":\"{\\\"rail_direction\\\":2}\"}\r\n\r\r\n00:33:34[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":4}\",\"90\":\"{\\\"rail_direction\\\":2}\",\"180\":\"{\\\"rail_direction\\\":5}\",\"270\":\"{\\\"rail_direction\\\":3}\",\"x\":\"{\\\"rail_direction\\\":5}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":5}\"}\r\n\r\r\n00:33:35[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":5}\",\"90\":\"{\\\"rail_direction\\\":3}\",\"180\":\"{\\\"rail_direction\\\":4}\",\"270\":\"{\\\"rail_direction\\\":2}\",\"x\":\"{\\\"rail_direction\\\":4}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":4}\"}\r\n\r\r\n00:33:36[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:37[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:37[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:33:38[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:33:39[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:33:40[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:33:40[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:41[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:42[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:33:43[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:33:43[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:33:44[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:33:45[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\"}\r\n\r\r\n00:33:46[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\"}\r\n\r\r\n00:33:46[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\"}\r\n\r\r\n00:33:47[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"x\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"z\":\"{}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\"}\r\n\r\r\n00:33:48[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"x\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"z\":\"{}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\"}\r\n\r\r\n00:33:49[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"top\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:33:49[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:33:50[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:33:51[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:33:52[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:33:52[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:33:53[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:33:54[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:33:55[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:33:55[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:33:56[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:33:57[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:33:58[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:33:58[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:33:59[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:34:00[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:34:01[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:34:01[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:34:02[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:34:03[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:34:04[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:34:04[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:34:05[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:34:06[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:34:07[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:34:07[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:34:08[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:34:09[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":0}\",\"90\":\"{\\\"ground_sign_direction\\\":4}\",\"180\":\"{\\\"ground_sign_direction\\\":8}\",\"270\":\"{\\\"ground_sign_direction\\\":12}\",\"x\":\"{\\\"ground_sign_direction\\\":8}\",\"z\":\"{}\",\"xz\":\"{\\\"ground_sign_direction\\\":8}\"}\r\n\r\r\n00:34:10[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":1}\",\"90\":\"{\\\"ground_sign_direction\\\":5}\",\"180\":\"{\\\"ground_sign_direction\\\":9}\",\"270\":\"{\\\"ground_sign_direction\\\":13}\",\"x\":\"{\\\"ground_sign_direction\\\":7}\",\"z\":\"{\\\"ground_sign_direction\\\":15}\",\"xz\":\"{\\\"ground_sign_direction\\\":9}\"}\r\n\r\r\n00:34:10[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":2}\",\"90\":\"{\\\"ground_sign_direction\\\":6}\",\"180\":\"{\\\"ground_sign_direction\\\":10}\",\"270\":\"{\\\"ground_sign_direction\\\":14}\",\"x\":\"{\\\"ground_sign_direction\\\":6}\",\"z\":\"{\\\"ground_sign_direction\\\":14}\",\"xz\":\"{\\\"ground_sign_direction\\\":10}\"}\r\n\r\r\n00:34:11[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":3}\",\"90\":\"{\\\"ground_sign_direction\\\":7}\",\"180\":\"{\\\"ground_sign_direction\\\":11}\",\"270\":\"{\\\"ground_sign_direction\\\":15}\",\"x\":\"{\\\"ground_sign_direction\\\":5}\",\"z\":\"{\\\"ground_sign_direction\\\":13}\",\"xz\":\"{\\\"ground_sign_direction\\\":11}\"}\r\n\r\r\n00:34:12[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":4}\",\"90\":\"{\\\"ground_sign_direction\\\":8}\",\"180\":\"{\\\"ground_sign_direction\\\":12}\",\"270\":\"{\\\"ground_sign_direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"ground_sign_direction\\\":12}\",\"xz\":\"{\\\"ground_sign_direction\\\":12}\"}\r\n\r\r\n00:34:13[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":5}\",\"90\":\"{\\\"ground_sign_direction\\\":9}\",\"180\":\"{\\\"ground_sign_direction\\\":13}\",\"270\":\"{\\\"ground_sign_direction\\\":1}\",\"x\":\"{\\\"ground_sign_direction\\\":3}\",\"z\":\"{\\\"ground_sign_direction\\\":11}\",\"xz\":\"{\\\"ground_sign_direction\\\":13}\"}\r\n\r\r\n00:34:13[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":6}\",\"90\":\"{\\\"ground_sign_direction\\\":10}\",\"180\":\"{\\\"ground_sign_direction\\\":14}\",\"270\":\"{\\\"ground_sign_direction\\\":2}\",\"x\":\"{\\\"ground_sign_direction\\\":2}\",\"z\":\"{\\\"ground_sign_direction\\\":10}\",\"xz\":\"{\\\"ground_sign_direction\\\":14}\"}\r\n\r\r\n00:34:14[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":7}\",\"90\":\"{\\\"ground_sign_direction\\\":11}\",\"180\":\"{\\\"ground_sign_direction\\\":15}\",\"270\":\"{\\\"ground_sign_direction\\\":3}\",\"x\":\"{\\\"ground_sign_direction\\\":1}\",\"z\":\"{\\\"ground_sign_direction\\\":9}\",\"xz\":\"{\\\"ground_sign_direction\\\":15}\"}\r\n\r\r\n00:34:15[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":8}\",\"90\":\"{\\\"ground_sign_direction\\\":12}\",\"180\":\"{\\\"ground_sign_direction\\\":0}\",\"270\":\"{\\\"ground_sign_direction\\\":4}\",\"x\":\"{\\\"ground_sign_direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"ground_sign_direction\\\":0}\"}\r\n\r\r\n00:34:16[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":9}\",\"90\":\"{\\\"ground_sign_direction\\\":13}\",\"180\":\"{\\\"ground_sign_direction\\\":1}\",\"270\":\"{\\\"ground_sign_direction\\\":5}\",\"x\":\"{\\\"ground_sign_direction\\\":15}\",\"z\":\"{\\\"ground_sign_direction\\\":7}\",\"xz\":\"{\\\"ground_sign_direction\\\":1}\"}\r\n\r\r\n00:34:16[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":10}\",\"90\":\"{\\\"ground_sign_direction\\\":14}\",\"180\":\"{\\\"ground_sign_direction\\\":2}\",\"270\":\"{\\\"ground_sign_direction\\\":6}\",\"x\":\"{\\\"ground_sign_direction\\\":14}\",\"z\":\"{\\\"ground_sign_direction\\\":6}\",\"xz\":\"{\\\"ground_sign_direction\\\":2}\"}\r\n\r\r\n00:34:17[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":11}\",\"90\":\"{\\\"ground_sign_direction\\\":15}\",\"180\":\"{\\\"ground_sign_direction\\\":3}\",\"270\":\"{\\\"ground_sign_direction\\\":7}\",\"x\":\"{\\\"ground_sign_direction\\\":13}\",\"z\":\"{\\\"ground_sign_direction\\\":5}\",\"xz\":\"{\\\"ground_sign_direction\\\":3}\"}\r\n\r\r\n00:34:18[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":12}\",\"90\":\"{\\\"ground_sign_direction\\\":0}\",\"180\":\"{\\\"ground_sign_direction\\\":4}\",\"270\":\"{\\\"ground_sign_direction\\\":8}\",\"x\":\"{}\",\"z\":\"{\\\"ground_sign_direction\\\":4}\",\"xz\":\"{\\\"ground_sign_direction\\\":4}\"}\r\n\r\r\n00:34:19[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":13}\",\"90\":\"{\\\"ground_sign_direction\\\":1}\",\"180\":\"{\\\"ground_sign_direction\\\":5}\",\"270\":\"{\\\"ground_sign_direction\\\":9}\",\"x\":\"{\\\"ground_sign_direction\\\":11}\",\"z\":\"{\\\"ground_sign_direction\\\":3}\",\"xz\":\"{\\\"ground_sign_direction\\\":5}\"}\r\n\r\r\n00:34:19[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":14}\",\"90\":\"{\\\"ground_sign_direction\\\":2}\",\"180\":\"{\\\"ground_sign_direction\\\":6}\",\"270\":\"{\\\"ground_sign_direction\\\":10}\",\"x\":\"{\\\"ground_sign_direction\\\":10}\",\"z\":\"{\\\"ground_sign_direction\\\":2}\",\"xz\":\"{\\\"ground_sign_direction\\\":6}\"}\r\n\r\r\n00:34:20[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":15}\",\"90\":\"{\\\"ground_sign_direction\\\":3}\",\"180\":\"{\\\"ground_sign_direction\\\":7}\",\"270\":\"{\\\"ground_sign_direction\\\":11}\",\"x\":\"{\\\"ground_sign_direction\\\":9}\",\"z\":\"{\\\"ground_sign_direction\\\":1}\",\"xz\":\"{\\\"ground_sign_direction\\\":7}\"}\r\n\r\r\n00:34:21[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:34:22[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:34:22[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:34:23[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:34:24[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:34:25[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:34:25[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:34:26[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:34:27[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:34:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:34:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:34:29[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:34:30[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:34:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:34:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:34:32[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:34:33[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:34:34[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:34:34[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:34:35[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:34:36[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:34:37[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:34:37[Scripting][inform]-{\"0\":\"{\\\"rail_direction\\\":0}\",\"90\":\"{\\\"rail_direction\\\":1}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":1}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:34:38[Scripting][inform]-{\"0\":\"{\\\"rail_direction\\\":1}\",\"90\":\"{\\\"rail_direction\\\":0}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":0}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:34:39[Scripting][inform]-{\"0\":\"{\\\"rail_direction\\\":2}\",\"90\":\"{\\\"rail_direction\\\":5}\",\"180\":\"{\\\"rail_direction\\\":3}\",\"270\":\"{\\\"rail_direction\\\":4}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":3}\",\"xz\":\"{\\\"rail_direction\\\":3}\"}\r\n\r\r\n00:34:40[Scripting][inform]-{\"0\":\"{\\\"rail_direction\\\":3}\",\"90\":\"{\\\"rail_direction\\\":4}\",\"180\":\"{\\\"rail_direction\\\":2}\",\"270\":\"{\\\"rail_direction\\\":5}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":2}\",\"xz\":\"{\\\"rail_direction\\\":2}\"}\r\n\r\r\n00:34:40[Scripting][inform]-{\"0\":\"{\\\"rail_direction\\\":4}\",\"90\":\"{\\\"rail_direction\\\":2}\",\"180\":\"{\\\"rail_direction\\\":5}\",\"270\":\"{\\\"rail_direction\\\":3}\",\"x\":\"{\\\"rail_direction\\\":5}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":5}\"}\r\n\r\r\n00:34:41[Scripting][inform]-{\"0\":\"{\\\"rail_direction\\\":5}\",\"90\":\"{\\\"rail_direction\\\":3}\",\"180\":\"{\\\"rail_direction\\\":4}\",\"270\":\"{\\\"rail_direction\\\":2}\",\"x\":\"{\\\"rail_direction\\\":4}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":4}\"}\r\n\r\r\n00:34:42[Scripting][inform]-{\"0\":\"{\\\"rail_direction\\\":6}\",\"90\":\"{\\\"rail_direction\\\":7}\",\"180\":\"{\\\"rail_direction\\\":8}\",\"270\":\"{\\\"rail_direction\\\":9}\",\"x\":\"{\\\"rail_direction\\\":9}\",\"z\":\"{\\\"rail_direction\\\":7}\",\"xz\":\"{\\\"rail_direction\\\":8}\"}\r\n\r\r\n00:34:43[Scripting][inform]-{\"0\":\"{\\\"rail_direction\\\":7}\",\"90\":\"{\\\"rail_direction\\\":8}\",\"180\":\"{\\\"rail_direction\\\":9}\",\"270\":\"{\\\"rail_direction\\\":6}\",\"x\":\"{\\\"rail_direction\\\":8}\",\"z\":\"{\\\"rail_direction\\\":6}\",\"xz\":\"{\\\"rail_direction\\\":9}\"}\r\n\r\r\n00:34:43[Scripting][inform]-{\"0\":\"{\\\"rail_direction\\\":8}\",\"90\":\"{\\\"rail_direction\\\":9}\",\"180\":\"{\\\"rail_direction\\\":6}\",\"270\":\"{\\\"rail_direction\\\":7}\",\"x\":\"{\\\"rail_direction\\\":7}\",\"z\":\"{\\\"rail_direction\\\":9}\",\"xz\":\"{\\\"rail_direction\\\":6}\"}\r\n\r\r\n00:34:44[Scripting][inform]-{\"0\":\"{\\\"rail_direction\\\":9}\",\"90\":\"{\\\"rail_direction\\\":6}\",\"180\":\"{\\\"rail_direction\\\":7}\",\"270\":\"{\\\"rail_direction\\\":8}\",\"x\":\"{\\\"rail_direction\\\":6}\",\"z\":\"{\\\"rail_direction\\\":8}\",\"xz\":\"{\\\"rail_direction\\\":7}\"}\r\n\r\r\n00:34:45[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:34:46[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:34:46[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:34:47[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:34:48[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:34:49[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:34:49[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:34:50[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:34:51[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:34:52[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:34:52[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:34:53[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:34:54[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:34:55[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:34:55[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"down_east_west\\\",\\\"open_bit\\\":false}\",\"90\":\"{\\\"lever_direction\\\":\\\"down_north_south\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"lever_direction\\\":\\\"down_north_south\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:34:56[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"east\\\",\\\"open_bit\\\":false}\",\"90\":\"{\\\"lever_direction\\\":\\\"south\\\"}\",\"180\":\"{\\\"lever_direction\\\":\\\"west\\\"}\",\"270\":\"{\\\"lever_direction\\\":\\\"north\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"lever_direction\\\":\\\"west\\\"}\",\"xz\":\"{\\\"lever_direction\\\":\\\"west\\\"}\"}\r\n\r\r\n00:34:57[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"west\\\",\\\"open_bit\\\":false}\",\"90\":\"{\\\"lever_direction\\\":\\\"north\\\"}\",\"180\":\"{\\\"lever_direction\\\":\\\"east\\\"}\",\"270\":\"{\\\"lever_direction\\\":\\\"south\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"lever_direction\\\":\\\"east\\\"}\",\"xz\":\"{\\\"lever_direction\\\":\\\"east\\\"}\"}\r\n\r\r\n00:34:58[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"south\\\",\\\"open_bit\\\":false}\",\"90\":\"{\\\"lever_direction\\\":\\\"west\\\"}\",\"180\":\"{\\\"lever_direction\\\":\\\"north\\\"}\",\"270\":\"{\\\"lever_direction\\\":\\\"east\\\"}\",\"x\":\"{\\\"lever_direction\\\":\\\"north\\\"}\",\"z\":\"{}\",\"xz\":\"{\\\"lever_direction\\\":\\\"north\\\"}\"}\r\n\r\r\n00:34:58[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"north\\\",\\\"open_bit\\\":false}\",\"90\":\"{\\\"lever_direction\\\":\\\"east\\\"}\",\"180\":\"{\\\"lever_direction\\\":\\\"south\\\"}\",\"270\":\"{\\\"lever_direction\\\":\\\"west\\\"}\",\"x\":\"{\\\"lever_direction\\\":\\\"south\\\"}\",\"z\":\"{}\",\"xz\":\"{\\\"lever_direction\\\":\\\"south\\\"}\"}\r\n\r\r\n00:34:59[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"up_north_south\\\",\\\"open_bit\\\":false}\",\"90\":\"{\\\"lever_direction\\\":\\\"up_east_west\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"lever_direction\\\":\\\"up_east_west\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:00[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"up_east_west\\\",\\\"open_bit\\\":false}\",\"90\":\"{\\\"lever_direction\\\":\\\"up_north_south\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"lever_direction\\\":\\\"up_north_south\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:01[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"down_north_south\\\",\\\"open_bit\\\":false}\",\"90\":\"{\\\"lever_direction\\\":\\\"down_east_west\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"lever_direction\\\":\\\"down_east_west\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:01[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"down_east_west\\\",\\\"open_bit\\\":true}\",\"90\":\"{\\\"lever_direction\\\":\\\"down_north_south\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"lever_direction\\\":\\\"down_north_south\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:02[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"east\\\",\\\"open_bit\\\":true}\",\"90\":\"{\\\"lever_direction\\\":\\\"south\\\"}\",\"180\":\"{\\\"lever_direction\\\":\\\"west\\\"}\",\"270\":\"{\\\"lever_direction\\\":\\\"north\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"lever_direction\\\":\\\"west\\\"}\",\"xz\":\"{\\\"lever_direction\\\":\\\"west\\\"}\"}\r\n\r\r\n00:35:03[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"west\\\",\\\"open_bit\\\":true}\",\"90\":\"{\\\"lever_direction\\\":\\\"north\\\"}\",\"180\":\"{\\\"lever_direction\\\":\\\"east\\\"}\",\"270\":\"{\\\"lever_direction\\\":\\\"south\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"lever_direction\\\":\\\"east\\\"}\",\"xz\":\"{\\\"lever_direction\\\":\\\"east\\\"}\"}\r\n\r\r\n00:35:04[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"south\\\",\\\"open_bit\\\":true}\",\"90\":\"{\\\"lever_direction\\\":\\\"west\\\"}\",\"180\":\"{\\\"lever_direction\\\":\\\"north\\\"}\",\"270\":\"{\\\"lever_direction\\\":\\\"east\\\"}\",\"x\":\"{\\\"lever_direction\\\":\\\"north\\\"}\",\"z\":\"{}\",\"xz\":\"{\\\"lever_direction\\\":\\\"north\\\"}\"}\r\n\r\r\n00:35:04[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"north\\\",\\\"open_bit\\\":true}\",\"90\":\"{\\\"lever_direction\\\":\\\"east\\\"}\",\"180\":\"{\\\"lever_direction\\\":\\\"south\\\"}\",\"270\":\"{\\\"lever_direction\\\":\\\"west\\\"}\",\"x\":\"{\\\"lever_direction\\\":\\\"south\\\"}\",\"z\":\"{}\",\"xz\":\"{\\\"lever_direction\\\":\\\"south\\\"}\"}\r\n\r\r\n00:35:05[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"up_north_south\\\",\\\"open_bit\\\":true}\",\"90\":\"{\\\"lever_direction\\\":\\\"up_east_west\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"lever_direction\\\":\\\"up_east_west\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:06[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"up_east_west\\\",\\\"open_bit\\\":true}\",\"90\":\"{\\\"lever_direction\\\":\\\"up_north_south\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"lever_direction\\\":\\\"up_north_south\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:07[Scripting][inform]-{\"0\":\"{\\\"lever_direction\\\":\\\"down_north_south\\\",\\\"open_bit\\\":true}\",\"90\":\"{\\\"lever_direction\\\":\\\"down_east_west\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"lever_direction\\\":\\\"down_east_west\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:07[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:35:08[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:35:09[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:35:10[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:35:10[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:35:11[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:35:12[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:35:13[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:35:13[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:35:14[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:35:15[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:35:16[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:35:16[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:35:17[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:35:18[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:35:19[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:35:19[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"unknown\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:20[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\"}\r\n\r\r\n00:35:21[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\"}\r\n\r\r\n00:35:22[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"x\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"z\":\"{}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\"}\r\n\r\r\n00:35:22[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"x\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"z\":\"{}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\"}\r\n\r\r\n00:35:23[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"top\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:24[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"unknown\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:25[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\"}\r\n\r\r\n00:35:25[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"x\":\"{}\",\"z\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\"}\r\n\r\r\n00:35:26[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"x\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"z\":\"{}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\"}\r\n\r\r\n00:35:27[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"south\\\"}\",\"90\":\"{\\\"torch_facing_direction\\\":\\\"west\\\"}\",\"180\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"270\":\"{\\\"torch_facing_direction\\\":\\\"east\\\"}\",\"x\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\",\"z\":\"{}\",\"xz\":\"{\\\"torch_facing_direction\\\":\\\"north\\\"}\"}\r\n\r\r\n00:35:28[Scripting][inform]-{\"0\":\"{\\\"torch_facing_direction\\\":\\\"top\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:28[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:29[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:30[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:35:31[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:35:31[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:35:32[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:35:33[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:34[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:34[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:35:35[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:35:36[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:35:37[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:35:37[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:35:38[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:35:39[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:35:40[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:35:40[Scripting][inform]-{\"0\":\"{\\\"portal_axis\\\":\\\"unknown\\\"}\",\"90\":\"{\\\"portal_axis\\\":\\\"x\\\"}\",\"180\":\"{\\\"portal_axis\\\":\\\"z\\\"}\",\"270\":\"{\\\"portal_axis\\\":\\\"x\\\"}\",\"x\":\"{\\\"portal_axis\\\":\\\"z\\\"}\",\"z\":\"{\\\"portal_axis\\\":\\\"z\\\"}\",\"xz\":\"{\\\"portal_axis\\\":\\\"z\\\"}\"}\r\n\r\r\n00:35:41[Scripting][inform]-{\"0\":\"{\\\"portal_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"portal_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"portal_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:42[Scripting][inform]-{\"0\":\"{\\\"portal_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"portal_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"portal_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:43[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:35:43[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:35:44[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:35:45[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:35:46[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"repeater_delay\\\":0}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:35:46[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"repeater_delay\\\":0}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:35:47[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"repeater_delay\\\":0}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:48[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"repeater_delay\\\":0}\",\"90\":\"{}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:35:49[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"repeater_delay\\\":1}\",\"90\":\"{}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:35:49[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"repeater_delay\\\":1}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:35:50[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"repeater_delay\\\":1}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:35:51[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"repeater_delay\\\":1}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:52[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"repeater_delay\\\":2}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:52[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"repeater_delay\\\":2}\",\"90\":\"{}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:35:53[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"repeater_delay\\\":2}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:35:54[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"repeater_delay\\\":2}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:35:55[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"repeater_delay\\\":3}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:35:55[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"repeater_delay\\\":3}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:35:56[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"repeater_delay\\\":3}\",\"90\":\"{}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:35:57[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"repeater_delay\\\":3}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:35:58[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"repeater_delay\\\":0}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:35:58[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"repeater_delay\\\":0}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:35:59[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"repeater_delay\\\":0}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:00[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"repeater_delay\\\":0}\",\"90\":\"{}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:36:01[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"repeater_delay\\\":1}\",\"90\":\"{}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:36:01[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"repeater_delay\\\":1}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:36:02[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"repeater_delay\\\":1}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:36:03[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"repeater_delay\\\":1}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:04[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"repeater_delay\\\":2}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:04[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"repeater_delay\\\":2}\",\"90\":\"{}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:36:05[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"repeater_delay\\\":2}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:36:06[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"repeater_delay\\\":2}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:36:07[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"repeater_delay\\\":3}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:36:07[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"repeater_delay\\\":3}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:08[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"repeater_delay\\\":3}\",\"90\":\"{}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:36:09[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"repeater_delay\\\":3}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:36:10[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:36:10[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:36:11[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:36:12[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:36:13[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:36:13[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:36:14[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:36:15[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:36:16[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:36:16[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:36:17[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:36:18[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:36:19[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:36:19[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:36:20[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:36:21[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:36:22[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:22[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:23[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":2}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:24[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":3}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:25[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":4}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:25[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":5}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:26[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":6}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:27[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":7}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:28[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":8}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:28[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":9}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:29[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":10}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:30[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":11}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:31[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":12}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:31[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":13}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:32[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":14}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:33[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":15}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:34[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:34[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:35[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":2}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:36[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":3}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:37[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":4}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:37[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":5}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:38[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":6}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:39[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":7}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:40[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":8}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:40[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":9}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:41[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":10}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:42[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":11}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:43[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":12}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:43[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":13}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:44[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":14}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:45[Scripting][inform]-{\"0\":\"{\\\"huge_mushroom_bits\\\":15}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:46[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:46[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:47[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":2}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:48[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":3}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:49[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":4}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:49[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":5}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:50[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":6}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:51[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":7}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:52[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":8}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:52[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":9}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:53[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":10}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:54[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":11}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:55[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":12}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:55[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":13}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:56[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":14}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:57[Scripting][inform]-{\"0\":\"{\\\"vine_direction_bits\\\":15}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:36:58[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:36:58[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:36:59[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:37:00[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:37:01[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:37:01[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:37:02[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:37:03[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:37:04[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:37:04[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:37:05[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:37:06[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:37:07[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:37:07[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:37:08[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:37:09[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:37:10[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:37:10[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:37:11[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:37:12[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:37:13[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:37:13[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:37:14[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:37:15[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:37:16[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:37:16[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:37:17[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:37:18[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:37:19[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:37:19[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:37:20[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:37:21[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:37:22[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:37:22[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:37:23[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:37:24[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:37:25[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:37:25[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:37:26[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:37:27[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:37:28[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"end_portal_eye_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:37:29[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"end_portal_eye_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:37:30[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"end_portal_eye_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:37:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"end_portal_eye_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:37:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"end_portal_eye_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:37:32[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"end_portal_eye_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:37:33[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"end_portal_eye_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:37:34[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"end_portal_eye_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:37:34[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0,\\\"triggered_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:35[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1,\\\"triggered_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:36[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:37:37[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:37:37[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:37:38[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:37:39[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"triggered_bit\\\":true}\",\"180\":\"{\\\"triggered_bit\\\":true}\",\"270\":\"{\\\"triggered_bit\\\":true}\",\"x\":\"{\\\"triggered_bit\\\":true}\",\"z\":\"{\\\"triggered_bit\\\":true}\",\"xz\":\"{\\\"triggered_bit\\\":true}\"}\r\n\r\r\n00:37:40[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"triggered_bit\\\":true}\",\"180\":\"{\\\"triggered_bit\\\":true}\",\"270\":\"{\\\"triggered_bit\\\":true}\",\"x\":\"{\\\"triggered_bit\\\":true}\",\"z\":\"{\\\"triggered_bit\\\":true}\",\"xz\":\"{\\\"triggered_bit\\\":true}\"}\r\n\r\r\n00:37:40[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":5,\\\"triggered_bit\\\":true}\",\"180\":\"{\\\"facing_direction\\\":3,\\\"triggered_bit\\\":true}\",\"270\":\"{\\\"facing_direction\\\":4,\\\"triggered_bit\\\":true}\",\"x\":\"{\\\"facing_direction\\\":3,\\\"triggered_bit\\\":true}\",\"z\":\"{\\\"triggered_bit\\\":true}\",\"xz\":\"{\\\"facing_direction\\\":3,\\\"triggered_bit\\\":true}\"}\r\n\r\r\n00:37:41[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":4,\\\"triggered_bit\\\":true}\",\"180\":\"{\\\"facing_direction\\\":2,\\\"triggered_bit\\\":true}\",\"270\":\"{\\\"facing_direction\\\":5,\\\"triggered_bit\\\":true}\",\"x\":\"{\\\"facing_direction\\\":2,\\\"triggered_bit\\\":true}\",\"z\":\"{\\\"triggered_bit\\\":true}\",\"xz\":\"{\\\"facing_direction\\\":2,\\\"triggered_bit\\\":true}\"}\r\n\r\r\n00:37:42[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:37:43[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"triggered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:37:43[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":0}\",\"90\":\"{\\\"rail_direction\\\":1}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":1}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:44[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":1}\",\"90\":\"{\\\"rail_direction\\\":0}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":0}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:45[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":2}\",\"90\":\"{\\\"rail_direction\\\":5}\",\"180\":\"{\\\"rail_direction\\\":3}\",\"270\":\"{\\\"rail_direction\\\":4}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":3}\",\"xz\":\"{\\\"rail_direction\\\":3}\"}\r\n\r\r\n00:37:46[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":3}\",\"90\":\"{\\\"rail_direction\\\":4}\",\"180\":\"{\\\"rail_direction\\\":2}\",\"270\":\"{\\\"rail_direction\\\":5}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":2}\",\"xz\":\"{\\\"rail_direction\\\":2}\"}\r\n\r\r\n00:37:46[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":4}\",\"90\":\"{\\\"rail_direction\\\":2}\",\"180\":\"{\\\"rail_direction\\\":5}\",\"270\":\"{\\\"rail_direction\\\":3}\",\"x\":\"{\\\"rail_direction\\\":5}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":5}\"}\r\n\r\r\n00:37:47[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":5}\",\"90\":\"{\\\"rail_direction\\\":3}\",\"180\":\"{\\\"rail_direction\\\":4}\",\"270\":\"{\\\"rail_direction\\\":2}\",\"x\":\"{\\\"rail_direction\\\":4}\",\"z\":\"{}\",\"xz\":\"{\\\"rail_direction\\\":4}\"}\r\n\r\r\n00:37:48[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":0}\",\"90\":\"{\\\"rail_direction\\\":1}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":1}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:49[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":1}\",\"90\":\"{\\\"rail_direction\\\":0}\",\"180\":\"{}\",\"270\":\"{\\\"rail_direction\\\":0}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:49[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":2}\",\"90\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":5}\",\"180\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":3}\",\"270\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":4}\",\"x\":\"{\\\"rail_data_bit\\\":true}\",\"z\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":3}\",\"xz\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":3}\"}\r\n\r\r\n00:37:50[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":3}\",\"90\":\"{\\\"rail_direction\\\":4}\",\"180\":\"{\\\"rail_direction\\\":2}\",\"270\":\"{\\\"rail_direction\\\":5}\",\"x\":\"{}\",\"z\":\"{\\\"rail_direction\\\":2}\",\"xz\":\"{\\\"rail_direction\\\":2}\"}\r\n\r\r\n00:37:51[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":4}\",\"90\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":2}\",\"180\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":5}\",\"270\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":3}\",\"x\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":5}\",\"z\":\"{\\\"rail_data_bit\\\":true}\",\"xz\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":5}\"}\r\n\r\r\n00:37:52[Scripting][inform]-{\"0\":\"{\\\"rail_data_bit\\\":false,\\\"rail_direction\\\":5}\",\"90\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":3}\",\"180\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":4}\",\"270\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":2}\",\"x\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":4}\",\"z\":\"{\\\"rail_data_bit\\\":true}\",\"xz\":\"{\\\"rail_data_bit\\\":true,\\\"rail_direction\\\":4}\"}\r\n\r\r\n00:37:52[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:53[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:54[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:55[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:55[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:56[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:57[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:58[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:58[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:37:59[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:38:00[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:38:01[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:38:01[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:38:02[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:38:03[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:38:04[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:38:04[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:38:05[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:38:06[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:38:07[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:38:07[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:38:08[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:38:09[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:38:10[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:38:10[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:38:11[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:38:12[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":0,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:38:13[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":1,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:38:13[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":2,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:38:14[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":3,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:38:15[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":0,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:38:16[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":1,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:38:16[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":2,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:38:17[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":3,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:38:18[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":0,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:38:19[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":1,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:38:19[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":2,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:38:20[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":3,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:38:21[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":0,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:38:22[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":1,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:38:22[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":2,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:38:23[Scripting][inform]-{\"0\":\"{\\\"attached_bit\\\":false,\\\"direction\\\":3,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:38:24[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:38:25[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:38:25[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:38:26[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:38:27[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:38:28[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:38:28[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:38:29[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:38:30[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:38:31[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:38:31[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:38:32[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:38:33[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:38:34[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:38:34[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:38:35[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:38:36[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:38:37[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:38:37[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:38:38[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:38:39[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:38:40[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:38:40[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:38:41[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:38:42[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:38:43[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:38:43[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:38:44[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:38:45[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:38:46[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:38:46[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":0}\",\"90\":\"{\\\"conditional_bit\\\":false}\",\"180\":\"{\\\"conditional_bit\\\":false}\",\"270\":\"{\\\"conditional_bit\\\":false}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false}\"}\r\n\r\r\n00:38:47[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":1}\",\"90\":\"{\\\"conditional_bit\\\":false}\",\"180\":\"{\\\"conditional_bit\\\":false}\",\"270\":\"{\\\"conditional_bit\\\":false}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false}\"}\r\n\r\r\n00:38:48[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":2}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"x\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:38:49[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":3}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"x\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:38:49[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":4}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:38:50[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":5}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:38:51[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:38:52[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:38:52[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:38:53[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:38:54[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:38:55[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":false,\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:38:55[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:38:56[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:38:57[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:38:58[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:38:58[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:38:59[Scripting][inform]-{\"0\":\"{\\\"button_pressed_bit\\\":true,\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:39:00[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0,\\\"no_drop_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:39:01[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1,\\\"no_drop_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:39:01[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"no_drop_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:39:02[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"no_drop_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:39:03[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"no_drop_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:39:04[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"no_drop_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:39:04[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0,\\\"no_drop_bit\\\":true}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:39:05[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1,\\\"no_drop_bit\\\":true}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:39:06[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"no_drop_bit\\\":true}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:39:07[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"no_drop_bit\\\":true}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:39:07[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"no_drop_bit\\\":true}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:39:08[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"no_drop_bit\\\":true}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:39:09[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"undamaged\\\",\\\"direction\\\":0}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:10[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"undamaged\\\",\\\"direction\\\":1}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:10[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"undamaged\\\",\\\"direction\\\":2}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:11[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"undamaged\\\",\\\"direction\\\":3}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:12[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"slightly_damaged\\\",\\\"direction\\\":0}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:13[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"slightly_damaged\\\",\\\"direction\\\":1}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:13[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"slightly_damaged\\\",\\\"direction\\\":2}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:14[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"slightly_damaged\\\",\\\"direction\\\":3}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:15[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"very_damaged\\\",\\\"direction\\\":0}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:16[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"very_damaged\\\",\\\"direction\\\":1}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:16[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"very_damaged\\\",\\\"direction\\\":2}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:17[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"very_damaged\\\",\\\"direction\\\":3}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:18[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"broken\\\",\\\"direction\\\":0}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:19[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"broken\\\",\\\"direction\\\":1}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:19[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"broken\\\",\\\"direction\\\":2}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:20[Scripting][inform]-{\"0\":\"{\\\"damage\\\":\\\"broken\\\",\\\"direction\\\":3}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:21[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:39:22[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:39:22[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:39:23[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:39:24[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:39:25[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:39:25[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:26[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:27[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:29[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:30[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:32[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:33[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:34[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:34[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:35[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:36[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:37[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:37[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:38[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:39[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:40[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:40[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:41[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:42[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:43[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"output_lit_bit\\\":false,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:43[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:44[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:45[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:46[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:46[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:39:47[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:39:48[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:39:49[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"output_lit_bit\\\":true,\\\"output_subtract_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:39:49[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0,\\\"toggle_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:39:50[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1,\\\"toggle_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:39:51[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"toggle_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:39:52[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"toggle_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:39:52[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"toggle_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:39:53[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"toggle_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:39:54[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0,\\\"toggle_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:39:55[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1,\\\"toggle_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:39:55[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"toggle_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":5,\\\"toggle_bit\\\":true}\",\"180\":\"{\\\"facing_direction\\\":3,\\\"toggle_bit\\\":true}\",\"270\":\"{\\\"facing_direction\\\":4,\\\"toggle_bit\\\":true}\",\"x\":\"{\\\"facing_direction\\\":3,\\\"toggle_bit\\\":true}\",\"z\":\"{\\\"toggle_bit\\\":true}\",\"xz\":\"{\\\"facing_direction\\\":3,\\\"toggle_bit\\\":true}\"}\r\n\r\r\n00:39:56[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"toggle_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":4,\\\"toggle_bit\\\":true}\",\"180\":\"{\\\"facing_direction\\\":2,\\\"toggle_bit\\\":true}\",\"270\":\"{\\\"facing_direction\\\":5,\\\"toggle_bit\\\":true}\",\"x\":\"{\\\"facing_direction\\\":2,\\\"toggle_bit\\\":true}\",\"z\":\"{\\\"toggle_bit\\\":true}\",\"xz\":\"{\\\"facing_direction\\\":2,\\\"toggle_bit\\\":true}\"}\r\n\r\r\n00:39:57[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"toggle_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:39:58[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"toggle_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:39:58[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"default\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:39:59[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"chiseled\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:00[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"lines\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:01[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"smooth\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:01[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"default\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:02[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"chiseled\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:03[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"lines\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:04[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"smooth\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:04[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"default\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:05[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"chiseled\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:06[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"lines\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:07[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"smooth\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:07[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:40:08[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:40:09[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:40:10[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:40:10[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:40:11[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:40:12[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:40:13[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:40:13[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:40:14[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:40:15[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:40:16[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:40:16[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:40:17[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:40:18[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:40:19[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:40:19[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:40:20[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:40:21[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:40:22[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:40:22[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:40:23[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:40:24[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:40:25[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:40:25[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:40:26[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:40:27[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:40:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:40:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:40:29[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:40:30[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:40:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"open_bit\\\":false,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:40:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:40:32[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:40:33[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:40:34[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:40:34[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:40:35[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:40:36[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:40:37[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"open_bit\\\":true,\\\"upside_down_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:40:37[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":0,\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:38[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":1,\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:39[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":2,\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:40[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":3,\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:40[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":0,\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:41[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":1,\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:42[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":2,\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:43[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":3,\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:43[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":0,\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:44[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":1,\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:45[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":2,\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:46[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":3,\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:46[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":0}\",\"90\":\"{\\\"ground_sign_direction\\\":4}\",\"180\":\"{\\\"ground_sign_direction\\\":8}\",\"270\":\"{\\\"ground_sign_direction\\\":12}\",\"x\":\"{\\\"ground_sign_direction\\\":8}\",\"z\":\"{}\",\"xz\":\"{\\\"ground_sign_direction\\\":8}\"}\r\n\r\r\n00:40:47[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":1}\",\"90\":\"{\\\"ground_sign_direction\\\":5}\",\"180\":\"{\\\"ground_sign_direction\\\":9}\",\"270\":\"{\\\"ground_sign_direction\\\":13}\",\"x\":\"{\\\"ground_sign_direction\\\":7}\",\"z\":\"{\\\"ground_sign_direction\\\":15}\",\"xz\":\"{\\\"ground_sign_direction\\\":9}\"}\r\n\r\r\n00:40:48[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":2}\",\"90\":\"{\\\"ground_sign_direction\\\":6}\",\"180\":\"{\\\"ground_sign_direction\\\":10}\",\"270\":\"{\\\"ground_sign_direction\\\":14}\",\"x\":\"{\\\"ground_sign_direction\\\":6}\",\"z\":\"{\\\"ground_sign_direction\\\":14}\",\"xz\":\"{\\\"ground_sign_direction\\\":10}\"}\r\n\r\r\n00:40:49[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":3}\",\"90\":\"{\\\"ground_sign_direction\\\":7}\",\"180\":\"{\\\"ground_sign_direction\\\":11}\",\"270\":\"{\\\"ground_sign_direction\\\":15}\",\"x\":\"{\\\"ground_sign_direction\\\":5}\",\"z\":\"{\\\"ground_sign_direction\\\":13}\",\"xz\":\"{\\\"ground_sign_direction\\\":11}\"}\r\n\r\r\n00:40:49[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":4}\",\"90\":\"{\\\"ground_sign_direction\\\":8}\",\"180\":\"{\\\"ground_sign_direction\\\":12}\",\"270\":\"{\\\"ground_sign_direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"ground_sign_direction\\\":12}\",\"xz\":\"{\\\"ground_sign_direction\\\":12}\"}\r\n\r\r\n00:40:50[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":5}\",\"90\":\"{\\\"ground_sign_direction\\\":9}\",\"180\":\"{\\\"ground_sign_direction\\\":13}\",\"270\":\"{\\\"ground_sign_direction\\\":1}\",\"x\":\"{\\\"ground_sign_direction\\\":3}\",\"z\":\"{\\\"ground_sign_direction\\\":11}\",\"xz\":\"{\\\"ground_sign_direction\\\":13}\"}\r\n\r\r\n00:40:51[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":6}\",\"90\":\"{\\\"ground_sign_direction\\\":10}\",\"180\":\"{\\\"ground_sign_direction\\\":14}\",\"270\":\"{\\\"ground_sign_direction\\\":2}\",\"x\":\"{\\\"ground_sign_direction\\\":2}\",\"z\":\"{\\\"ground_sign_direction\\\":10}\",\"xz\":\"{\\\"ground_sign_direction\\\":14}\"}\r\n\r\r\n00:40:52[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":7}\",\"90\":\"{\\\"ground_sign_direction\\\":11}\",\"180\":\"{\\\"ground_sign_direction\\\":15}\",\"270\":\"{\\\"ground_sign_direction\\\":3}\",\"x\":\"{\\\"ground_sign_direction\\\":1}\",\"z\":\"{\\\"ground_sign_direction\\\":9}\",\"xz\":\"{\\\"ground_sign_direction\\\":15}\"}\r\n\r\r\n00:40:52[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":8}\",\"90\":\"{\\\"ground_sign_direction\\\":12}\",\"180\":\"{\\\"ground_sign_direction\\\":0}\",\"270\":\"{\\\"ground_sign_direction\\\":4}\",\"x\":\"{\\\"ground_sign_direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"ground_sign_direction\\\":0}\"}\r\n\r\r\n00:40:53[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":9}\",\"90\":\"{\\\"ground_sign_direction\\\":13}\",\"180\":\"{\\\"ground_sign_direction\\\":1}\",\"270\":\"{\\\"ground_sign_direction\\\":5}\",\"x\":\"{\\\"ground_sign_direction\\\":15}\",\"z\":\"{\\\"ground_sign_direction\\\":7}\",\"xz\":\"{\\\"ground_sign_direction\\\":1}\"}\r\n\r\r\n00:40:54[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":10}\",\"90\":\"{\\\"ground_sign_direction\\\":14}\",\"180\":\"{\\\"ground_sign_direction\\\":2}\",\"270\":\"{\\\"ground_sign_direction\\\":6}\",\"x\":\"{\\\"ground_sign_direction\\\":14}\",\"z\":\"{\\\"ground_sign_direction\\\":6}\",\"xz\":\"{\\\"ground_sign_direction\\\":2}\"}\r\n\r\r\n00:40:55[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":11}\",\"90\":\"{\\\"ground_sign_direction\\\":15}\",\"180\":\"{\\\"ground_sign_direction\\\":3}\",\"270\":\"{\\\"ground_sign_direction\\\":7}\",\"x\":\"{\\\"ground_sign_direction\\\":13}\",\"z\":\"{\\\"ground_sign_direction\\\":5}\",\"xz\":\"{\\\"ground_sign_direction\\\":3}\"}\r\n\r\r\n00:40:55[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":12}\",\"90\":\"{\\\"ground_sign_direction\\\":0}\",\"180\":\"{\\\"ground_sign_direction\\\":4}\",\"270\":\"{\\\"ground_sign_direction\\\":8}\",\"x\":\"{}\",\"z\":\"{\\\"ground_sign_direction\\\":4}\",\"xz\":\"{\\\"ground_sign_direction\\\":4}\"}\r\n\r\r\n00:40:56[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":13}\",\"90\":\"{\\\"ground_sign_direction\\\":1}\",\"180\":\"{\\\"ground_sign_direction\\\":5}\",\"270\":\"{\\\"ground_sign_direction\\\":9}\",\"x\":\"{\\\"ground_sign_direction\\\":11}\",\"z\":\"{\\\"ground_sign_direction\\\":3}\",\"xz\":\"{\\\"ground_sign_direction\\\":5}\"}\r\n\r\r\n00:40:57[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":14}\",\"90\":\"{\\\"ground_sign_direction\\\":2}\",\"180\":\"{\\\"ground_sign_direction\\\":6}\",\"270\":\"{\\\"ground_sign_direction\\\":10}\",\"x\":\"{\\\"ground_sign_direction\\\":10}\",\"z\":\"{\\\"ground_sign_direction\\\":2}\",\"xz\":\"{\\\"ground_sign_direction\\\":6}\"}\r\n\r\r\n00:40:58[Scripting][inform]-{\"0\":\"{\\\"ground_sign_direction\\\":15}\",\"90\":\"{\\\"ground_sign_direction\\\":3}\",\"180\":\"{\\\"ground_sign_direction\\\":7}\",\"270\":\"{\\\"ground_sign_direction\\\":11}\",\"x\":\"{\\\"ground_sign_direction\\\":9}\",\"z\":\"{\\\"ground_sign_direction\\\":1}\",\"xz\":\"{\\\"ground_sign_direction\\\":7}\"}\r\n\r\r\n00:40:58[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:40:59[Scripting][inform]-{\"0\":\"null\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:41:00[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:41:01[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:41:01[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:41:02[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:41:03[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:41:04[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:41:04[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:41:05[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:41:06[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:41:07[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:41:07[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:41:08[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:41:09[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:10[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:10[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:11[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:12[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:13[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:13[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:14[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:15[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:16[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:16[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:17[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:18[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:19[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:19[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:20[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:21[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:22[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:22[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:23[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:24[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:25[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:25[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:26[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:27[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:29[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:30[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:32[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:33[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:34[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:34[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:35[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:36[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:37[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:37[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:38[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:39[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:40[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:40[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:41[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:42[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:43[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:43[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:44[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:45[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:46[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:46[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:47[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:48[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:49[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:49[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:50[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:51[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:52[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:52[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:53[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:54[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:55[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:55[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:56[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:41:57[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:41:58[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:41:58[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:41:59[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:00[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:01[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:01[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:02[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:03[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:04[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:04[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:05[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:06[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:07[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:07[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:08[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"in_wall_bit\\\":false,\\\"open_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:09[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:42:10[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:42:10[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:42:11[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:42:12[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:42:13[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:42:13[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":0}\",\"90\":\"{\\\"conditional_bit\\\":false}\",\"180\":\"{\\\"conditional_bit\\\":false}\",\"270\":\"{\\\"conditional_bit\\\":false}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false}\"}\r\n\r\r\n00:42:14[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":1}\",\"90\":\"{\\\"conditional_bit\\\":false}\",\"180\":\"{\\\"conditional_bit\\\":false}\",\"270\":\"{\\\"conditional_bit\\\":false}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false}\"}\r\n\r\r\n00:42:15[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":2}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"x\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:42:16[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":3}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"x\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:42:16[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":4}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:42:17[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":5}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:42:18[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:42:19[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:42:19[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:42:20[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:42:21[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:42:22[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:42:22[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":0}\",\"90\":\"{\\\"conditional_bit\\\":false}\",\"180\":\"{\\\"conditional_bit\\\":false}\",\"270\":\"{\\\"conditional_bit\\\":false}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false}\"}\r\n\r\r\n00:42:23[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":1}\",\"90\":\"{\\\"conditional_bit\\\":false}\",\"180\":\"{\\\"conditional_bit\\\":false}\",\"270\":\"{\\\"conditional_bit\\\":false}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false}\"}\r\n\r\r\n00:42:24[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":2}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"x\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:42:25[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":3}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"x\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"z\":\"{\\\"conditional_bit\\\":false}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:42:25[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":4}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:42:26[Scripting][inform]-{\"0\":\"{\\\"conditional_bit\\\":true,\\\"facing_direction\\\":5}\",\"90\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":3}\",\"180\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"270\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":2}\",\"x\":\"{\\\"conditional_bit\\\":false}\",\"z\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"conditional_bit\\\":false,\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:42:27[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:28[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:29[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:30[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:31[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:32[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:33[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:34[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:34[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:35[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:36[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:37[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:37[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:38[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:39[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:40[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:40[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:41[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:42[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:43[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:43[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:44[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:45[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:46[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:46[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:47[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:48[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:49[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:49[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:50[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:51[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:52[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:52[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:53[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:54[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:55[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:55[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:56[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:42:57[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:42:58[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:42:58[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:42:59[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:43:00[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:43:01[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:43:01[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:43:02[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:43:03[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:43:04[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:43:04[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:43:05[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:43:06[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:43:07[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:43:07[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:43:08[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:43:09[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:43:10[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:43:10[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:43:11[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:43:12[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:43:13[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:43:13[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:43:14[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:43:15[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:43:16[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:43:16[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:43:17[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:43:18[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:43:19[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:43:19[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:43:20[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":false}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:43:21[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:43:22[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:43:22[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:43:23[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":false,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:43:24[Scripting][inform]-{\"0\":\"{\\\"direction\\\":0,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":1}\",\"180\":\"{\\\"direction\\\":2}\",\"270\":\"{\\\"direction\\\":3}\",\"x\":\"{\\\"direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":2}\"}\r\n\r\r\n00:43:25[Scripting][inform]-{\"0\":\"{\\\"direction\\\":1,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":2}\",\"180\":\"{\\\"direction\\\":3}\",\"270\":\"{\\\"direction\\\":0}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":3}\",\"xz\":\"{\\\"direction\\\":3}\"}\r\n\r\r\n00:43:25[Scripting][inform]-{\"0\":\"{\\\"direction\\\":2,\\\"door_hinge_bit\\\":false,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":3}\",\"180\":\"{\\\"direction\\\":0}\",\"270\":\"{\\\"direction\\\":1}\",\"x\":\"{\\\"direction\\\":0}\",\"z\":\"{}\",\"xz\":\"{\\\"direction\\\":0}\"}\r\n\r\r\n00:43:26[Scripting][inform]-{\"0\":\"{\\\"direction\\\":3,\\\"door_hinge_bit\\\":true,\\\"open_bit\\\":true,\\\"upper_block_bit\\\":true}\",\"90\":\"{\\\"direction\\\":0}\",\"180\":\"{\\\"direction\\\":1}\",\"270\":\"{\\\"direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"direction\\\":1}\",\"xz\":\"{\\\"direction\\\":1}\"}\r\n\r\r\n00:43:27[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"item_frame_map_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:43:28[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"item_frame_map_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:43:28[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"item_frame_map_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:43:29[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"item_frame_map_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:43:30[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"item_frame_map_bit\\\":true}\",\"90\":\"{\\\"facing_direction\\\":3,\\\"item_frame_map_bit\\\":false}\",\"180\":\"{\\\"facing_direction\\\":4,\\\"item_frame_map_bit\\\":false}\",\"270\":\"{\\\"facing_direction\\\":2,\\\"item_frame_map_bit\\\":false}\",\"x\":\"{\\\"item_frame_map_bit\\\":false}\",\"z\":\"{\\\"facing_direction\\\":4,\\\"item_frame_map_bit\\\":false}\",\"xz\":\"{\\\"facing_direction\\\":4,\\\"item_frame_map_bit\\\":false}\"}\r\n\r\r\n00:43:31[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"item_frame_map_bit\\\":true}\",\"90\":\"{\\\"facing_direction\\\":2,\\\"item_frame_map_bit\\\":false}\",\"180\":\"{\\\"facing_direction\\\":5,\\\"item_frame_map_bit\\\":false}\",\"270\":\"{\\\"facing_direction\\\":3,\\\"item_frame_map_bit\\\":false}\",\"x\":\"{\\\"item_frame_map_bit\\\":false}\",\"z\":\"{\\\"facing_direction\\\":5,\\\"item_frame_map_bit\\\":false}\",\"xz\":\"{\\\"facing_direction\\\":5,\\\"item_frame_map_bit\\\":false}\"}\r\n\r\r\n00:43:31[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"item_frame_map_bit\\\":true}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:43:32[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"item_frame_map_bit\\\":true}\",\"90\":\"{\\\"facing_direction\\\":5,\\\"item_frame_map_bit\\\":false}\",\"180\":\"{\\\"facing_direction\\\":3,\\\"item_frame_map_bit\\\":false}\",\"270\":\"{\\\"facing_direction\\\":4,\\\"item_frame_map_bit\\\":false}\",\"x\":\"{\\\"facing_direction\\\":3,\\\"item_frame_map_bit\\\":false}\",\"z\":\"{\\\"item_frame_map_bit\\\":false}\",\"xz\":\"{\\\"facing_direction\\\":3,\\\"item_frame_map_bit\\\":false}\"}\r\n\r\r\n00:43:33[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"default\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:34[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"chiseled\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:34[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"lines\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:35[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"smooth\\\",\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:36[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"default\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:37[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"chiseled\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:37[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"lines\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:38[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"smooth\\\",\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:39[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"default\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:40[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"chiseled\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:40[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"lines\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:41[Scripting][inform]-{\"0\":\"{\\\"chisel_type\\\":\\\"smooth\\\",\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:42[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:43:43[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:43:43[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:43:44[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":false,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:43:45[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":0}\",\"90\":\"{\\\"weirdo_direction\\\":2}\",\"180\":\"{\\\"weirdo_direction\\\":1}\",\"270\":\"{\\\"weirdo_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":1}\",\"xz\":\"{\\\"weirdo_direction\\\":1}\"}\r\n\r\r\n00:43:46[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":1}\",\"90\":\"{\\\"weirdo_direction\\\":3}\",\"180\":\"{\\\"weirdo_direction\\\":0}\",\"270\":\"{\\\"weirdo_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"weirdo_direction\\\":0}\",\"xz\":\"{\\\"weirdo_direction\\\":0}\"}\r\n\r\r\n00:43:46[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":2}\",\"90\":\"{\\\"weirdo_direction\\\":1}\",\"180\":\"{\\\"weirdo_direction\\\":3}\",\"270\":\"{\\\"weirdo_direction\\\":0}\",\"x\":\"{\\\"weirdo_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":3}\"}\r\n\r\r\n00:43:47[Scripting][inform]-{\"0\":\"{\\\"upside_down_bit\\\":true,\\\"weirdo_direction\\\":3}\",\"90\":\"{\\\"weirdo_direction\\\":0}\",\"180\":\"{\\\"weirdo_direction\\\":2}\",\"270\":\"{\\\"weirdo_direction\\\":1}\",\"x\":\"{\\\"weirdo_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"weirdo_direction\\\":2}\"}\r\n\r\r\n00:43:48[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:49[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:49[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:43:50[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:43:51[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:43:52[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:43:52[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":0,\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:53[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":1,\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:54[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":2,\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:55[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":3,\\\"pillar_axis\\\":\\\"y\\\"}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:55[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":0,\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:56[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":1,\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:57[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":2,\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:58[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":3,\\\"pillar_axis\\\":\\\"x\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"z\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:58[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":0,\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:43:59[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":1,\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:00[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":2,\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:01[Scripting][inform]-{\"0\":\"{\\\"deprecated\\\":3,\\\"pillar_axis\\\":\\\"z\\\"}\",\"90\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"180\":\"{}\",\"270\":\"{\\\"pillar_axis\\\":\\\"x\\\"}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:01[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:02[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:03[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:04[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:04[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:05[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:06[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:07[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:07[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:08[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:09[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:10[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:10[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:11[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:12[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:13[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:13[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:14[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:15[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:16[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:16[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:17[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:18[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:19[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:19[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:20[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:21[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:22[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:22[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:23[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:24[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:25[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:25[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:26[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:27[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:28[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:28[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:29[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:30[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:31[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:31[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:32[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:33[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:34[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:34[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:35[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:36[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:37[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:37[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:38[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:39[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:40[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:40[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:41[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:42[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:43[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:43[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:44[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:45[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:46[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:46[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:47[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:48[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:49[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:49[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:50[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:51[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:52[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:52[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:53[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:54[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:55[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:44:55[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:56[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:44:57[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:44:58[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:44:58[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:44:59[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:45:00[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:45:01[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:45:01[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:45:02[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:45:03[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:45:04[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:45:04[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:45:05[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:45:06[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:45:07[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:45:07[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:45:08[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:45:09[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:45:10[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:45:10[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2}\",\"90\":\"{\\\"facing_direction\\\":5}\",\"180\":\"{\\\"facing_direction\\\":3}\",\"270\":\"{\\\"facing_direction\\\":4}\",\"x\":\"{\\\"facing_direction\\\":3}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":3}\"}\r\n\r\r\n00:45:11[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:45:12[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4}\",\"90\":\"{\\\"facing_direction\\\":2}\",\"180\":\"{\\\"facing_direction\\\":5}\",\"270\":\"{\\\"facing_direction\\\":3}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":5}\",\"xz\":\"{\\\"facing_direction\\\":5}\"}\r\n\r\r\n00:45:13[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:45:13[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"powered_bit\\\":true}\",\"180\":\"{\\\"powered_bit\\\":true}\",\"270\":\"{\\\"powered_bit\\\":true}\",\"x\":\"{\\\"powered_bit\\\":true}\",\"z\":\"{\\\"powered_bit\\\":true}\",\"xz\":\"{\\\"powered_bit\\\":true}\"}\r\n\r\r\n00:45:14[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1,\\\"powered_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:45:15[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":5,\\\"powered_bit\\\":true}\",\"180\":\"{\\\"facing_direction\\\":3,\\\"powered_bit\\\":true}\",\"270\":\"{\\\"facing_direction\\\":4,\\\"powered_bit\\\":true}\",\"x\":\"{\\\"facing_direction\\\":3,\\\"powered_bit\\\":true}\",\"z\":\"{\\\"powered_bit\\\":true}\",\"xz\":\"{\\\"facing_direction\\\":3,\\\"powered_bit\\\":true}\"}\r\n\r\r\n00:45:16[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:45:16[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":2,\\\"powered_bit\\\":true}\",\"180\":\"{\\\"facing_direction\\\":5,\\\"powered_bit\\\":true}\",\"270\":\"{\\\"facing_direction\\\":3,\\\"powered_bit\\\":true}\",\"x\":\"{\\\"powered_bit\\\":true}\",\"z\":\"{\\\"facing_direction\\\":5,\\\"powered_bit\\\":true}\",\"xz\":\"{\\\"facing_direction\\\":5,\\\"powered_bit\\\":true}\"}\r\n\r\r\n00:45:17[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":5,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":3}\",\"180\":\"{\\\"facing_direction\\\":4}\",\"270\":\"{\\\"facing_direction\\\":2}\",\"x\":\"{}\",\"z\":\"{\\\"facing_direction\\\":4}\",\"xz\":\"{\\\"facing_direction\\\":4}\"}\r\n\r\r\n00:45:18[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":0,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"powered_bit\\\":true}\",\"180\":\"{\\\"powered_bit\\\":true}\",\"270\":\"{\\\"powered_bit\\\":true}\",\"x\":\"{\\\"powered_bit\\\":true}\",\"z\":\"{\\\"powered_bit\\\":true}\",\"xz\":\"{\\\"powered_bit\\\":true}\"}\r\n\r\r\n00:45:19[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":1,\\\"powered_bit\\\":false}\",\"90\":\"{}\",\"180\":\"{}\",\"270\":\"{}\",\"x\":\"{}\",\"z\":\"{}\",\"xz\":\"{}\"}\r\n\r\r\n00:45:19[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":2,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":5,\\\"powered_bit\\\":true}\",\"180\":\"{\\\"facing_direction\\\":3,\\\"powered_bit\\\":true}\",\"270\":\"{\\\"facing_direction\\\":4,\\\"powered_bit\\\":true}\",\"x\":\"{\\\"facing_direction\\\":3,\\\"powered_bit\\\":true}\",\"z\":\"{\\\"powered_bit\\\":true}\",\"xz\":\"{\\\"facing_direction\\\":3,\\\"powered_bit\\\":true}\"}\r\n\r\r\n00:45:20[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":3,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":4}\",\"180\":\"{\\\"facing_direction\\\":2}\",\"270\":\"{\\\"facing_direction\\\":5}\",\"x\":\"{\\\"facing_direction\\\":2}\",\"z\":\"{}\",\"xz\":\"{\\\"facing_direction\\\":2}\"}\r\n\r\r\n00:45:21[Scripting][inform]-{\"0\":\"{\\\"facing_direction\\\":4,\\\"powered_bit\\\":false}\",\"90\":\"{\\\"facing_direction\\\":2,\\\"powered_bit\\\":true}\",\"180\":\"{\\\"facing_direction\\\":5,\\\"powered_bit\\\":true}\",\"270\":\"{\\\"facing_direction\\\":3,\\\"powered_bit\\\":true}\",\"x\":\"{\\\"powered_bit\\\":true}\",\"z\":\"{\\\"facing_direction\\\":5,\\\"powered_bit\\\":true}\",\"xz\":\"{\\\"facing_direction\\\":5,\\\"powered_bit\\\":true}\"}\r\n\r\r\n\r\r\n"
  },
  {
    "path": "resources/blockstate_alias_map.json",
    "content": "{\n  \"age\": {\n    \"alias\": [\n      \"age\"\n    ]\n  },\n  \"age_bit\": {\n    \"alias\": [\n      \"age\"\n    ]\n  },\n  \"allow_underwater_bit\": {\n    \"alias\": [\n      \"underwater\"\n    ]\n  },\n  \"attached_bit\": {\n    \"alias\": [\n      \"attached\"\n    ]\n  },\n  \"attachment\": {\n    \"alias\": [\n      \"attachment\"\n    ]\n  },\n  \"bamboo_leaf_size\": {\n    \"alias\": [\n      \"leaf_size\"\n    ]\n  },\n  \"bamboo_stalk_thickness\": {\n    \"alias\": [\n      \"stalk_thickness\",\n      \"thickness\"\n    ]\n  },\n  \"bite_counter\": {\n    \"alias\": [\n      \"bites\"\n    ]\n  },\n  \"block_light_level\": {\n    \"alias\": [\n      \"light\"\n    ]\n  },\n  \"brewing_stand_slot_a_bit\": {\n    \"alias\": [\n      \"slot_a\"\n    ]\n  },\n  \"brewing_stand_slot_b_bit\": {\n    \"alias\": [\n      \"slot_b\"\n    ]\n  },\n  \"brewing_stand_slot_c_bit\": {\n    \"alias\": [\n      \"slot_c\"\n    ]\n  },\n  \"button_pressed_bit\": {\n    \"alias\": [\n      \"pressed\"\n    ]\n  },\n  \"cauldron_liquid\": {\n    \"alias\": [\n      \"liquid\"\n    ]\n  },\n  \"chemistry_table_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"chisel_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"cluster_count\": {\n    \"alias\": [\n      \"count\"\n    ]\n  },\n  \"color\": {\n    \"alias\": [\n      \"color\"\n    ]\n  },\n  \"color_bit\": {\n    \"alias\": [\n      \"color\"\n    ]\n  },\n  \"composter_fill_level\": {\n    \"alias\": [\n      \"fill\"\n    ]\n  },\n  \"conditional_bit\": {\n    \"alias\": [\n      \"conditional\"\n    ]\n  },\n  \"coral_color\": {\n    \"alias\": [\n      \"color\"\n    ]\n  },\n  \"coral_direction\": {\n    \"alias\": [\n      \"direction\"\n    ]\n  },\n  \"coral_fan_direction\": {\n    \"alias\": [\n      \"direction\"\n    ]\n  },\n  \"coral_hang_type_bit\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"covered_bit\": {\n    \"alias\": [\n      \"covered\"\n    ]\n  },\n  \"cracked_state\": {\n    \"alias\": [\n      \"cracked\"\n    ]\n  },\n  \"damage\": {\n    \"alias\": [\n      \"damage\"\n    ]\n  },\n  \"dead_bit\": {\n    \"alias\": [\n      \"dead\"\n    ]\n  },\n  \"deprecated\": {\n    \"alias\": [\n      \"deprecated\"\n    ]\n  },\n  \"direction\": {\n    \"alias\": [\n      \"direction\"\n    ]\n  },\n  \"dirt_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"disarmed_bit\": {\n    \"alias\": [\n      \"disarmed\"\n    ]\n  },\n  \"door_hinge_bit\": {\n    \"alias\": [\n      \"hinge\"\n    ]\n  },\n  \"double_plant_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"drag_down\": {\n    \"alias\": [\n      \"drag_down\"\n    ]\n  },\n  \"end_portal_eye_bit\": {\n    \"alias\": [\n      \"eye\"\n    ]\n  },\n  \"explode_bit\": {\n    \"alias\": [\n      \"explode\"\n    ]\n  },\n  \"extinguished\": {\n    \"alias\": [\n      \"off\"\n    ]\n  },\n  \"facing_direction\": {\n    \"alias\": [\n      \"direction\",\n      \"facing\"\n    ]\n  },\n  \"fill_level\": {\n    \"alias\": [\n      \"fill\"\n    ]\n  },\n  \"flower_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"ground_sign_direction\": {\n    \"alias\": [\n      \"direction\"\n    ]\n  },\n  \"growth\": {\n    \"alias\": [\n      \"growth\"\n    ]\n  },\n  \"hanging\": {\n    \"alias\": [\n      \"hanging\"\n    ]\n  },\n  \"head_piece_bit\": {\n    \"alias\": [\n      \"head\"\n    ]\n  },\n  \"height\": {\n    \"alias\": [\n      \"height\"\n    ]\n  },\n  \"huge_mushroom_bits\": {\n    \"alias\": [\n      \"huge\"\n    ]\n  },\n  \"in_wall_bit\": {\n    \"alias\": [\n      \"in_wall\"\n    ]\n  },\n  \"infiniburn_bit\": {\n    \"alias\": [\n      \"burn\"\n    ]\n  },\n  \"item_frame_map_bit\": {\n    \"alias\": [\n      \"map\"\n    ]\n  },\n  \"kelp_age\": {\n    \"alias\": [\n      \"age\"\n    ]\n  },\n  \"lever_direction\": {\n    \"alias\": [\n      \"direction\"\n    ]\n  },\n  \"liquid_depth\": {\n    \"alias\": [\n      \"depth\"\n    ]\n  },\n  \"moisturized_amount\": {\n    \"alias\": [\n      \"moisturized\",\n      \"wetness\"\n    ]\n  },\n  \"monster_egg_stone_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"new_leaf_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"new_log_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"no_drop_bit\": {\n    \"alias\": [\n      \"no_drop\"\n    ]\n  },\n  \"occupied_bit\": {\n    \"alias\": [\n      \"occupied\"\n    ]\n  },\n  \"old_leaf_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"old_log_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"open_bit\": {\n    \"alias\": [\n      \"open\"\n    ]\n  },\n  \"output_lit_bit\": {\n    \"alias\": [\n      \"lit\",\n      \"output_lit\"\n    ]\n  },\n  \"output_subtract_bit\": {\n    \"alias\": [\n      \"subtract\",\n      \"output_subtract\"\n    ]\n  },\n  \"persistent_bit\": {\n    \"alias\": [\n      \"persistent\"\n    ]\n  },\n  \"pillar_axis\": {\n    \"alias\": [\n      \"axis\"\n    ]\n  },\n  \"portal_axis\": {\n    \"alias\": [\n      \"axis\"\n    ]\n  },\n  \"powered_bit\": {\n    \"alias\": [\n      \"powered\"\n    ]\n  },\n  \"prismarine_block_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"rail_data_bit\": {\n    \"alias\": [\n      \"data\"\n    ]\n  },\n  \"rail_direction\": {\n    \"alias\": [\n      \"direction\"\n    ]\n  },\n  \"redstone_signal\": {\n    \"alias\": [\n      \"signal\",\n      \"redstone\",\n      \"power\"\n    ]\n  },\n  \"repeater_delay\": {\n    \"alias\": [\n      \"delay\"\n    ]\n  },\n  \"sand_stone_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"sand_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"sapling_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"sea_grass_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"sponge_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"stability\": {\n    \"alias\": [\n      \"stability\"\n    ]\n  },\n  \"stability_check\": {\n    \"alias\": [\n      \"stability_check\"\n    ]\n  },\n  \"stone_brick_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"stone_slab_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"stone_slab_type_2\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"stone_slab_type_3\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"stone_slab_type_4\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"stone_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"stripped_bit\": {\n    \"alias\": [\n      \"stripped\"\n    ]\n  },\n  \"structure_block_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"suspended_bit\": {\n    \"alias\": [\n      \"suspended\"\n    ]\n  },\n  \"tall_grass_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"toggle_bit\": {\n    \"alias\": [\n      \"toggle\",\n      \"toggled\"\n    ]\n  },\n  \"top_slot_bit\": {\n    \"alias\": [\n      \"top\"\n    ]\n  },\n  \"torch_facing_direction\": {\n    \"alias\": [\n      \"direction\"\n    ]\n  },\n  \"triggered_bit\": {\n    \"alias\": [\n      \"triggered\"\n    ]\n  },\n  \"turtle_egg_count\": {\n    \"alias\": [\n      \"count\"\n    ]\n  },\n  \"update_bit\": {\n    \"alias\": [\n      \"update\"\n    ]\n  },\n  \"upper_block_bit\": {\n    \"alias\": [\n      \"top\"\n    ]\n  },\n  \"upside_down_bit\": {\n    \"alias\": [\n      \"flipped\"\n    ]\n  },\n  \"vine_direction_bits\": {\n    \"alias\": [\n      \"direction\"\n    ]\n  },\n  \"wall_block_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  },\n  \"weirdo_direction\": {\n    \"alias\": [\n      \"direction\"\n    ]\n  },\n  \"wood_type\": {\n    \"alias\": [\n      \"type\"\n    ]\n  }\n}"
  },
  {
    "path": "resources/blockstaterotate.json",
    "content": "[{\"0\":{\"old_log_type\":\"oak\",\"pillar_axis\":\"y\"}},{\"0\":{\"old_log_type\":\"spruce\",\"pillar_axis\":\"y\"}},{\"0\":{\"old_log_type\":\"birch\",\"pillar_axis\":\"y\"}},{\"0\":{\"old_log_type\":\"jungle\",\"pillar_axis\":\"y\"}},{\"0\":{\"old_log_type\":\"oak\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"old_log_type\":\"spruce\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"old_log_type\":\"birch\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"old_log_type\":\"jungle\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"old_log_type\":\"oak\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"old_log_type\":\"spruce\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"old_log_type\":\"birch\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"old_log_type\":\"jungle\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"pillar_axis\":\"y\",\"stripped_bit\":false,\"wood_type\":\"oak\"}},{\"0\":{\"pillar_axis\":\"y\",\"stripped_bit\":false,\"wood_type\":\"spruce\"}},{\"0\":{\"facing_direction\":0,\"triggered_bit\":false}},{\"0\":{\"facing_direction\":1,\"triggered_bit\":false}},{\"0\":{\"facing_direction\":2,\"triggered_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3,\"triggered_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4,\"triggered_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5,\"triggered_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0,\"triggered_bit\":false}},{\"0\":{\"facing_direction\":1,\"triggered_bit\":false}},{\"0\":{\"facing_direction\":2,\"triggered_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3,\"triggered_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4,\"triggered_bit\":false},\"90\":{\"facing_direction\":2,\"triggered_bit\":true},\"180\":{\"facing_direction\":5,\"triggered_bit\":true},\"270\":{\"facing_direction\":3,\"triggered_bit\":true},\"x\":{\"triggered_bit\":true},\"z\":{\"facing_direction\":5,\"triggered_bit\":true},\"xz\":{\"facing_direction\":5,\"triggered_bit\":true}},{\"0\":{\"facing_direction\":5,\"triggered_bit\":false},\"90\":{\"facing_direction\":3,\"triggered_bit\":true},\"180\":{\"facing_direction\":4,\"triggered_bit\":true},\"270\":{\"facing_direction\":2,\"triggered_bit\":true},\"x\":{\"triggered_bit\":true},\"z\":{\"facing_direction\":4,\"triggered_bit\":true},\"xz\":{\"facing_direction\":4,\"triggered_bit\":true}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":2},\"90\":{\"rail_direction\":5},\"180\":{\"rail_direction\":3},\"270\":{\"rail_direction\":4},\"z\":{\"rail_direction\":3},\"xz\":{\"rail_direction\":3}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":5},\"90\":{\"rail_direction\":3},\"180\":{\"rail_direction\":4},\"270\":{\"rail_direction\":2},\"x\":{\"rail_direction\":4},\"xz\":{\"rail_direction\":4}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":0},\"90\":{\"rail_data_bit\":true,\"rail_direction\":1},\"180\":{\"rail_data_bit\":true},\"270\":{\"rail_data_bit\":true,\"rail_direction\":1},\"x\":{\"rail_data_bit\":true},\"z\":{\"rail_data_bit\":true},\"xz\":{\"rail_data_bit\":true}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":2},\"90\":{\"rail_data_bit\":true,\"rail_direction\":5},\"180\":{\"rail_data_bit\":true,\"rail_direction\":3},\"270\":{\"rail_data_bit\":true,\"rail_direction\":4},\"x\":{\"rail_data_bit\":true},\"z\":{\"rail_data_bit\":true,\"rail_direction\":3},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":3}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":3},\"90\":{\"rail_data_bit\":true,\"rail_direction\":4},\"180\":{\"rail_data_bit\":true,\"rail_direction\":2},\"270\":{\"rail_data_bit\":true,\"rail_direction\":5},\"x\":{\"rail_data_bit\":true},\"z\":{\"rail_data_bit\":true,\"rail_direction\":2},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":2}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":5},\"90\":{\"rail_data_bit\":true,\"rail_direction\":3},\"180\":{\"rail_data_bit\":true,\"rail_direction\":4},\"270\":{\"rail_data_bit\":true,\"rail_direction\":2},\"x\":{\"rail_data_bit\":true,\"rail_direction\":4},\"z\":{\"rail_data_bit\":true},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":4}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":2},\"90\":{\"rail_direction\":5},\"180\":{\"rail_direction\":3},\"270\":{\"rail_direction\":4},\"z\":{\"rail_direction\":3},\"xz\":{\"rail_direction\":3}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":5},\"90\":{\"rail_direction\":3},\"180\":{\"rail_direction\":4},\"270\":{\"rail_direction\":2},\"x\":{\"rail_direction\":4},\"xz\":{\"rail_direction\":4}},{\"0\":{\"rail_data_bit\":true,\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},{\"0\":{\"rail_data_bit\":true,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},{\"0\":{\"rail_data_bit\":true,\"rail_direction\":2},\"90\":{\"rail_direction\":5},\"180\":{\"rail_direction\":3},\"270\":{\"rail_direction\":4},\"z\":{\"rail_direction\":3},\"xz\":{\"rail_direction\":3}},{\"0\":{\"rail_data_bit\":true,\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},{\"0\":{\"rail_data_bit\":true,\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},{\"0\":{\"rail_data_bit\":true,\"rail_direction\":5},\"90\":{\"rail_direction\":3},\"180\":{\"rail_direction\":4},\"270\":{\"rail_direction\":2},\"x\":{\"rail_direction\":4},\"xz\":{\"rail_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"torch_facing_direction\":\"west\"},\"90\":{\"torch_facing_direction\":\"north\"},\"180\":{\"torch_facing_direction\":\"east\"},\"270\":{\"torch_facing_direction\":\"south\"},\"z\":{\"torch_facing_direction\":\"east\"},\"xz\":{\"torch_facing_direction\":\"east\"}},{\"0\":{\"torch_facing_direction\":\"west\"},\"90\":{\"torch_facing_direction\":\"north\"},\"180\":{\"torch_facing_direction\":\"east\"},\"270\":{\"torch_facing_direction\":\"south\"},\"z\":{\"torch_facing_direction\":\"east\"},\"xz\":{\"torch_facing_direction\":\"east\"}},{\"0\":{\"torch_facing_direction\":\"east\"},\"90\":{\"torch_facing_direction\":\"south\"},\"180\":{\"torch_facing_direction\":\"west\"},\"270\":{\"torch_facing_direction\":\"north\"},\"z\":{\"torch_facing_direction\":\"west\"},\"xz\":{\"torch_facing_direction\":\"west\"}},{\"0\":{\"torch_facing_direction\":\"north\"},\"90\":{\"torch_facing_direction\":\"east\"},\"180\":{\"torch_facing_direction\":\"south\"},\"270\":{\"torch_facing_direction\":\"west\"},\"x\":{\"torch_facing_direction\":\"south\"},\"xz\":{\"torch_facing_direction\":\"south\"}},{\"0\":{\"torch_facing_direction\":\"south\"},\"90\":{\"torch_facing_direction\":\"west\"},\"180\":{\"torch_facing_direction\":\"north\"},\"270\":{\"torch_facing_direction\":\"east\"},\"x\":{\"torch_facing_direction\":\"north\"},\"xz\":{\"torch_facing_direction\":\"north\"}},{\"0\":{\"torch_facing_direction\":\"top\"}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"ground_sign_direction\":0},\"90\":{\"ground_sign_direction\":4},\"180\":{\"ground_sign_direction\":8},\"270\":{\"ground_sign_direction\":12},\"x\":{\"ground_sign_direction\":8},\"xz\":{\"ground_sign_direction\":8}},{\"0\":{\"ground_sign_direction\":1},\"90\":{\"ground_sign_direction\":5},\"180\":{\"ground_sign_direction\":9},\"270\":{\"ground_sign_direction\":13},\"x\":{\"ground_sign_direction\":7},\"z\":{\"ground_sign_direction\":15},\"xz\":{\"ground_sign_direction\":9}},{\"0\":{\"ground_sign_direction\":2},\"90\":{\"ground_sign_direction\":6},\"180\":{\"ground_sign_direction\":10},\"270\":{\"ground_sign_direction\":14},\"x\":{\"ground_sign_direction\":6},\"z\":{\"ground_sign_direction\":14},\"xz\":{\"ground_sign_direction\":10}},{\"0\":{\"ground_sign_direction\":3},\"90\":{\"ground_sign_direction\":7},\"180\":{\"ground_sign_direction\":11},\"270\":{\"ground_sign_direction\":15},\"x\":{\"ground_sign_direction\":5},\"z\":{\"ground_sign_direction\":13},\"xz\":{\"ground_sign_direction\":11}},{\"0\":{\"ground_sign_direction\":4},\"90\":{\"ground_sign_direction\":8},\"180\":{\"ground_sign_direction\":12},\"270\":{\"ground_sign_direction\":0},\"z\":{\"ground_sign_direction\":12},\"xz\":{\"ground_sign_direction\":12}},{\"0\":{\"ground_sign_direction\":5},\"90\":{\"ground_sign_direction\":9},\"180\":{\"ground_sign_direction\":13},\"270\":{\"ground_sign_direction\":1},\"x\":{\"ground_sign_direction\":3},\"z\":{\"ground_sign_direction\":11},\"xz\":{\"ground_sign_direction\":13}},{\"0\":{\"ground_sign_direction\":6},\"90\":{\"ground_sign_direction\":10},\"180\":{\"ground_sign_direction\":14},\"270\":{\"ground_sign_direction\":2},\"x\":{\"ground_sign_direction\":2},\"z\":{\"ground_sign_direction\":10},\"xz\":{\"ground_sign_direction\":14}},{\"0\":{\"ground_sign_direction\":7},\"90\":{\"ground_sign_direction\":11},\"180\":{\"ground_sign_direction\":15},\"270\":{\"ground_sign_direction\":3},\"x\":{\"ground_sign_direction\":1},\"z\":{\"ground_sign_direction\":9},\"xz\":{\"ground_sign_direction\":15}},{\"0\":{\"ground_sign_direction\":8},\"90\":{\"ground_sign_direction\":12},\"180\":{\"ground_sign_direction\":0},\"270\":{\"ground_sign_direction\":4},\"x\":{\"ground_sign_direction\":0},\"xz\":{\"ground_sign_direction\":0}},{\"0\":{\"ground_sign_direction\":9},\"90\":{\"ground_sign_direction\":13},\"180\":{\"ground_sign_direction\":1},\"270\":{\"ground_sign_direction\":5},\"x\":{\"ground_sign_direction\":15},\"z\":{\"ground_sign_direction\":7},\"xz\":{\"ground_sign_direction\":1}},{\"0\":{\"ground_sign_direction\":10},\"90\":{\"ground_sign_direction\":14},\"180\":{\"ground_sign_direction\":2},\"270\":{\"ground_sign_direction\":6},\"x\":{\"ground_sign_direction\":14},\"z\":{\"ground_sign_direction\":6},\"xz\":{\"ground_sign_direction\":2}},{\"0\":{\"ground_sign_direction\":11},\"90\":{\"ground_sign_direction\":15},\"180\":{\"ground_sign_direction\":3},\"270\":{\"ground_sign_direction\":7},\"x\":{\"ground_sign_direction\":13},\"z\":{\"ground_sign_direction\":5},\"xz\":{\"ground_sign_direction\":3}},{\"0\":{\"ground_sign_direction\":12},\"90\":{\"ground_sign_direction\":0},\"180\":{\"ground_sign_direction\":4},\"270\":{\"ground_sign_direction\":8},\"z\":{\"ground_sign_direction\":4},\"xz\":{\"ground_sign_direction\":4}},{\"0\":{\"ground_sign_direction\":13},\"90\":{\"ground_sign_direction\":1},\"180\":{\"ground_sign_direction\":5},\"270\":{\"ground_sign_direction\":9},\"x\":{\"ground_sign_direction\":11},\"z\":{\"ground_sign_direction\":3},\"xz\":{\"ground_sign_direction\":5}},{\"0\":{\"ground_sign_direction\":14},\"90\":{\"ground_sign_direction\":2},\"180\":{\"ground_sign_direction\":6},\"270\":{\"ground_sign_direction\":10},\"x\":{\"ground_sign_direction\":10},\"z\":{\"ground_sign_direction\":2},\"xz\":{\"ground_sign_direction\":6}},{\"0\":{\"ground_sign_direction\":15},\"90\":{\"ground_sign_direction\":3},\"180\":{\"ground_sign_direction\":7},\"270\":{\"ground_sign_direction\":11},\"x\":{\"ground_sign_direction\":9},\"z\":{\"ground_sign_direction\":1},\"xz\":{\"ground_sign_direction\":7}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},{\"0\":{\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},{\"0\":{\"rail_direction\":2},\"90\":{\"rail_direction\":5},\"180\":{\"rail_direction\":3},\"270\":{\"rail_direction\":4},\"z\":{\"rail_direction\":3},\"xz\":{\"rail_direction\":3}},{\"0\":{\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},{\"0\":{\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},{\"0\":{\"rail_direction\":5},\"90\":{\"rail_direction\":3},\"180\":{\"rail_direction\":4},\"270\":{\"rail_direction\":2},\"x\":{\"rail_direction\":4},\"xz\":{\"rail_direction\":4}},{\"0\":{\"rail_direction\":6},\"90\":{\"rail_direction\":7},\"180\":{\"rail_direction\":8},\"270\":{\"rail_direction\":9},\"x\":{\"rail_direction\":9},\"z\":{\"rail_direction\":7},\"xz\":{\"rail_direction\":8}},{\"0\":{\"rail_direction\":7},\"90\":{\"rail_direction\":8},\"180\":{\"rail_direction\":9},\"270\":{\"rail_direction\":6},\"x\":{\"rail_direction\":8},\"z\":{\"rail_direction\":6},\"xz\":{\"rail_direction\":9}},{\"0\":{\"rail_direction\":8},\"90\":{\"rail_direction\":9},\"180\":{\"rail_direction\":6},\"270\":{\"rail_direction\":7},\"x\":{\"rail_direction\":7},\"z\":{\"rail_direction\":9},\"xz\":{\"rail_direction\":6}},{\"0\":{\"rail_direction\":9},\"90\":{\"rail_direction\":6},\"180\":{\"rail_direction\":7},\"270\":{\"rail_direction\":8},\"x\":{\"rail_direction\":6},\"z\":{\"rail_direction\":8},\"xz\":{\"rail_direction\":7}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"lever_direction\":\"down_east_west\",\"open_bit\":false},\"90\":{\"lever_direction\":\"down_north_south\"},\"270\":{\"lever_direction\":\"down_north_south\"}},{\"0\":{\"lever_direction\":\"east\",\"open_bit\":false},\"90\":{\"lever_direction\":\"south\"},\"180\":{\"lever_direction\":\"west\"},\"270\":{\"lever_direction\":\"north\"},\"z\":{\"lever_direction\":\"west\"},\"xz\":{\"lever_direction\":\"west\"}},{\"0\":{\"lever_direction\":\"west\",\"open_bit\":false},\"90\":{\"lever_direction\":\"north\"},\"180\":{\"lever_direction\":\"east\"},\"270\":{\"lever_direction\":\"south\"},\"z\":{\"lever_direction\":\"east\"},\"xz\":{\"lever_direction\":\"east\"}},{\"0\":{\"lever_direction\":\"south\",\"open_bit\":false},\"90\":{\"lever_direction\":\"west\"},\"180\":{\"lever_direction\":\"north\"},\"270\":{\"lever_direction\":\"east\"},\"x\":{\"lever_direction\":\"north\"},\"xz\":{\"lever_direction\":\"north\"}},{\"0\":{\"lever_direction\":\"north\",\"open_bit\":false},\"90\":{\"lever_direction\":\"east\"},\"180\":{\"lever_direction\":\"south\"},\"270\":{\"lever_direction\":\"west\"},\"x\":{\"lever_direction\":\"south\"},\"xz\":{\"lever_direction\":\"south\"}},{\"0\":{\"lever_direction\":\"up_north_south\",\"open_bit\":false},\"90\":{\"lever_direction\":\"up_east_west\"},\"270\":{\"lever_direction\":\"up_east_west\"}},{\"0\":{\"lever_direction\":\"up_east_west\",\"open_bit\":false},\"90\":{\"lever_direction\":\"up_north_south\"},\"270\":{\"lever_direction\":\"up_north_south\"}},{\"0\":{\"lever_direction\":\"down_north_south\",\"open_bit\":false},\"90\":{\"lever_direction\":\"down_east_west\"},\"270\":{\"lever_direction\":\"down_east_west\"}},{\"0\":{\"lever_direction\":\"down_east_west\",\"open_bit\":true},\"90\":{\"lever_direction\":\"down_north_south\"},\"270\":{\"lever_direction\":\"down_north_south\"}},{\"0\":{\"lever_direction\":\"east\",\"open_bit\":true},\"90\":{\"lever_direction\":\"south\"},\"180\":{\"lever_direction\":\"west\"},\"270\":{\"lever_direction\":\"north\"},\"z\":{\"lever_direction\":\"west\"},\"xz\":{\"lever_direction\":\"west\"}},{\"0\":{\"lever_direction\":\"west\",\"open_bit\":true},\"90\":{\"lever_direction\":\"north\"},\"180\":{\"lever_direction\":\"east\"},\"270\":{\"lever_direction\":\"south\"},\"z\":{\"lever_direction\":\"east\"},\"xz\":{\"lever_direction\":\"east\"}},{\"0\":{\"lever_direction\":\"south\",\"open_bit\":true},\"90\":{\"lever_direction\":\"west\"},\"180\":{\"lever_direction\":\"north\"},\"270\":{\"lever_direction\":\"east\"},\"x\":{\"lever_direction\":\"north\"},\"xz\":{\"lever_direction\":\"north\"}},{\"0\":{\"lever_direction\":\"north\",\"open_bit\":true},\"90\":{\"lever_direction\":\"east\"},\"180\":{\"lever_direction\":\"south\"},\"270\":{\"lever_direction\":\"west\"},\"x\":{\"lever_direction\":\"south\"},\"xz\":{\"lever_direction\":\"south\"}},{\"0\":{\"lever_direction\":\"up_north_south\",\"open_bit\":true},\"90\":{\"lever_direction\":\"up_east_west\"},\"270\":{\"lever_direction\":\"up_east_west\"}},{\"0\":{\"lever_direction\":\"up_east_west\",\"open_bit\":true},\"90\":{\"lever_direction\":\"up_north_south\"},\"270\":{\"lever_direction\":\"up_north_south\"}},{\"0\":{\"lever_direction\":\"down_north_south\",\"open_bit\":true},\"90\":{\"lever_direction\":\"down_east_west\"},\"270\":{\"lever_direction\":\"down_east_west\"}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"torch_facing_direction\":\"unknown\"}},{\"0\":{\"torch_facing_direction\":\"west\"},\"90\":{\"torch_facing_direction\":\"north\"},\"180\":{\"torch_facing_direction\":\"east\"},\"270\":{\"torch_facing_direction\":\"south\"},\"z\":{\"torch_facing_direction\":\"east\"},\"xz\":{\"torch_facing_direction\":\"east\"}},{\"0\":{\"torch_facing_direction\":\"east\"},\"90\":{\"torch_facing_direction\":\"south\"},\"180\":{\"torch_facing_direction\":\"west\"},\"270\":{\"torch_facing_direction\":\"north\"},\"z\":{\"torch_facing_direction\":\"west\"},\"xz\":{\"torch_facing_direction\":\"west\"}},{\"0\":{\"torch_facing_direction\":\"north\"},\"90\":{\"torch_facing_direction\":\"east\"},\"180\":{\"torch_facing_direction\":\"south\"},\"270\":{\"torch_facing_direction\":\"west\"},\"x\":{\"torch_facing_direction\":\"south\"},\"xz\":{\"torch_facing_direction\":\"south\"}},{\"0\":{\"torch_facing_direction\":\"south\"},\"90\":{\"torch_facing_direction\":\"west\"},\"180\":{\"torch_facing_direction\":\"north\"},\"270\":{\"torch_facing_direction\":\"east\"},\"x\":{\"torch_facing_direction\":\"north\"},\"xz\":{\"torch_facing_direction\":\"north\"}},{\"0\":{\"torch_facing_direction\":\"top\"}},{\"0\":{\"torch_facing_direction\":\"unknown\"}},{\"0\":{\"torch_facing_direction\":\"west\"},\"90\":{\"torch_facing_direction\":\"north\"},\"180\":{\"torch_facing_direction\":\"east\"},\"270\":{\"torch_facing_direction\":\"south\"},\"z\":{\"torch_facing_direction\":\"east\"},\"xz\":{\"torch_facing_direction\":\"east\"}},{\"0\":{\"torch_facing_direction\":\"east\"},\"90\":{\"torch_facing_direction\":\"south\"},\"180\":{\"torch_facing_direction\":\"west\"},\"270\":{\"torch_facing_direction\":\"north\"},\"z\":{\"torch_facing_direction\":\"west\"},\"xz\":{\"torch_facing_direction\":\"west\"}},{\"0\":{\"torch_facing_direction\":\"north\"},\"90\":{\"torch_facing_direction\":\"east\"},\"180\":{\"torch_facing_direction\":\"south\"},\"270\":{\"torch_facing_direction\":\"west\"},\"x\":{\"torch_facing_direction\":\"south\"},\"xz\":{\"torch_facing_direction\":\"south\"}},{\"0\":{\"torch_facing_direction\":\"south\"},\"90\":{\"torch_facing_direction\":\"west\"},\"180\":{\"torch_facing_direction\":\"north\"},\"270\":{\"torch_facing_direction\":\"east\"},\"x\":{\"torch_facing_direction\":\"north\"},\"xz\":{\"torch_facing_direction\":\"north\"}},{\"0\":{\"torch_facing_direction\":\"top\"}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":0}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":1}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":0}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":1}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"portal_axis\":\"unknown\"},\"90\":{\"portal_axis\":\"x\"},\"180\":{\"portal_axis\":\"z\"},\"270\":{\"portal_axis\":\"x\"},\"x\":{\"portal_axis\":\"z\"},\"z\":{\"portal_axis\":\"z\"},\"xz\":{\"portal_axis\":\"z\"}},{\"0\":{\"portal_axis\":\"x\"},\"90\":{\"portal_axis\":\"z\"},\"270\":{\"portal_axis\":\"z\"}},{\"0\":{\"portal_axis\":\"z\"},\"90\":{\"portal_axis\":\"x\"},\"270\":{\"portal_axis\":\"x\"}},{\"0\":{\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"repeater_delay\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"repeater_delay\":0},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"repeater_delay\":0},\"90\":{\"direction\":3},\"270\":{\"direction\":1}},{\"0\":{\"direction\":3,\"repeater_delay\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"repeater_delay\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"repeater_delay\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"repeater_delay\":1},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"repeater_delay\":1},\"90\":{\"direction\":0},\"270\":{\"direction\":2}},{\"0\":{\"direction\":0,\"repeater_delay\":2},\"90\":{\"direction\":1},\"270\":{\"direction\":3}},{\"0\":{\"direction\":1,\"repeater_delay\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"repeater_delay\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"repeater_delay\":2},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"repeater_delay\":3},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"repeater_delay\":3},\"90\":{\"direction\":2},\"270\":{\"direction\":0}},{\"0\":{\"direction\":2,\"repeater_delay\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"repeater_delay\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"repeater_delay\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"repeater_delay\":0},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"repeater_delay\":0},\"90\":{\"direction\":3},\"270\":{\"direction\":1}},{\"0\":{\"direction\":3,\"repeater_delay\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"repeater_delay\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"repeater_delay\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"repeater_delay\":1},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"repeater_delay\":1},\"90\":{\"direction\":0},\"270\":{\"direction\":2}},{\"0\":{\"direction\":0,\"repeater_delay\":2},\"90\":{\"direction\":1},\"270\":{\"direction\":3}},{\"0\":{\"direction\":1,\"repeater_delay\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"repeater_delay\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"repeater_delay\":2},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"repeater_delay\":3},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"repeater_delay\":3},\"90\":{\"direction\":2},\"270\":{\"direction\":0}},{\"0\":{\"direction\":2,\"repeater_delay\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"repeater_delay\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"huge_mushroom_bits\":0}},{\"0\":{\"huge_mushroom_bits\":1}},{\"0\":{\"huge_mushroom_bits\":2}},{\"0\":{\"huge_mushroom_bits\":3}},{\"0\":{\"huge_mushroom_bits\":4}},{\"0\":{\"huge_mushroom_bits\":5}},{\"0\":{\"huge_mushroom_bits\":6}},{\"0\":{\"huge_mushroom_bits\":7}},{\"0\":{\"huge_mushroom_bits\":8}},{\"0\":{\"huge_mushroom_bits\":9}},{\"0\":{\"huge_mushroom_bits\":10}},{\"0\":{\"huge_mushroom_bits\":11}},{\"0\":{\"huge_mushroom_bits\":12}},{\"0\":{\"huge_mushroom_bits\":13}},{\"0\":{\"huge_mushroom_bits\":14}},{\"0\":{\"huge_mushroom_bits\":15}},{\"0\":{\"huge_mushroom_bits\":0}},{\"0\":{\"huge_mushroom_bits\":1}},{\"0\":{\"huge_mushroom_bits\":2}},{\"0\":{\"huge_mushroom_bits\":3}},{\"0\":{\"huge_mushroom_bits\":4}},{\"0\":{\"huge_mushroom_bits\":5}},{\"0\":{\"huge_mushroom_bits\":6}},{\"0\":{\"huge_mushroom_bits\":7}},{\"0\":{\"huge_mushroom_bits\":8}},{\"0\":{\"huge_mushroom_bits\":9}},{\"0\":{\"huge_mushroom_bits\":10}},{\"0\":{\"huge_mushroom_bits\":11}},{\"0\":{\"huge_mushroom_bits\":12}},{\"0\":{\"huge_mushroom_bits\":13}},{\"0\":{\"huge_mushroom_bits\":14}},{\"0\":{\"huge_mushroom_bits\":15}},{\"0\":{\"vine_direction_bits\":0}},{\"0\":{\"vine_direction_bits\":1}},{\"0\":{\"vine_direction_bits\":2}},{\"0\":{\"vine_direction_bits\":3}},{\"0\":{\"vine_direction_bits\":4}},{\"0\":{\"vine_direction_bits\":5}},{\"0\":{\"vine_direction_bits\":6}},{\"0\":{\"vine_direction_bits\":7}},{\"0\":{\"vine_direction_bits\":8}},{\"0\":{\"vine_direction_bits\":9}},{\"0\":{\"vine_direction_bits\":10}},{\"0\":{\"vine_direction_bits\":11}},{\"0\":{\"vine_direction_bits\":12}},{\"0\":{\"vine_direction_bits\":13}},{\"0\":{\"vine_direction_bits\":14}},{\"0\":{\"vine_direction_bits\":15}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{},{\"0\":{\"direction\":0,\"end_portal_eye_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"end_portal_eye_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"end_portal_eye_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"end_portal_eye_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"end_portal_eye_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"end_portal_eye_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"end_portal_eye_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"end_portal_eye_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"facing_direction\":0,\"triggered_bit\":false}},{\"0\":{\"facing_direction\":1,\"triggered_bit\":false}},{\"0\":{\"facing_direction\":2,\"triggered_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3,\"triggered_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4,\"triggered_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5,\"triggered_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0,\"triggered_bit\":false},\"90\":{\"triggered_bit\":true},\"180\":{\"triggered_bit\":true},\"270\":{\"triggered_bit\":true},\"x\":{\"triggered_bit\":true},\"z\":{\"triggered_bit\":true},\"xz\":{\"triggered_bit\":true}},{\"0\":{\"facing_direction\":1,\"triggered_bit\":false},\"90\":{\"triggered_bit\":true},\"180\":{\"triggered_bit\":true},\"270\":{\"triggered_bit\":true},\"x\":{\"triggered_bit\":true},\"z\":{\"triggered_bit\":true},\"xz\":{\"triggered_bit\":true}},{\"0\":{\"facing_direction\":2,\"triggered_bit\":false},\"90\":{\"facing_direction\":5,\"triggered_bit\":true},\"180\":{\"facing_direction\":3,\"triggered_bit\":true},\"270\":{\"facing_direction\":4,\"triggered_bit\":true},\"x\":{\"facing_direction\":3,\"triggered_bit\":true},\"z\":{\"triggered_bit\":true},\"xz\":{\"facing_direction\":3,\"triggered_bit\":true}},{\"0\":{\"facing_direction\":3,\"triggered_bit\":false},\"90\":{\"facing_direction\":4,\"triggered_bit\":true},\"180\":{\"facing_direction\":2,\"triggered_bit\":true},\"270\":{\"facing_direction\":5,\"triggered_bit\":true},\"x\":{\"facing_direction\":2,\"triggered_bit\":true},\"z\":{\"triggered_bit\":true},\"xz\":{\"facing_direction\":2,\"triggered_bit\":true}},{\"0\":{\"facing_direction\":4,\"triggered_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5,\"triggered_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":2},\"90\":{\"rail_direction\":5},\"180\":{\"rail_direction\":3},\"270\":{\"rail_direction\":4},\"z\":{\"rail_direction\":3},\"xz\":{\"rail_direction\":3}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":5},\"90\":{\"rail_direction\":3},\"180\":{\"rail_direction\":4},\"270\":{\"rail_direction\":2},\"x\":{\"rail_direction\":4},\"xz\":{\"rail_direction\":4}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":2},\"90\":{\"rail_data_bit\":true,\"rail_direction\":5},\"180\":{\"rail_data_bit\":true,\"rail_direction\":3},\"270\":{\"rail_data_bit\":true,\"rail_direction\":4},\"x\":{\"rail_data_bit\":true},\"z\":{\"rail_data_bit\":true,\"rail_direction\":3},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":3}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":4},\"90\":{\"rail_data_bit\":true,\"rail_direction\":2},\"180\":{\"rail_data_bit\":true,\"rail_direction\":5},\"270\":{\"rail_data_bit\":true,\"rail_direction\":3},\"x\":{\"rail_data_bit\":true,\"rail_direction\":5},\"z\":{\"rail_data_bit\":true},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":5}},{\"0\":{\"rail_data_bit\":false,\"rail_direction\":5},\"90\":{\"rail_data_bit\":true,\"rail_direction\":3},\"180\":{\"rail_data_bit\":true,\"rail_direction\":4},\"270\":{\"rail_data_bit\":true,\"rail_direction\":2},\"x\":{\"rail_data_bit\":true,\"rail_direction\":4},\"z\":{\"rail_data_bit\":true},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":4}},{},{},{},{},{},{},{},{},{},{},{},{},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"attached_bit\":false,\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"attached_bit\":false,\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"attached_bit\":false,\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"attached_bit\":false,\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"attached_bit\":false,\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"attached_bit\":false,\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"attached_bit\":false,\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"attached_bit\":false,\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"attached_bit\":false,\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"attached_bit\":false,\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"attached_bit\":false,\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"attached_bit\":false,\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"attached_bit\":false,\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"attached_bit\":false,\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"attached_bit\":false,\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"attached_bit\":false,\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":0}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":1}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":0},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":1},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":2},\"90\":{\"conditional_bit\":false,\"facing_direction\":5},\"180\":{\"conditional_bit\":false,\"facing_direction\":3},\"270\":{\"conditional_bit\":false,\"facing_direction\":4},\"x\":{\"conditional_bit\":false,\"facing_direction\":3},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":3}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":3},\"90\":{\"conditional_bit\":false,\"facing_direction\":4},\"180\":{\"conditional_bit\":false,\"facing_direction\":2},\"270\":{\"conditional_bit\":false,\"facing_direction\":5},\"x\":{\"conditional_bit\":false,\"facing_direction\":2},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":2}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":4},\"90\":{\"conditional_bit\":false,\"facing_direction\":2},\"180\":{\"conditional_bit\":false,\"facing_direction\":5},\"270\":{\"conditional_bit\":false,\"facing_direction\":3},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":5},\"xz\":{\"conditional_bit\":false,\"facing_direction\":5}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":5},\"90\":{\"conditional_bit\":false,\"facing_direction\":3},\"180\":{\"conditional_bit\":false,\"facing_direction\":4},\"270\":{\"conditional_bit\":false,\"facing_direction\":2},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":4},\"xz\":{\"conditional_bit\":false,\"facing_direction\":4}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":0}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":1}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"button_pressed_bit\":false,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":0}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":1}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"button_pressed_bit\":true,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0,\"no_drop_bit\":false}},{\"0\":{\"facing_direction\":1,\"no_drop_bit\":false}},{\"0\":{\"facing_direction\":2,\"no_drop_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3,\"no_drop_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4,\"no_drop_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5,\"no_drop_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0,\"no_drop_bit\":true}},{\"0\":{\"facing_direction\":1,\"no_drop_bit\":true}},{\"0\":{\"facing_direction\":2,\"no_drop_bit\":true},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3,\"no_drop_bit\":true},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4,\"no_drop_bit\":true},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5,\"no_drop_bit\":true},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"damage\":\"undamaged\",\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"damage\":\"undamaged\",\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"damage\":\"undamaged\",\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"damage\":\"undamaged\",\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"damage\":\"slightly_damaged\",\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"damage\":\"slightly_damaged\",\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"damage\":\"slightly_damaged\",\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"damage\":\"slightly_damaged\",\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"damage\":\"very_damaged\",\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"damage\":\"very_damaged\",\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"damage\":\"very_damaged\",\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"damage\":\"very_damaged\",\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"damage\":\"broken\",\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"damage\":\"broken\",\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"damage\":\"broken\",\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"damage\":\"broken\",\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"direction\":0,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"facing_direction\":0,\"toggle_bit\":false}},{\"0\":{\"facing_direction\":1,\"toggle_bit\":false}},{\"0\":{\"facing_direction\":2,\"toggle_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3,\"toggle_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4,\"toggle_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5,\"toggle_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0,\"toggle_bit\":false}},{\"0\":{\"facing_direction\":1,\"toggle_bit\":false}},{\"0\":{\"facing_direction\":2,\"toggle_bit\":false},\"90\":{\"facing_direction\":5,\"toggle_bit\":true},\"180\":{\"facing_direction\":3,\"toggle_bit\":true},\"270\":{\"facing_direction\":4,\"toggle_bit\":true},\"x\":{\"facing_direction\":3,\"toggle_bit\":true},\"z\":{\"toggle_bit\":true},\"xz\":{\"facing_direction\":3,\"toggle_bit\":true}},{\"0\":{\"facing_direction\":3,\"toggle_bit\":false},\"90\":{\"facing_direction\":4,\"toggle_bit\":true},\"180\":{\"facing_direction\":2,\"toggle_bit\":true},\"270\":{\"facing_direction\":5,\"toggle_bit\":true},\"x\":{\"facing_direction\":2,\"toggle_bit\":true},\"z\":{\"toggle_bit\":true},\"xz\":{\"facing_direction\":2,\"toggle_bit\":true}},{\"0\":{\"facing_direction\":4,\"toggle_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5,\"toggle_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"chisel_type\":\"default\",\"pillar_axis\":\"y\"}},{\"0\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"y\"}},{\"0\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"y\"}},{\"0\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"y\"}},{\"0\":{\"chisel_type\":\"default\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"chisel_type\":\"default\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"direction\":0,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"deprecated\":0,\"pillar_axis\":\"y\"}},{\"0\":{\"deprecated\":1,\"pillar_axis\":\"y\"}},{\"0\":{\"deprecated\":2,\"pillar_axis\":\"y\"}},{\"0\":{\"deprecated\":3,\"pillar_axis\":\"y\"}},{\"0\":{\"deprecated\":0,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"deprecated\":1,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"deprecated\":2,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"deprecated\":3,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"deprecated\":0,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"deprecated\":1,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"deprecated\":2,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"deprecated\":3,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"ground_sign_direction\":0},\"90\":{\"ground_sign_direction\":4},\"180\":{\"ground_sign_direction\":8},\"270\":{\"ground_sign_direction\":12},\"x\":{\"ground_sign_direction\":8},\"xz\":{\"ground_sign_direction\":8}},{\"0\":{\"ground_sign_direction\":1},\"90\":{\"ground_sign_direction\":5},\"180\":{\"ground_sign_direction\":9},\"270\":{\"ground_sign_direction\":13},\"x\":{\"ground_sign_direction\":7},\"z\":{\"ground_sign_direction\":15},\"xz\":{\"ground_sign_direction\":9}},{\"0\":{\"ground_sign_direction\":2},\"90\":{\"ground_sign_direction\":6},\"180\":{\"ground_sign_direction\":10},\"270\":{\"ground_sign_direction\":14},\"x\":{\"ground_sign_direction\":6},\"z\":{\"ground_sign_direction\":14},\"xz\":{\"ground_sign_direction\":10}},{\"0\":{\"ground_sign_direction\":3},\"90\":{\"ground_sign_direction\":7},\"180\":{\"ground_sign_direction\":11},\"270\":{\"ground_sign_direction\":15},\"x\":{\"ground_sign_direction\":5},\"z\":{\"ground_sign_direction\":13},\"xz\":{\"ground_sign_direction\":11}},{\"0\":{\"ground_sign_direction\":4},\"90\":{\"ground_sign_direction\":8},\"180\":{\"ground_sign_direction\":12},\"270\":{\"ground_sign_direction\":0},\"z\":{\"ground_sign_direction\":12},\"xz\":{\"ground_sign_direction\":12}},{\"0\":{\"ground_sign_direction\":5},\"90\":{\"ground_sign_direction\":9},\"180\":{\"ground_sign_direction\":13},\"270\":{\"ground_sign_direction\":1},\"x\":{\"ground_sign_direction\":3},\"z\":{\"ground_sign_direction\":11},\"xz\":{\"ground_sign_direction\":13}},{\"0\":{\"ground_sign_direction\":6},\"90\":{\"ground_sign_direction\":10},\"180\":{\"ground_sign_direction\":14},\"270\":{\"ground_sign_direction\":2},\"x\":{\"ground_sign_direction\":2},\"z\":{\"ground_sign_direction\":10},\"xz\":{\"ground_sign_direction\":14}},{\"0\":{\"ground_sign_direction\":7},\"90\":{\"ground_sign_direction\":11},\"180\":{\"ground_sign_direction\":15},\"270\":{\"ground_sign_direction\":3},\"x\":{\"ground_sign_direction\":1},\"z\":{\"ground_sign_direction\":9},\"xz\":{\"ground_sign_direction\":15}},{\"0\":{\"ground_sign_direction\":8},\"90\":{\"ground_sign_direction\":12},\"180\":{\"ground_sign_direction\":0},\"270\":{\"ground_sign_direction\":4},\"x\":{\"ground_sign_direction\":0},\"xz\":{\"ground_sign_direction\":0}},{\"0\":{\"ground_sign_direction\":9},\"90\":{\"ground_sign_direction\":13},\"180\":{\"ground_sign_direction\":1},\"270\":{\"ground_sign_direction\":5},\"x\":{\"ground_sign_direction\":15},\"z\":{\"ground_sign_direction\":7},\"xz\":{\"ground_sign_direction\":1}},{\"0\":{\"ground_sign_direction\":10},\"90\":{\"ground_sign_direction\":14},\"180\":{\"ground_sign_direction\":2},\"270\":{\"ground_sign_direction\":6},\"x\":{\"ground_sign_direction\":14},\"z\":{\"ground_sign_direction\":6},\"xz\":{\"ground_sign_direction\":2}},{\"0\":{\"ground_sign_direction\":11},\"90\":{\"ground_sign_direction\":15},\"180\":{\"ground_sign_direction\":3},\"270\":{\"ground_sign_direction\":7},\"x\":{\"ground_sign_direction\":13},\"z\":{\"ground_sign_direction\":5},\"xz\":{\"ground_sign_direction\":3}},{\"0\":{\"ground_sign_direction\":12},\"90\":{\"ground_sign_direction\":0},\"180\":{\"ground_sign_direction\":4},\"270\":{\"ground_sign_direction\":8},\"z\":{\"ground_sign_direction\":4},\"xz\":{\"ground_sign_direction\":4}},{\"0\":{\"ground_sign_direction\":13},\"90\":{\"ground_sign_direction\":1},\"180\":{\"ground_sign_direction\":5},\"270\":{\"ground_sign_direction\":9},\"x\":{\"ground_sign_direction\":11},\"z\":{\"ground_sign_direction\":3},\"xz\":{\"ground_sign_direction\":5}},{\"0\":{\"ground_sign_direction\":14},\"90\":{\"ground_sign_direction\":2},\"180\":{\"ground_sign_direction\":6},\"270\":{\"ground_sign_direction\":10},\"x\":{\"ground_sign_direction\":10},\"z\":{\"ground_sign_direction\":2},\"xz\":{\"ground_sign_direction\":6}},{\"0\":{\"ground_sign_direction\":15},\"90\":{\"ground_sign_direction\":3},\"180\":{\"ground_sign_direction\":7},\"270\":{\"ground_sign_direction\":11},\"x\":{\"ground_sign_direction\":9},\"z\":{\"ground_sign_direction\":1},\"xz\":{\"ground_sign_direction\":7}},{},{},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":0}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":1}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":0},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":1},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":2},\"90\":{\"conditional_bit\":false,\"facing_direction\":5},\"180\":{\"conditional_bit\":false,\"facing_direction\":3},\"270\":{\"conditional_bit\":false,\"facing_direction\":4},\"x\":{\"conditional_bit\":false,\"facing_direction\":3},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":3}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":3},\"90\":{\"conditional_bit\":false,\"facing_direction\":4},\"180\":{\"conditional_bit\":false,\"facing_direction\":2},\"270\":{\"conditional_bit\":false,\"facing_direction\":5},\"x\":{\"conditional_bit\":false,\"facing_direction\":2},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":2}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":4},\"90\":{\"conditional_bit\":false,\"facing_direction\":2},\"180\":{\"conditional_bit\":false,\"facing_direction\":5},\"270\":{\"conditional_bit\":false,\"facing_direction\":3},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":5},\"xz\":{\"conditional_bit\":false,\"facing_direction\":5}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":5},\"90\":{\"conditional_bit\":false,\"facing_direction\":3},\"180\":{\"conditional_bit\":false,\"facing_direction\":4},\"270\":{\"conditional_bit\":false,\"facing_direction\":2},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":4},\"xz\":{\"conditional_bit\":false,\"facing_direction\":4}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":0}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":1}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"conditional_bit\":false,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":0},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":1},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":2},\"90\":{\"conditional_bit\":false,\"facing_direction\":5},\"180\":{\"conditional_bit\":false,\"facing_direction\":3},\"270\":{\"conditional_bit\":false,\"facing_direction\":4},\"x\":{\"conditional_bit\":false,\"facing_direction\":3},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":3}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":3},\"90\":{\"conditional_bit\":false,\"facing_direction\":4},\"180\":{\"conditional_bit\":false,\"facing_direction\":2},\"270\":{\"conditional_bit\":false,\"facing_direction\":5},\"x\":{\"conditional_bit\":false,\"facing_direction\":2},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":2}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":4},\"90\":{\"conditional_bit\":false,\"facing_direction\":2},\"180\":{\"conditional_bit\":false,\"facing_direction\":5},\"270\":{\"conditional_bit\":false,\"facing_direction\":3},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":5},\"xz\":{\"conditional_bit\":false,\"facing_direction\":5}},{\"0\":{\"conditional_bit\":true,\"facing_direction\":5},\"90\":{\"conditional_bit\":false,\"facing_direction\":3},\"180\":{\"conditional_bit\":false,\"facing_direction\":4},\"270\":{\"conditional_bit\":false,\"facing_direction\":2},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":4},\"xz\":{\"conditional_bit\":false,\"facing_direction\":4}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},{\"0\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},{\"0\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},{\"0\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},{\"0\":{\"facing_direction\":5,\"item_frame_map_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":4,\"item_frame_map_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":3,\"item_frame_map_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":2,\"item_frame_map_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":5,\"item_frame_map_bit\":true},\"90\":{\"facing_direction\":3,\"item_frame_map_bit\":false},\"180\":{\"facing_direction\":4,\"item_frame_map_bit\":false},\"270\":{\"facing_direction\":2,\"item_frame_map_bit\":false},\"x\":{\"item_frame_map_bit\":false},\"z\":{\"facing_direction\":4,\"item_frame_map_bit\":false},\"xz\":{\"facing_direction\":4,\"item_frame_map_bit\":false}},{\"0\":{\"facing_direction\":4,\"item_frame_map_bit\":true},\"90\":{\"facing_direction\":2,\"item_frame_map_bit\":false},\"180\":{\"facing_direction\":5,\"item_frame_map_bit\":false},\"270\":{\"facing_direction\":3,\"item_frame_map_bit\":false},\"x\":{\"item_frame_map_bit\":false},\"z\":{\"facing_direction\":5,\"item_frame_map_bit\":false},\"xz\":{\"facing_direction\":5,\"item_frame_map_bit\":false}},{\"0\":{\"facing_direction\":3,\"item_frame_map_bit\":true},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":2,\"item_frame_map_bit\":true},\"90\":{\"facing_direction\":5,\"item_frame_map_bit\":false},\"180\":{\"facing_direction\":3,\"item_frame_map_bit\":false},\"270\":{\"facing_direction\":4,\"item_frame_map_bit\":false},\"x\":{\"facing_direction\":3,\"item_frame_map_bit\":false},\"z\":{\"item_frame_map_bit\":false},\"xz\":{\"facing_direction\":3,\"item_frame_map_bit\":false}},{\"0\":{\"chisel_type\":\"default\",\"pillar_axis\":\"y\"}},{\"0\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"y\"}},{\"0\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"y\"}},{\"0\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"y\"}},{\"0\":{\"chisel_type\":\"default\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"chisel_type\":\"default\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},{\"0\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"deprecated\":0,\"pillar_axis\":\"y\"}},{\"0\":{\"deprecated\":1,\"pillar_axis\":\"y\"}},{\"0\":{\"deprecated\":2,\"pillar_axis\":\"y\"}},{\"0\":{\"deprecated\":3,\"pillar_axis\":\"y\"}},{\"0\":{\"deprecated\":0,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"deprecated\":1,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"deprecated\":2,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"deprecated\":3,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},{\"0\":{\"deprecated\":0,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"deprecated\":1,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"deprecated\":2,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"deprecated\":3,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},{\"0\":{\"facing_direction\":0}},{\"0\":{\"facing_direction\":1}},{\"0\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},{\"0\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},{\"0\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},{\"0\":{\"facing_direction\":5,\"powered_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}}\n]"
  },
  {
    "path": "resources/config.yml",
    "content": "---\n# The language that should be used in the plugin\n# If your language is missing, you can add it on GitHub!\n# Available languages (ISO639-2):\n# eng, ara, cat, ces, chi, dan, deu, ell, epo, esp, est, fre, geo, hin, ind, ita, jpn, kor, lit, mar, mas, nld, nor, pol, por, rom, rus, slo, swa, swe, tgl, tha, zho\nlanguage: eng\nshow-startup-icon: false\nlimit: -1\ntool-range: 100\n"
  },
  {
    "path": "resources/donator.txt",
    "content": "XenialDan"
  },
  {
    "path": "resources/door_data.json",
    "content": "[\n  {\n    \"0\":{\n      \"direction\":0,\n      \"door_hinge_bit\":false,\n      \"open_bit\":false,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":1\n    },\n    \"180\":{\n      \"direction\":2\n    },\n    \"270\":{\n      \"direction\":3\n    },\n    \"x\":{\n      \"direction\":2\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":2\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":1,\n      \"door_hinge_bit\":true,\n      \"open_bit\":false,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":2\n    },\n    \"180\":{\n      \"direction\":3\n    },\n    \"270\":{\n      \"direction\":0\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":3\n    },\n    \"xz\":{\n      \"direction\":3\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":2,\n      \"door_hinge_bit\":false,\n      \"open_bit\":false,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":3\n    },\n    \"180\":{\n      \"direction\":0\n    },\n    \"270\":{\n      \"direction\":1\n    },\n    \"x\":{\n      \"direction\":0\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":0\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":3,\n      \"door_hinge_bit\":true,\n      \"open_bit\":false,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":0\n    },\n    \"180\":{\n      \"direction\":1\n    },\n    \"270\":{\n      \"direction\":2\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":1\n    },\n    \"xz\":{\n      \"direction\":1\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":0,\n      \"door_hinge_bit\":false,\n      \"open_bit\":true,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":1\n    },\n    \"180\":{\n      \"direction\":2\n    },\n    \"270\":{\n      \"direction\":3\n    },\n    \"x\":{\n      \"direction\":2\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":2\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":1,\n      \"door_hinge_bit\":true,\n      \"open_bit\":true,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":2\n    },\n    \"180\":{\n      \"direction\":3\n    },\n    \"270\":{\n      \"direction\":0\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":3\n    },\n    \"xz\":{\n      \"direction\":3\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":2,\n      \"door_hinge_bit\":false,\n      \"open_bit\":true,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":3\n    },\n    \"180\":{\n      \"direction\":0\n    },\n    \"270\":{\n      \"direction\":1\n    },\n    \"x\":{\n      \"direction\":0\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":0\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":3,\n      \"door_hinge_bit\":true,\n      \"open_bit\":true,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":0\n    },\n    \"180\":{\n      \"direction\":1\n    },\n    \"270\":{\n      \"direction\":2\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":1\n    },\n    \"xz\":{\n      \"direction\":1\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":0,\n      \"door_hinge_bit\":false,\n      \"open_bit\":false,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":1\n    },\n    \"180\":{\n      \"direction\":2\n    },\n    \"270\":{\n      \"direction\":3\n    },\n    \"x\":{\n      \"direction\":2\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":2\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":1,\n      \"door_hinge_bit\":true,\n      \"open_bit\":false,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":2\n    },\n    \"180\":{\n      \"direction\":3\n    },\n    \"270\":{\n      \"direction\":0\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":3\n    },\n    \"xz\":{\n      \"direction\":3\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":2,\n      \"door_hinge_bit\":false,\n      \"open_bit\":false,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":3\n    },\n    \"180\":{\n      \"direction\":0\n    },\n    \"270\":{\n      \"direction\":1\n    },\n    \"x\":{\n      \"direction\":0\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":0\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":3,\n      \"door_hinge_bit\":true,\n      \"open_bit\":false,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":0\n    },\n    \"180\":{\n      \"direction\":1\n    },\n    \"270\":{\n      \"direction\":2\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":1\n    },\n    \"xz\":{\n      \"direction\":1\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":0,\n      \"door_hinge_bit\":false,\n      \"open_bit\":true,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":1\n    },\n    \"180\":{\n      \"direction\":2\n    },\n    \"270\":{\n      \"direction\":3\n    },\n    \"x\":{\n      \"direction\":2\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":2\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":1,\n      \"door_hinge_bit\":true,\n      \"open_bit\":true,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":2\n    },\n    \"180\":{\n      \"direction\":3\n    },\n    \"270\":{\n      \"direction\":0\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":3\n    },\n    \"xz\":{\n      \"direction\":3\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":2,\n      \"door_hinge_bit\":false,\n      \"open_bit\":true,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":3\n    },\n    \"180\":{\n      \"direction\":0\n    },\n    \"270\":{\n      \"direction\":1\n    },\n    \"x\":{\n      \"direction\":0\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":0\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":3,\n      \"door_hinge_bit\":true,\n      \"open_bit\":true,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":0\n    },\n    \"180\":{\n      \"direction\":1\n    },\n    \"270\":{\n      \"direction\":2\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":1\n    },\n    \"xz\":{\n      \"direction\":1\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":0,\n      \"door_hinge_bit\":false,\n      \"open_bit\":false,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":1\n    },\n    \"180\":{\n      \"direction\":2\n    },\n    \"270\":{\n      \"direction\":3\n    },\n    \"x\":{\n      \"direction\":2\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":2\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":1,\n      \"door_hinge_bit\":true,\n      \"open_bit\":false,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":2\n    },\n    \"180\":{\n      \"direction\":3\n    },\n    \"270\":{\n      \"direction\":0\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":3\n    },\n    \"xz\":{\n      \"direction\":3\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":2,\n      \"door_hinge_bit\":false,\n      \"open_bit\":false,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":3\n    },\n    \"180\":{\n      \"direction\":0\n    },\n    \"270\":{\n      \"direction\":1\n    },\n    \"x\":{\n      \"direction\":0\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":0\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":3,\n      \"door_hinge_bit\":true,\n      \"open_bit\":false,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":0\n    },\n    \"180\":{\n      \"direction\":1\n    },\n    \"270\":{\n      \"direction\":2\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":1\n    },\n    \"xz\":{\n      \"direction\":1\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":0,\n      \"door_hinge_bit\":false,\n      \"open_bit\":true,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":1\n    },\n    \"180\":{\n      \"direction\":2\n    },\n    \"270\":{\n      \"direction\":3\n    },\n    \"x\":{\n      \"direction\":2\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":2\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":1,\n      \"door_hinge_bit\":true,\n      \"open_bit\":true,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":2\n    },\n    \"180\":{\n      \"direction\":3\n    },\n    \"270\":{\n      \"direction\":0\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":3\n    },\n    \"xz\":{\n      \"direction\":3\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":2,\n      \"door_hinge_bit\":false,\n      \"open_bit\":true,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":3\n    },\n    \"180\":{\n      \"direction\":0\n    },\n    \"270\":{\n      \"direction\":1\n    },\n    \"x\":{\n      \"direction\":0\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":0\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":3,\n      \"door_hinge_bit\":true,\n      \"open_bit\":true,\n      \"upper_block_bit\":false\n    },\n    \"90\":{\n      \"direction\":0\n    },\n    \"180\":{\n      \"direction\":1\n    },\n    \"270\":{\n      \"direction\":2\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":1\n    },\n    \"xz\":{\n      \"direction\":1\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":0,\n      \"door_hinge_bit\":false,\n      \"open_bit\":false,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":1\n    },\n    \"180\":{\n      \"direction\":2\n    },\n    \"270\":{\n      \"direction\":3\n    },\n    \"x\":{\n      \"direction\":2\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":2\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":1,\n      \"door_hinge_bit\":true,\n      \"open_bit\":false,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":2\n    },\n    \"180\":{\n      \"direction\":3\n    },\n    \"270\":{\n      \"direction\":0\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":3\n    },\n    \"xz\":{\n      \"direction\":3\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":2,\n      \"door_hinge_bit\":false,\n      \"open_bit\":false,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":3\n    },\n    \"180\":{\n      \"direction\":0\n    },\n    \"270\":{\n      \"direction\":1\n    },\n    \"x\":{\n      \"direction\":0\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":0\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":3,\n      \"door_hinge_bit\":true,\n      \"open_bit\":false,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":0\n    },\n    \"180\":{\n      \"direction\":1\n    },\n    \"270\":{\n      \"direction\":2\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":1\n    },\n    \"xz\":{\n      \"direction\":1\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":0,\n      \"door_hinge_bit\":false,\n      \"open_bit\":true,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":1\n    },\n    \"180\":{\n      \"direction\":2\n    },\n    \"270\":{\n      \"direction\":3\n    },\n    \"x\":{\n      \"direction\":2\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":2\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":1,\n      \"door_hinge_bit\":true,\n      \"open_bit\":true,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":2\n    },\n    \"180\":{\n      \"direction\":3\n    },\n    \"270\":{\n      \"direction\":0\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":3\n    },\n    \"xz\":{\n      \"direction\":3\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":2,\n      \"door_hinge_bit\":false,\n      \"open_bit\":true,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":3\n    },\n    \"180\":{\n      \"direction\":0\n    },\n    \"270\":{\n      \"direction\":1\n    },\n    \"x\":{\n      \"direction\":0\n    },\n    \"z\":{\n\n    },\n    \"xz\":{\n      \"direction\":0\n    }\n  },\n  {\n    \"0\":{\n      \"direction\":3,\n      \"door_hinge_bit\":true,\n      \"open_bit\":true,\n      \"upper_block_bit\":true\n    },\n    \"90\":{\n      \"direction\":0\n    },\n    \"180\":{\n      \"direction\":1\n    },\n    \"270\":{\n      \"direction\":2\n    },\n    \"x\":{\n\n    },\n    \"z\":{\n      \"direction\":1\n    },\n    \"xz\":{\n      \"direction\":1\n    }\n  }\n]"
  },
  {
    "path": "resources/lang/ara.ini",
    "content": "; Updated time : 26th 07 2017\nlanguage.name = \"Arabic\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"حصل خطأ ما\"\nnoperm = \"لا تملك الصلاحيات الكافية لتفعيل هذا الأمر\"\nruningame = \"الرجاء تفعيل هذا الأمر داخل اللعبة !\"\ncommands = \"الأوامر\"\n; user interfaces\nui.confirmation = \"تأكيد\"\nui.confirmation.yes = \"نعم\"\nui.confirmation.no = \"لا\"\n; ui brush\nui.brush.title = \"قائمة الفرشاة\"\n; ui brush select\nui.brush.select.title = \"اختر نوع الفرشاة\"\nui.brush.select.type.sphere = \"كرة\"\nui.brush.select.type.cylinder = \"اسطوانة\"\nui.brush.select.type.cuboid = \"مكعب\"\nui.brush.select.type.clipboard = \"حافظة\"\n; ui brush settings\nui.brush.settings.title = \"{%0} اعدادات الفرشاة\"\n; ui brush options\nui.brush.options.blocks = \"كتل\"\nui.brush.options.blocks.placeholder = \"مثال :  1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"القطر\"\nui.brush.options.width = \"العرض\"\nui.brush.options.height = \"الطول\"\nui.brush.options.depth = \"العمق\"\nui.brush.options.flags = \"أضف الأعلام؟\"\n; ui flags\nui.flags.keepexistingblocks = \"إبقاء الكتل الموجودة\"\nui.flags.keepair = \"حافظ على الهواء\"\nui.flags.hollow = \"أجوف\"\nui.flags.natural = \"طبيعي\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"قائمة التعبئة\"\nui.flood.options.limit = \"أقصى حد من الكتل\"\nui.flood.options.blocks = \"كتل\"\nui.flood.options.blocks.placeholder = \"كتل مفصولة بفواصل منقوطة\"\nui.flood.options.label.infoapply = \"اضغط على \"Submit\" للتطبيق\"\n"
  },
  {
    "path": "resources/lang/cat.ini",
    "content": "; Updated time : 26th 07 2017\nlanguage.name = \"Valencian\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"Quelcom ha fallat\"\nnoperm = \"Tu no tens permisos per executar aquesta comanda\"\nruningame = \"Si us plau executa aquesta comanda en el joc!\"\ncommands = \"ordres\"\n; user interfaces\nui.confirmation = \"Confirmació\"\nui.confirmation.yes = \"Si\"\nui.confirmation.no = \"No\"\n; ui brush\nui.brush.title = \"Menú de pinzells\"\n; ui brush select\nui.brush.select.title = \"Selecciona un tipus de pinzell\"\nui.brush.select.type.sphere = \"Esfera\"\nui.brush.select.type.cylinder = \"Cilindre\"\nui.brush.select.type.cuboid = \"Cuboide\"\nui.brush.select.type.clipboard = \"Portapapers\"\n; ui brush settings\nui.brush.settings.title = \"{%0} configuració del pinzell\"\n; ui brush options\nui.brush.options.blocks = \"Blocs\"\nui.brush.options.blocks.placeholder = \"Exemple: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diàmetre\"\nui.brush.options.width = \"Ample\"\nui.brush.options.height = \"Alt\"\nui.brush.options.depth = \"Profunditat\"\nui.brush.options.flags = \"Afegir banderes?\"\n; ui flags\nui.flags.keepexistingblocks = \"Mantenir blocs existents\"\nui.flags.keepair = \"Mantenir l'aire\"\nui.flags.hollow = \"Buit\"\nui.flags.natural = \"Natural\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"Menú d'inundacions\"\nui.flood.options.limit = \"Blocs màxims\"\nui.flood.options.blocks = \"Blocs\"\nui.flood.options.blocks.placeholder = \"Els blocs han d'estar separats per punt i coma\"\nui.flood.options.label.infoapply = \"Prem el botó enviar per aplicar els canvis\"\n"
  },
  {
    "path": "resources/lang/ces.ini",
    "content": "; Updated time : 15th 10 2020\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Czech\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"příkazy\"\nenabled = \"zapnuto\"\ndisabled = \"vypnuto\"\nconfirmation = \"Potvrzení\"\nconfirmation.yes = \"Ano\"\nconfirmation.no = \"Ne\"\n; errors\nerror = \"Něco se pokazilo\"\nerror.command-error = \"Chybí požadovaný argument nebo byl příkaz použit špatně!\"\nerror.runingame = \"Prosím, spusťte tento příkaz ve hře!\"\nerror.limitexceeded = \"Snažíte se editovat příliš mnoho bloků naráz. Zmenšete výběr nebo zvyšte limit\"\nerror.notarget = \"Nebyl nalezen cílový blok. Můžete zvýšit dosah pomocí //setrange\"\nerror.noselection = \"Nebyl nalezen žádný výběr - nejprve vyberte oblast\"\nerror.selectioninvalid = \"Výběr není platný! Zkontrolujte, jestli jsou nastaveny všechny pozice!\"\nerror.nosession = \"Nebylo vytvořeno žádné sezení - nejspíše chybí oprávnění {%0}\"\nerror.noclipboard = \"Žádná kopírovací schránka nebyla nalezena - nejprve ji vytvořte\"\nwarning.differentworld = \"[VAROVÁNÍ] Editujete svět ve kterém momentálně nejste!\"\n; commands\ncommand.info.title = \"Informace\"\ncommand.limit.current = \"Aktuální limit: {%0}\"\ncommand.limit.set = \"Limit množství bloků byl nastaven na {%0}\"\ncommand.setrange.current = \"Aktuální dosah: {%0}\"\ncommand.setrange.set = \"Dosah nástroje byl nastaven na {%0}\"\ncommand.biomeinfo.attarget = \"Biom v cíli\"\ncommand.biomeinfo.atposition = \"Biom na pozici\"\ncommand.biomeinfo.result = \"{%0} biomů nalezeno ve výběru\"\ncommand.biomeinfo.result.line = \"ID: {%0} Jméno: {%1}\"\ncommand.biomelist.title = \"Seznam biomů\"\ncommand.biomelist.result.line = \"ID: {%0} Jméno: {%1}\"\ncommand.brushname.set = \"Název štětce nastaven na \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Schránky vyprázdněny\"\ncommand.flip.try = \"Zkouším zrcadlit schránku o {%0}\"\ncommand.flip.success = \"Úspěšně se povedlo zrcadlit schránku\"\ncommand.rotate.try = \"Zkouším otočit schránku o {%0} stupňů\"\ncommand.rotate.success = \"Úspěšně se povedlo otočit schránku\"\ncommand.history.cleared = \"Historie vyprázdněna\"\ncommand.listchunks.found = \"{%0} kusů nalezeno ve výběru\"\ncommand.size = \"Velikost výběru\"\n; selection\nselection.pos1.set = \"Pozice 1 nastavena na X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Pozice 2 nastavena na X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Nelze nic vrátit\"\nsession.undo.left = \"Máte {%0} akcí k vrácení zpět\"\nsession.redo.none = \"Nelze nic zopakovat\"\nsession.redo.left = \"Máte {%0} akcí k zopakování\"\nsession.brush.added = \"Přidáno {%0} do sezení\"\nsession.brush.deleted = \"Smazáno {%0} (UUID {%1})\"\nsession.brush.removed = \"Odstraněno {%0} (UUID {%1})\"\nsession.language.set = \"Úspěšně nastaven jazyk na {%0}\"\nsession.language.notfound = \"Jazyk {%0} nebyl nalezen, nastavuji výchozí\"\n; task\ntask.copy.success = \"Asynchronní kopie úspěšná, trvala {%0}, zkopírováno {%1} bloků z {%2}.\"\ntask.count.success = \"Asynchronní analýza úspěšná, trvala {%0}\"\ntask.count.result = \"{%0} bloků nalezeno z celkového množství {%1} bloků\"\ntask.fill.success = \"Asynchronní Výplň úspěšná, trvala {%0}, {%1} bloků z {%2} změněno.\"\ntask.replace.success = \"Async Nahrazení úspěšné, trvalo {%0}, {%1} bloků z {%2} změněno.\"\ntask.revert.undo.success = \"Asynchronní Zpět úspěšné, trvalo {%0}, {%1} bloků z {%2} změněno.\"\ntask.revert.redo.success = \"Asynchronní Znovu úspěšné, trvalo {%0}, {%1} bloků z {%2} změněno.\"\n; flags\nflags.keepexistingblocks = \"Ponechat existující bloky\"\nflags.keepair = \"Ponechat vzduch\"\nflags.hollow = \"Duté\"\nflags.hollowclosed = \"Duté s uzavřenými konci\"\nflags.natural = \"Přírodní\"\n; tools\n; wand tool\ntool.wand = \"Hůlka\"\ntool.wand.lore.1 = \"Klikněte levým na blok k nastavení pozice 1 výběru\"\ntool.wand.lore.2 = \"Klikněte pravým na blok k nastavení pozice 2 výběru\"\ntool.wand.lore.3 = \"Použijte //togglewand k vypnutí/zapnutí Hůlky\"\ntool.wand.disabled = \"Hůlka je nyní vypnutá. Použijte //togglewand k opětovnému zapnutí\"\ntool.wand.setenabled = \"Hůlka je nyní {%0}!\"\n; debug tool\ntool.debug = \"Debugovací Nástroj\"\ntool.debug.lore.1 = \"Klikněte levým na blok pro získání informace\"\ntool.debug.lore.2 = \"jako je jméno a hodnoty poškození bloku\"\ntool.debug.lore.3 = \"Použijte //toggledebug k vypnutí/zapnutí debugovacího nástroje\"\ntool.debug.disabled = \"Debugovací nástroj je nyní vypnut. Použijte //toggledebug k opětovnému zapnutí\"\ntool.debug.setenabled = \"Debugovací nástroj je nyní {%0}!\"\n; flood tool\nui.flood.title = \"Zanořené menu\"\nui.flood.options.limit = \"Maximální bloky\"\nui.flood.options.blocks = \"Bloky\"\nui.flood.options.blocks.placeholder = \"Bloky oddělené středníky\"\nui.flood.options.label.infoapply = \"Klepnutím na tlačítko odeslat uložíte změny\"\n; brush tool\nui.brush.title = \"Menu štětce\"\nui.brush.content = \"Hlavní menu štětců\"\nui.brush.create = \"Vytvořit nový\"\nui.brush.getsession = \"Získat štetec ze sezení\"\nui.brush.edithand = \"Editovat aktuální štětec\"\n; brush settings\nui.brush.settings.title = \"{%0} nastavení štětce\"\n; brush options\nui.brush.options.blocks = \"Bloky\"\nui.brush.options.blocks.placeholder = \"Například: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Průměr\"\nui.brush.options.width = \"Šířka\"\nui.brush.options.height = \"Výška\"\nui.brush.options.depth = \"Hloubka\"\nui.brush.options.flags = \"Přidat flagy?\"\n; language\nui.language.title = \"Vyberte jazyk\"\nui.language.label = \"Nastavte jazyk sezení. Pokud Váš jazyk zatím není podporován, můžete plugin přeložit na GitHubu!\"\nui.language.dropdown = \"Vyberte jazyk\"\n"
  },
  {
    "path": "resources/lang/chi.ini",
    "content": "; Updated time : 26th 07 2017\nlanguage.name = \"Traditional Chinese\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"某些地方出錯了\"\nnoperm = \"您並沒有執行這條指令的權限\"\nruningame = \"請在遊戲中執行這條指令!\"\ncommands = \"指令\"\n; user interfaces\nui.confirmation = \"確認\"\nui.confirmation.yes = \"是\"\nui.confirmation.no = \"否\"\n; ui brush\nui.brush.title = \"筆刷選單\"\n; ui brush select\nui.brush.select.title = \"選取一支筆刷\"\nui.brush.select.type.sphere = \"球體\"\nui.brush.select.type.cylinder = \"圓柱\"\nui.brush.select.type.cuboid = \"立方體\"\nui.brush.select.type.clipboard = \"剪貼簿\"\n; ui brush settings\nui.brush.settings.title = \"{%0} 筆刷設置\"\n; ui brush options\nui.brush.options.blocks = \"塊\"\nui.brush.options.blocks.placeholder = \"範例: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"直徑\"\nui.brush.options.width = \"寬度\"\nui.brush.options.height = \"高度\"\nui.brush.options.depth = \"深度\"\nui.brush.options.flags = \"是否加上標誌 (flags)?\"\n; ui flags\nui.flags.keepexistingblocks = \"保留現有區塊\"\nui.flags.keepair = \"保留空氣\"\nui.flags.hollow = \"中空\"\nui.flags.natural = \"自然\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"填充選單\"\nui.flood.options.limit = \"最大塊\"\nui.flood.options.blocks = \"塊\"\nui.flood.options.blocks.placeholder = \"用分號分隔的塊\"\nui.flood.options.label.infoapply = \"請點擊\"送出\"按鈕來套用\"\n"
  },
  {
    "path": "resources/lang/dan.ini",
    "content": "; Updated time : 15th 10 2019\nlanguage.name = \"Danish\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"kommandoer\"\nenabled = \"aktiveret\"\ndisabled = \"deaktiveret\"\nconfirmation = \"Bekræftelse\"\nconfirmation.yes = \"Ja\"\nconfirmation.no = \"Nej\"\n; errors\nerror = \"En fejl opstod\"\nerror.command-error = \"Det ser ud til, at du mangler et argument eller bruger kommandoen forkert!\"\nerror.runingame = \"Kør venligst denne kommando i spillet!\"\nerror.limitexceeded = \"Du prøver at redigere for mange blokke på en gang. Reducer din markering eller hæv grænsen\"\nerror.notarget = \"Ingen mål blok fundet. Forøg din værktøjsrækkevidde med //setrange hvis nødvendigt\"\nerror.noselection = \"Ingen markering fundet - vælg et område først\"\nerror.selectioninvalid = \"Markeringen er ikke gyldig! Tjek at alle positioner er sat!\"\nerror.nosession = \"Ingen session er oprettet - du har sandsynligvis ikke rettigheder til at bruge {%0}\"\nerror.noclipboard = \"Intet clipboard fundet - opret et clipboard først\"\nwarning.differentworld = \"[ADVARSEL] Du redigere i en verden, som du ikke er i på nuværende tidspunkt!\"\n; commands\ncommand.info.title = \"Information\"\ncommand.limit.current = \"Nuværende grænse: {%0}\"\ncommand.limit.set = \"Grænse for blokændring er blevet sat til {%0}\"\ncommand.setrange.current = \"Nuværende rækkevidde: {%0}\"\ncommand.setrange.set = \"Værktøjsrækkevidde er blevet sat til {%0}\"\ncommand.biomeinfo.attarget = \"Biom ved målet\"\ncommand.biomeinfo.atposition = \"Biom ved positionen\"\ncommand.biomeinfo.result = \"{%0} biomer er blevet fundet i markeringen\"\ncommand.biomeinfo.result.line = \"ID: {%0} Navn: {%1}\"\ncommand.biomelist.title = \"Biomliste\"\ncommand.biomelist.result.line = \"ID: {%0} Navn: {%1}\"\ncommand.brushname.set = \"Penselnavn er blevet sat til \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Clipboardet er blevet ryddet\"\ncommand.flip.try = \"Prøver at vende clipboardet med {%0}\"\ncommand.flip.success = \"Clipboardet er blevet vendt med succes\"\ncommand.rotate.try = \"Prøver at rotere clipboardet med {%0} grader\"\ncommand.rotate.success = \"Clipboardet er blevet roteret med succes\"\ncommand.history.cleared = \"Historikken er blevet ryddet\"\ncommand.listchunks.found = \"{%0} chunks er blevet fundet i markeringen\"\ncommand.size = \"Markeringsstørrelse\"\n; selection\nselection.pos1.set = \"Position 1 er blevet sat til X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Position 2 er blevet sat til X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Intet at fortryde\"\nsession.undo.left = \"Du har {%0} fortrydningshandlinger tilbage\"\nsession.redo.none = \"Intet at gøre igen\"\nsession.redo.left = \"Du har {%0} omgørningshandlinger tilbage\"\nsession.brush.added = \"Tilføjede {%0} til sessionen\"\nsession.brush.deleted = \"Slettede {%0} (UUID {%1})\"\nsession.brush.removed = \"Fjernede {%0} (UUID {%1})\"\nsession.language.set = \"Sproget er blevet sat til {%0} med succes\"\nsession.language.notfound = \"Sproget {%0} er ikke fundet, nulstiller til standard\"\n; task\ntask.copy.success = \"Asynkron Kopi lykkedes, tog {%0}, kopierede {%1} blokke ud af {%2}.\"\ntask.count.success = \"Asynkron analyse lykkedes, tog {%0}\"\ntask.count.result = \"{%0} blokke fundet i alt ud af {%1} blokke\"\ntask.fill.success = \"Asynkron Fyldning lykkedes, tog {%0}, {%1} blokke ud af {%2} ændret.\"\ntask.replace.success = \"Asynkron Ombytning lykkedes, tog {%0}, {%1} blokke ud af {%2} ændret.\"\ntask.revert.undo.success = \"Asynkron Fortrydning lykkedes, tog {%0}, {%1} blokke ud af {%2} ændret.\"\ntask.revert.redo.success = \"Async Omgørning lykkedes, tog {%0}, {%1} blokke ud af {%2} ændret.\"\n; flags\nflags.keepexistingblocks = \"Behold eksisterende blokke\"\nflags.keepair = \"Behold luft\"\nflags.hollow = \"Fordybning\"\nflags.hollowclosed = \"Fordybning med lukkede ender\"\nflags.natural = \"Naturlig\"\n; tools\n; wand tool\ntool.wand = \"Stav\"\ntool.wand.lore.1 = \"Venstre-klik på en blok for at sætte position 1 af en markeringen\"\ntool.wand.lore.2 = \"Venstre-klik på en blok for at sætte position 2 af en markeringen\"\ntool.wand.lore.3 = \"Brug //togglewand til at skifte dets funktionalitet\"\ntool.wand.disabled = \"Staven er deaktiveret. Brug //togglewand til at genaktivere den\"\ntool.wand.setenabled = \"Stavet er nu {%0}!\"\n; debug tool\ntool.debug = \"Fejlfindingsværktøj\"\ntool.debug.lore.1 = \"Venstre-klik på en blok for at få information\"\ntool.debug.lore.2 = \"såsom navnet og skadeværdier, der hører til en blok\"\ntool.debug.lore.3 = \"Brug //toggledebug til at skifte dets funktionalitet\"\ntool.debug.disabled = \"Fejlfindingsværktøjet er deaktiveret. Brug //toggledebug til at genaktivere det\"\ntool.debug.setenabled = \"Fejlfindingsværktøjet er nu {%0}!\"\n; flood tool\nui.flood.title = \"Oversvømmelsesmenu\"\nui.flood.options.limit = \"Maksimum antal blokke\"\nui.flood.options.blocks = \"Blokke\"\nui.flood.options.blocks.placeholder = \"Blokke er adskilt med semikolon\"\nui.flood.options.label.infoapply = \"Klik på \"Indsend\"-knappen for at ansøge\"\n; brush tool\nui.brush.title = \"Pensel-menu\"\nui.brush.content = \"Pensel-hovedmenu\"\nui.brush.create = \"Opret ny\"\nui.brush.getsession = \"Få sessionspensel\"\nui.brush.edithand = \"Rediger penselen i hånden\"\n; brush settings\nui.brush.settings.title = \"{%0} penselindstillinger\"\n; brush options\nui.brush.options.blocks = \"Blokke\"\nui.brush.options.blocks.placeholder = \"Eksempel: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diameter\"\nui.brush.options.width = \"Bredde\"\nui.brush.options.height = \"Højde\"\nui.brush.options.depth = \"Dybde\"\nui.brush.options.flags = \"Tilføj flags?\"\n; language\nui.language.title = \"Vælg sprog\"\nui.language.label = \"Sæt sproget for denne session. Hvis dit sprog ikke er tilgængeligt, kan du oversætte dette plugin på GitHub!\"\nui.language.dropdown = \"Vælg et sprog\""
  },
  {
    "path": "resources/lang/deu.ini",
    "content": "; Updated time : 25th 10 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"German\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"Befehle\"\nenabled = \"aktiviert\"\ndisabled = \"deaktiviert\"\nconfirmation = \"Bestätigung\"\nconfirmation.yes = \"Ja\"\nconfirmation.no = \"Nein\"\n; errors\nerror = \"Ein Fehler ist aufgetreten!\"\nerror.command-error = \"Es scheint, dass ein Argument fehlt oder der Befehl falsch genutzt wurde!\"\nerror.runingame = \"Bitte führe diesen Befehl im Spiel aus!\"\nerror.limitexceeded = \"Du versuchst zu viele Blöcke auf einmal zu bearbeiten. Verkleinere die Auswahl oder erhöhe das Limit\"\nerror.notarget = \"Kein Ziel-Block gefunden. Erhöhe die Reichweite von Werkzeugen mit //setrange falls nötig\"\nerror.noselection = \"Keine Auswahl gefunden - wähle zuerst einen Bereich aus\"\nerror.selectioninvalid = \"Die Auswahl ist ungültig! Überprüfe, ob alle Positionen gesetzt sind!\"\nerror.nosession = \"Es wurde keine Sitzung erstellt - wahrscheinlich keine Berechtigung zur Verwendung von {%0}\"\nerror.noclipboard = \"Keine Zwischenablage gefunden - erstelle erst eine Zwischenablage\"\nwarning.differentworld = \"[WARNUNG] Du bearbeitest eine Welt, in der du dich gerade nicht befindest!\"\n; commands\ncommand.info.title = \"Information\"\ncommand.limit.current = \"Derzeitiges Limit: {%0}\"\ncommand.limit.set = \"Blockänderungslimit wurde auf {%0} gesetzt.\"\ncommand.setrange.current = \"Aktuelle Reichweite: {%0}\"\ncommand.setrange.set = \"Werkzeugreichweite wurde auf {%0} gesetzt.\"\ncommand.biomeinfo.attarget = \"Biom am Ziel-Block\"\ncommand.biomeinfo.atposition = \"Biom an der Ziel-Position\"\ncommand.biomeinfo.result = \"{%0} in der Auswahl gefundene Biome\"\ncommand.biomeinfo.result.line = \"ID: {%0} Name: {%1}\"\ncommand.biomelist.title = \"Biom-Liste\"\ncommand.biomelist.result.line = \"ID: {%0} Name: {%1}\"\ncommand.brushname.set = \"Pinselname auf \\\"{%0}\\\" gesetzt\"\ncommand.clearclipboard.cleared = \"Zwischenablagen gelöscht\"\ncommand.flip.try = \"Es wird versucht, die Zwischenablage um {%0} zu spiegeln.\"\ncommand.flip.success = \"Zwischenablage erfolgreich gespiegelt\"\ncommand.rotate.try = \"Es wird versucht, die Zwischenablage um {%0} Grad zu drehen.\"\ncommand.rotate.success = \"Zwischenablage erfolgreich gedreht\"\ncommand.history.cleared = \"Verlauf gelöscht\"\ncommand.listchunks.found = \"In der Auswahl wurden {%0} Chunks gefunden.\"\ncommand.size = \"Größe der Auswahl\"\n; selection\nselection.pos1.set = \"Position 1 auf X: {%0} Y: {%1} Z: {%2} gesetzt\"\nselection.pos2.set = \"Position 2 auf X: {%0} Y: {%1} Z: {%2} gesetzt\"\n; session\nsession.undo.none = \"Nichts rückgängig zu machen\"\nsession.undo.left = \"Du kannst noch {%0} Aktionen rückgängig machen.\"\nsession.redo.none = \"Nichts zu wiederholen\"\nsession.redo.left = \"Du kannst noch {%0} Aktionen wiederherstellen.\"\nsession.brush.added = \"{%0} zur Sitzung hinzugefügt\"\nsession.brush.deleted = \"{%0} (UUID {%1} gelöscht)\"\nsession.brush.removed = \"{%0} (UUID {%1} entfernt)\"\nsession.language.set = \"Sprache erfolgreich auf {%0} gesetzt\"\nsession.language.notfound = \"Sprache {%0} nicht gefunden, auf Standard zurückgesetzt\"\n; task\ntask.copy.success = \"Asynchrones Kopieren erfolgreich, brauchte {%0}, {%1} von {%2} Blöcken kopiert.\"\ntask.count.success = \"Asynchrone Analyse erfolgreich, brauchte {%0}.\"\ntask.count.result = \"{%0} Blöcke in insgesamt {%1} Blöcken gefunden\"\ntask.fill.success = \"Asynchrones Füllen erfolgreich, brauchte {%0}, {%1} von {%2} Blöcken geändert.\"\ntask.replace.success = \"Asynchrones Ersetzen erfolgreich, brauchte {%0}, {%1} von {%2} Blöcken geändert.\"\ntask.revert.undo.success = \"Asynchrone Rückgängigmachung erfolgreich, brauchte {%0}, {%1} von {%2} Blöcken geändert.\"\ntask.revert.redo.success = \"Asynchrone Wiederherstellung erfolgreich, brauchte {%0}, {%1} von {%2} Blöcken geändert.\"\n; flags\nflags.keepexistingblocks = \"Bestehende Blöcke beibehalten\"\nflags.keepair = \"Luft beibehalten\"\nflags.hollow = \"Hohlraum\"\nflags.hollowclosed = \"Hohlraum mit geschlossenen Enden\"\nflags.natural = \"Natürlich\"\n; tools\n; wand tool\ntool.wand = \"Auswahlwerkzeug\"\ntool.wand.lore.1 = \"Klicke mit der linken Maustaste auf einen Block, um die 1. Position einer Auswahl festzulegen\"\ntool.wand.lore.2 = \"Klicke mit der rechten Maustaste auf einen Block, um die 2. Position einer Auswahl festzulegen\"\ntool.wand.lore.3 = \"Mit //togglewand können sie die Funktionalität umschalten\"\ntool.wand.disabled = \"Das Auswahlwerkzeug ist deaktiviert. Verwenden sie //togglewand, um es wieder zu aktivieren\"\ntool.wand.setenabled = \"Das Auswahlwerkzeug ist jetzt {%0}!\"\n; debug tool\ntool.debug = \"Debug-Werkzeug\"\ntool.debug.lore.1 = \"Klicke mit der linken Maustaste auf einen Block, um Informationen zu erhalten\"\ntool.debug.lore.2 = \"wie z.B. den Namen und die Meta-Daten eines Blocks\"\ntool.debug.lore.3 = \"Mit //toggledebug kannst du die Funktionalität umschalten\"\ntool.debug.disabled = \"Das Debug-Werkzeug ist deaktiviert. Verwenden Sie //toggledebug, um es wieder zu aktivieren\"\ntool.debug.setenabled = \"Das Debug-Werkzeug ist jetzt {%0}!\"\n; flood tool\nui.flood.title = \"Füllwerkzeug-Menü\"\nui.flood.options.limit = \"Maximale Blöcke\"\nui.flood.options.blocks = \"Blöcke\"\nui.flood.options.blocks.placeholder = \"Blöcke, getrennt durch Semikolons\"\nui.flood.options.label.infoapply = \"Drücke den \"Submit\"-Knopf, um die Änderung anzuwenden!\"\n; brush tool\nui.brush.title = \"Pinsel-Menü\"\nui.brush.content = \"Pinsel-Hauptmenü\"\nui.brush.create = \"Neuer Pinsel\"\nui.brush.getsession = \"Sitzungs-Pinsel erhalten\"\nui.brush.edithand = \"Pinsel in der Hand bearbeiten\"\n; brush settings\nui.brush.settings.title = \"{%0} Pinsel-Einstellungen\"\n; brush options\nui.brush.options.blocks = \"Blöcke\"\nui.brush.options.blocks.placeholder = \"Beispiel: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Durchmesser\"\nui.brush.options.width = \"Breite\"\nui.brush.options.height = \"Höhe\"\nui.brush.options.depth = \"Tiefe\"\nui.brush.options.flags = \"Optionen hinzufügen?\"\n; language\nui.language.title = \"Sprache auswählen\"\nui.language.label = \"Stelle die Sprache deiner Sitzung ein. Wenn deine Sprache nicht verfügbar ist, kannst du das Plugin auf GitHub übersetzen!\"\nui.language.dropdown = \"Wähle eine Sprache\""
  },
  {
    "path": "resources/lang/ell.ini",
    "content": "; Updated time : 8th 10 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Greek\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"εντολές\"\nenabled = \"ενεργοποιημένο\"\ndisabled = \"απενεργοποιημένο\"\nconfirmation = \"Επιβεβαίωση\"\nconfirmation.yes = \"Ναι\"\nconfirmation.no = \"Όχι\"\n; errors\nerror = \"Προέκυψε σφάλμα\"\nerror.command-error = \"Φαίνεται σαν να λείπει κάποιο όρισμα ή χρησιμοποιήσατε λανθασμένα την εντολή!\"\nerror.runingame = \"Παρακαλώ τρέξτε αυτή την εντολή μέσα στο παιχνίδι!\"\nerror.limitexceeded = \"Προσπαθείτε να επεξεργαστείτε πολλά τουβλάκια συγχρόνως. Μειώστε το μέγεθος της επιλογής σας ή αυξήστε το όριο\"\nerror.notarget = \"Δεν βρέθηκε το τουβλάκι. Αυξήστε την εμβέλεια του εργαλείου με το //setrange αν χρειάζεται\"\nerror.noselection = \"Δεν βρέθηκε η επιλογή - επιλέξτε μια περιοχή πρώτα\"\nerror.selectioninvalid = \"Η επιλογή αυτή δεν είναι έγκυρη! Ελέγξτε αν όλες οι τοποθεσίες έχουν οριστεί!\"\nerror.nosession = \"Δεν δημιουργήθηκε συνεδρία - μάλλον δεν υπάρχει δικαίωμα χρήσης {%0}\"\nerror.noclipboard = \"Δεν βρέθηκε πρόχειρο - δημιουργήστε ένα πρόχειρο πρώτα\"\nwarning.differentworld = \"[ΠΡΟΕΙΔΟΠΟΙΗΣΗ] Επεξεργάζεστε σε ένα επίπεδο στο οποίο δεν βρίσκεστε μέσα επί του παρόντος!\"\n; commands\ncommand.info.title = \"Πληροφορίες\"\ncommand.limit.current = \"Τωρινό όριο: {%0}\"\ncommand.limit.set = \"Το όριο αλλαγής για τα τουβλάκια αλλάχθηκε σε {%0}\"\ncommand.setrange.current = \"Τωρινή εμβέλεια: {%0}\"\ncommand.setrange.set = \"Η εμβέλεια εργαλείου αλλάχθηκε σε {%0}\"\ncommand.biomeinfo.attarget = \"Biome at target\"\ncommand.biomeinfo.atposition = \"Βιότοπος στη τοποθεσία\"\ncommand.biomeinfo.result = \"{%0} βιότοποι βρέθηκαν στη τοποθεσία\"\ncommand.biomeinfo.result.line = \"ID: {%0} Όνομα: {%1}\"\ncommand.biomelist.title = \"Κατάλογος βιότοπων\"\ncommand.biomelist.result.line = \"ID: {%0} Όνομα: {%1}\"\ncommand.brushname.set = \"Όνομα βούρτσας αλλάχθηκε σε \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Έγινε εκκαθάριση προχείρων\"\ncommand.flip.try = \"Προσπάθεια γύρισματος προχείρων κατά {%0}\"\ncommand.flip.success = \"Επιτυχές γύρισμα προχείρων\"\ncommand.rotate.try = \"Προσπάθεια γυρίσματος προχείρων κατά {%0} μοίρες\"\ncommand.rotate.success = \"Επιτυχής στροφή προχείρων\"\ncommand.history.cleared = \"Εκκαθαρίστηκε το ιστορικό\"\ncommand.listchunks.found = \"{%0} κομμάτια βρέθηκαν στην επιλογή\"\ncommand.size = \"Μέγεθος επιλογής\"\n; selection\nselection.pos1.set = \"Θέση 1 τέθηκε σε X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Θέση 2 τέθηκε σε X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Τίποτα προς αναίρεση\"\nsession.undo.left = \"Έχετε {%0} ενέργειες αναίρεσης διαθέσιμες\"\nsession.redo.none = \"Τίποτα διαθέσιμο προς επαναφορά\"\nsession.redo.left = \"Σας απέμειναν {%0} ενέργειες επαναφοράς\"\nsession.brush.added = \"Προστέθηκε {%0} στη συνεδρία\"\nsession.brush.deleted = \"Διαγράφθηκε {%0} (UUID {%1})\"\nsession.brush.removed = \"Αφαιρέθηκε {%0} (UUID {%1})\"\nsession.language.set = \"Επιτυχώς επιλέχθηκε η γλώσσα {%0}\"\nsession.language.notfound = \"Η γλώσσα {%0} δεν βρέθηκε, επαναφορά στη προεπιλογή\"\n; task\ntask.copy.success = \"Επιτυχής ασύγχρονη αντιγραφή, πήρε {%0}, αντιγράφθηκαν {%1} τουβλάκια από τα {%2}.\"\ntask.count.success = \"Ασύγχρονη ανάλυση επιτυχής, διήρκησε {%0}\"\ntask.count.result = \"{%0} τουβλάκια βρέθηκαν συνολικά από τα {%1} τουβλάκια\"\ntask.fill.success = \"Ασύγχρονο Γέμισμα επιτυχές, διήρκησε {%0}, {%1} τουβλάκια από τα {%2} άλλαξαν.\"\ntask.replace.success = \"Ασύγχρονη Αντικατάσταση επιτυχής, διήρκησε {%0}, {%1} τουβλάκια από τα {%2} άλλαξαν.\"\ntask.revert.undo.success = \"Αρύγχρονη Αναίρεση επιτυχής, διήρκησε {%0}, {%1} τουβλάκια από τα {%2} άλλαξαν.\"\ntask.revert.redo.success = \"Αρύγχρονη Επαναφορά επιτυχής, διήρκησε {%0}, {%1} τουβλάκια από τα {%2} άλλαξαν.\"\n; flags\nflags.keepexistingblocks = \"Κράτα υφιστάμενα τουβλάκια\"\nflags.keepair = \"Κράτα αέρα\"\nflags.hollow = \"Κούφιο\"\nflags.hollowclosed = \"Κούφιο με κλειστά άκρα\"\nflags.natural = \"Φυσική\"\n; tools\n; wand tool\ntool.wand = \"Ραβδί\"\ntool.wand.lore.1 = \"Κάντε αριστερό κλικ σε ένα τουβλάκι για να θέσετε τη τοποθεσία 1 από μια επιλογή\"\ntool.wand.lore.2 = \"Κάντε δεξί κλικ σε ένα τουβλάκι για να θέσετε τη τοποθεσία 2 από μια επιλογή\"\ntool.wand.lore.3 = \"Χρησιμοποιείστε το //togglewand για να αλλάξετε τη λειτουργία του\"\ntool.wand.disabled = \"Το εργαλείο ραβδί είναι απενεργοποιημένο. Χρησιμοποιείστε το //togglewand \"\ntool.wand.setenabled = \"Το εργαλείο ραβδί είναι τώρα {%0}!\"\n; debug tool\ntool.debug = \"Εργαλείο αποσφαλμάτωσης\"\ntool.debug.lore.1 = \"Κάντε αριστερό κλικ στο τουβλάκι για να πάρετε πληροφορίες\"\ntool.debug.lore.2 = \"σαν το όνομα και το ποσό ζημιάς ενός τουβλάκι\"\ntool.debug.lore.3 = \"Χρησιμοποιείστε το //toggledebug να αλλάξετε τη λειτουργία του\"\ntool.debug.disabled = \"Το εργαλείο αποσφαλμάτωσης είναι απενεργοποιημένο. Χρησιμοποιείστε το //toggledebug για να το επανενεργοποιήσετε\"\ntool.debug.setenabled = \"Το εργαλείο αποσφαλμάτωσης είναι τώρα {%0}!\"\n; flood tool\nui.flood.title = \"Μενού πλημμύρας\"\nui.flood.options.limit = \"Μέγιστα τουβλάκια\"\nui.flood.options.blocks = \"Τουβλάκια\"\nui.flood.options.blocks.placeholder = \"Τουβλάκια διαχωρισμένα από ερωτηματικά\"\nui.flood.options.label.infoapply = \"Πατήστε το κουμπί \"Υποβολή\" για εφαρμογή\"\n; brush tool\nui.brush.title = \"Μενού βουρτσών\"\nui.brush.content = \"Κεντρικό μενού βουρτσών\"\nui.brush.create = \"Δημιουργία νέας\"\nui.brush.getsession = \"Πάρτε τη βούρτσα συνεδρίας\"\nui.brush.edithand = \"Επεξεργασία βούρτσας στο χέρι\"\n; brush settings\nui.brush.settings.title = \"{%0} ρυθμίσεις βούρτσας\"\n; brush options\nui.brush.options.blocks = \"Τουβλάκια\"\nui.brush.options.blocks.placeholder = \"Παράδειγμα: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Διάμετρος\"\nui.brush.options.width = \"Πλάτος\"\nui.brush.options.height = \"Ύψος\"\nui.brush.options.depth = \"Βάθος\"\nui.brush.options.flags = \"Προσθήκη σημαιών;\"\n; language\nui.language.title = \"Επιλογή γλώσσας\"\nui.language.label = \"Θέστε τη γλώσσα της συνεδρίας σας. Αν η γλώσσα σας δεν είναι διαθέσιμη, you may translate the plugin on GitHub!\"\nui.language.dropdown = \"Επιλέξτε γλώσσα\""
  },
  {
    "path": "resources/lang/eng.ini",
    "content": "; Updated time : 26th 09 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"English\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"commands\"\nenabled = \"enabled\"\ndisabled = \"disabled\"\nconfirmation = \"Confirmation\"\nconfirmation.yes = \"Yes\"\nconfirmation.no = \"No\"\n; errors\nerror = \"An error occurred\"\nerror.command-error = \"Looks like you are missing an argument or used the command wrong!\"\nerror.runingame = \"Please run this command in-game!\"\nerror.limitexceeded = \"You are trying to edit too many blocks at once. Reduce the selection or raise the limit\"\nerror.notarget = \"No target block found. Increase tool range with //setrange if needed\"\nerror.noselection = \"No selection found - select an area first\"\nerror.selectioninvalid = \"The selection is not valid! Check if all positions are set!\"\nerror.nosession = \"No session was created - probably no permission to use {%0}\"\nerror.noclipboard = \"No clipboard found - create a clipboard first\"\nwarning.differentworld = \"[WARNING] You are editing in a world which you are currently not in!\"\n; commands\ncommand.info.title = \"Information\"\ncommand.limit.current = \"Current limit: {%0}\"\ncommand.limit.set = \"Block change limit was set to {%0}\"\ncommand.setrange.current = \"Current range: {%0}\"\ncommand.setrange.set = \"Tool range was set to {%0}\"\ncommand.biomeinfo.attarget = \"Biome at target\"\ncommand.biomeinfo.atposition = \"Biome at position\"\ncommand.biomeinfo.result = \"{%0} biomes found in selection\"\ncommand.biomeinfo.result.line = \"ID: {%0} Name: {%1}\"\ncommand.biomelist.title = \"Biome list\"\ncommand.biomelist.result.line = \"ID: {%0} Name: {%1}\"\ncommand.brushname.set = \"Brush name set to \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Clipboards cleared\"\ncommand.flip.try = \"Trying to flip clipboard by {%0}\"\ncommand.flip.success = \"Successfully flipped clipboard\"\ncommand.rotate.try = \"Trying to rotate clipboard by {%0} degrees\"\ncommand.rotate.success = \"Successfully rotated clipboard\"\ncommand.history.cleared = \"History cleared\"\ncommand.listchunks.found = \"{%0} chunks found in selection\"\ncommand.size = \"Selection size\"\n; selection\nselection.pos1.set = \"Position 1 set to X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Position 2 set to X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Nothing to undo\"\nsession.undo.left = \"You have {%0} undo actions left\"\nsession.redo.none = \"Nothing to redo\"\nsession.redo.left = \"You have {%0} redo actions left\"\nsession.brush.added = \"Added {%0} to session\"\nsession.brush.deleted = \"Deleted {%0} (UUID {%1})\"\nsession.brush.removed = \"Removed {%0} (UUID {%1})\"\nsession.language.set = \"Successfully set language to {%0}\"\nsession.language.notfound = \"Language {%0} not found, resetting to default\"\n; task\ntask.copy.success = \"Async Copy succeed, took {%0}, copied {%1} blocks out of {%2}.\"\ntask.count.success = \"Async analysing succeed, took {%0}\"\ntask.count.result = \"{%0} blocks found in a total of {%1} blocks\"\ntask.fill.success = \"Async Fill succeed, took {%0}, {%1} blocks out of {%2} changed.\"\ntask.replace.success = \"Async Replace succeed, took {%0}, {%1} blocks out of {%2} changed.\"\ntask.revert.undo.success = \"Async Undo succeed, took {%0}, {%1} blocks out of {%2} changed.\"\ntask.revert.redo.success = \"Async Redo succeed, took {%0}, {%1} blocks out of {%2} changed.\"\n; flags\nflags.keepexistingblocks = \"Keep existing blocks\"\nflags.keepair = \"Keep air\"\nflags.hollow = \"Hollow\"\nflags.hollowclosed = \"Hollow with closed ends\"\nflags.natural = \"Natural\"\n; tools\n; wand tool\ntool.wand = \"Wand\"\ntool.wand.lore.1 = \"Left click a block to set the position 1 of a selection\"\ntool.wand.lore.2 = \"Right click a block to set the position 2 of a selection\"\ntool.wand.lore.3 = \"Use //togglewand to toggle it's functionality\"\ntool.wand.disabled = \"The wand tool is disabled. Use //togglewand to re-enable it\"\ntool.wand.setenabled = \"The wand tool is now {%0}!\"\n; debug tool\ntool.debug = \"Debug Tool\"\ntool.debug.lore.1 = \"Left click a block to get information\"\ntool.debug.lore.2 = \"like the name and damage values of a block\"\ntool.debug.lore.3 = \"Use //toggledebug to toggle it's functionality\"\ntool.debug.disabled = \"The debug tool is disabled. Use //toggledebug to re-enable it\"\ntool.debug.setenabled = \"The debug tool is now {%0}!\"\n; WAILA tool (What am i looking at)\ntool.waila = \"Waila\"\ntool.waila.setenabled = \"The Waila utility is now {%0}!\"\n; Sidebar\ntool.sidebar = \"Sidebar\"\ntool.sidebar.setenabled = \"The sidebar is now {%0}!\"\n; flood tool\nui.flood.title = \"Flood menu\"\nui.flood.options.limit = \"Maximum blocks\"\nui.flood.options.blocks = \"Blocks\"\nui.flood.options.blocks.placeholder = \"Blocks separated by semicolons\"\nui.flood.options.label.infoapply = \"Click the \"Submit\" button to apply\"\n; brush tool\nui.brush.title = \"Brush menu\"\nui.brush.content = \"Brush main menu\"\nui.brush.create = \"Create new\"\nui.brush.getsession = \"Get session brush\"\nui.brush.edithand = \"Edit brush in hand\"\n; brush settings\nui.brush.settings.title = \"{%0} brush settings\"\n; brush options\nui.brush.options.blocks = \"Blocks\"\nui.brush.options.blocks.placeholder = \"Example: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diameter\"\nui.brush.options.width = \"Width\"\nui.brush.options.height = \"Height\"\nui.brush.options.depth = \"Depth\"\nui.brush.options.flags = \"Add flags?\"\n; language\nui.language.title = \"Select language\"\nui.language.label = \"Set the language of your session. If your language is not available, you may translate the plugin on GitHub!\"\nui.language.dropdown = \"Select a language\""
  },
  {
    "path": "resources/lang/epo.ini",
    "content": "; Updated time : 9th 10 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Esperanto\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"ordonoj\"\nenabled = \"aktivigita\"\ndisabled = \"malaktivigita\"\nconfirmation = \"Konfirmacio\"\nconfirmation.yes = \"Jes\"\nconfirmation.no = \"Ne\"\n; errors\nerror = \"Eraro okazis\"\nerror.command-error = \"Ŝajnas ke vi mankas argumenton aŭ misuzis la ordonon!\"\nerror.runingame = \"Bonvolu uzu ĉi-tiun ordonon enlude!\"\nerror.limitexceeded = \"Vi provas redakti tro da blokoj samtempe. Malkreskigu la areo aŭ kreskigu la limon!\"\nerror.notarget = \"Neniu altrafita bloko trovita. Kreskigu iloatingo per //setrange\"\nerror.noselection = \"Neniu elektaro trovita - elektu areon unue\"\nerror.selectioninvalid = \"La elektaro ne validas! Kontrolu ke ĉiuj pozicioj ekzistas!\"\nerror.nosession = \"Ne kreis sesion - verŝajne malpermesita uzi {%0}\"\nerror.noclipboard = \"Ne ekzistas tondejo - kreu tondejon unue\"\nwarning.differentworld = \"[AVERTO] Vi redaktas mondon kiu vi ne enestas!\"\n; commands\ncommand.info.title = \"Informo\"\ncommand.limit.current = \"Nuntempa limo: {%0}\"\ncommand.limit.set = \"Blokŝanĝlimo fariĝis {%0}\"\ncommand.setrange.current = \"Nuntempa atingopovo: {%0}\"\ncommand.setrange.set = \"Iloatingo fariĝis {%0}\"\ncommand.biomeinfo.attarget = \"Biomedio ĉe celo\"\ncommand.biomeinfo.atposition = \"Biomedio ĉe pozicio\"\ncommand.biomeinfo.result = \"{%0} bimedioj trovitaj en elektaro\"\ncommand.biomeinfo.result.line = \"ID: {%0} Nomo: {%1}\"\ncommand.biomelist.title = \"Biomedio listo\"\ncommand.biomelist.result.line = \"ID: {%0} Nomo: {%1}\"\ncommand.brushname.set = \"Brosonomo fariĝis \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Tondejoj forigitaj\"\ncommand.flip.try = \"Provante renversi tondejo per {%0}\"\ncommand.flip.success = \"Tondejo renversita\"\ncommand.rotate.try = \"Provante turnigi tondejon per {%0} da gradoj\"\ncommand.rotate.success = \"Tondejo turnigita\"\ncommand.history.cleared = \"Historio forigita\"\ncommand.listchunks.found = \"{%0} blokegoj found in selection\"\ncommand.size = \"Elektaro grandeco\"\n; selection\nselection.pos1.set = \"Pozicio 1 fariĝis X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Pozicio 2 fariĝis X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Neniu por malfari\"\nsession.undo.left = \"Restas{%0} da malfaroagoj\"\nsession.redo.none = \"Neniu por refari\"\nsession.redo.left = \"Restas {%0} da refaroagoj\"\nsession.brush.added = \"Aldonis {%0} al sesio\"\nsession.brush.deleted = \"Foriĝis {%0} (UUID {%1})\"\nsession.brush.removed = \"Formovis {%0} (UUID {%1})\"\nsession.language.set = \"Agordis lingvon al {%0}\"\nsession.language.notfound = \"Lingvo {%0} ne trovita, uzante defaŭlton\"\n; task\ntask.copy.success = \"Sukcesis neinsinkrona kopio, daŭris {%0}, kopiis {%1} da blokoj el{%2}.\"\ntask.count.success = \"Sukcesis neinsinkrona analizo, daŭris {%0}\"\ntask.count.result = \"{%0} da blokoj trovitaj el totalo de {%1} blocks\"\ntask.replace.success = \"Sukcesis neinsinkrona interŝanĝo, daŭris {%0}, ŝanĝis {%1} da blokoj el{%2}.\"\ntask.revert.undo.success = \"Sukcesis neinsinkrona malfarado, daŭris {%0}, ŝanĝis {%1} da blokoj el{%2}.\"\ntask.revert.redo.success = \"Sukcesis neinsinkrona refarado, daŭris {%0}, ŝanĝis {%1} da blokoj el{%2}.\"\n; flags\nflags.keepexistingblocks = \"Konservu jamaj blokoj\"\nflags.keepair = \"Konservu aero\"\nflags.hollow = \"Kava\"\nflags.hollowclosed = \"Kava kun ŝtopitaj ekstremaĵoj\"\nflags.natural = \"Natura\"\n; tools\n; wand tool\ntool.wand = \"Sorĉbastono\"\ntool.wand.lore.1 = \"Alklaku maldekstren por agordi la pozicio 1 de elektaro\"\ntool.wand.lore.2 = \"Alklaku dekstren por agordi la pozicio 2 de elektaro\"\ntool.wand.lore.3 = \"Baskulu ĝin per //togglewand\"\ntool.wand.disabled = \"La sorĉbastono estas malaktivigita. Baskulu ĝin per //togglewand\"\ntool.wand.setenabled = \"La sorĉbastono nun estas {%0}!\"\n; debug tool\ntool.debug = \"Erarserĉilo\"\ntool.debug.lore.1 = \"Alklaku maldesktre por ricevi informon\"\ntool.debug.lore.2 = \"kiel la nomo kaj damaĝovaloro de bloko\"\ntool.debug.lore.3 = \"Uzu //toggledebug por baskuli la funkciado\"\ntool.debug.disabled = \"La erarserĉilo estas malativigita. Reaktivigu ĝin per //toggledebug\"\ntool.debug.setenabled = \"La erarserĉilo nun estas {%0}!\"\n; flood tool\nui.flood.title = \"Plenigomenuo\"\nui.flood.options.limit = \"Blokolimo\"\nui.flood.options.blocks = \"Blokoj\"\nui.flood.options.blocks.placeholder = \"Blokoj apartigita per punktokomo\"\nui.flood.options.label.infoapply = \"Alklaku la \"Submit\" butono por apliku\"\n; brush tool\nui.brush.title = \"Brosomenuo\"\nui.brush.content = \"Broso ĉefmenuo\"\nui.brush.create = \"Kreu nova\"\nui.brush.getsession = \"Akiru sesiobroso\"\nui.brush.edithand = \"Redaktu broso enmane\"\n; brush settings\nui.brush.settings.title = \"{%0} brosagordoj\"\n; brush options\nui.brush.options.blocks = \"Blokoj\"\nui.brush.options.blocks.placeholder = \"Exemple: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diametro\"\nui.brush.options.width = \"Larĝeco\"\nui.brush.options.height = \"Alteco\"\nui.brush.options.depth = \"Profundeco\"\nui.brush.options.flags = \"Ĉu aldoni opciojn?\"\n; language\nui.language.title = \"Elektu lingvon\"\nui.language.label = \"Elektu la lingvon por via sesio. Se ne havebla, vi povas traduki la programo ĉe GitHub!\"\nui.language.dropdown = \"Elektu lingvon\""
  },
  {
    "path": "resources/lang/esp.ini",
    "content": "; Updated time : 26th 09 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Español\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"Comandos\"\nenabled = \"habilitado\"\ndisabled = \"deshabilitado\"\nconfirmation = \"Confirmación\"\nconfirmation.yes = \"Si\"\nconfirmation.no = \"No\"\n; errors\nerror = \"A ocurrido un error\"\nerror.command-error = \"Parece que te falta un argumento o has usado el comando incorrectamente!\"\nerror.runingame = \"Por favor ejecuta este comando en el juego!\"\nerror.limitexceeded = \"Estás intentando editar demasiados bloques a la vez. Reduzca la selección o aumente el límite\"\nerror.notarget = \"No se ha encontrado el bloque objetivo. Aumente el rango de herramientas con //setrange si es necesario\"\nerror.noselection = \"No se ha encontrado ninguna selección - seleccione primero un área\"\nerror.selectioninvalid = \"¡La selección no es válida!. Compruebe si todas las posiciones están establecidas\"\nerror.nosession = \"No se creó ninguna sesión, probablemente sin permiso para usar {%0}\"\nerror.noclipboard = \"No se encontró el portapapeles - cree primero un portapapeles\"\nwarning.differentworld = \"[ADVERTENCIA] Estás editando en un nivel en el que no estás actualmente!\"\n; commands\ncommand.info.title = \"Información\"\ncommand.limit.current = \"Límite actual: {%0}\"\ncommand.limit.set = \"El límite de cambio de bloque se estableció en {%0}\"\ncommand.setrange.current = \"Rango actual: {%0}\"\ncommand.setrange.set = \"El rango de herramientas se estableció en {%0}\"\ncommand.biomeinfo.attarget = \"Bioma en el objetivo\"\ncommand.biomeinfo.atposition = \"Bioma en posición\"\ncommand.biomeinfo.result = \"{%0} biomas encontrados en la selección\"\ncommand.biomeinfo.result.line = \"ID: {%0} Nombre: {%1}\"\ncommand.biomelist.title = \"Lista de biomas\"\ncommand.biomelist.result.line = \"ID: {%0} Nombre: {%1}\"\ncommand.brushname.set = \"Nombre del pincel establecido en \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Portapapeles borrados\"\ncommand.flip.try = \"Intentando voltear el portapapeles por {%0}\"\ncommand.flip.success = \"Portapapeles invertido con éxito\"\ncommand.rotate.try = \"Intentando rotar el portapapeles en {%0} grados\"\ncommand.rotate.success = \"Portapapeles rotado con éxito\"\ncommand.history.cleared = \"Historial borrado\"\ncommand.listchunks.found = \"{%0} fragmentos encontrados en la selección\"\ncommand.size = \"Tamaño de selección\"\n; selection\nselection.pos1.set = \"Posición 1 establecida en X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Posición 2 establecida en X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Nada que deshacer\"\nsession.undo.left = \"Te quedan {%0} acciones para deshacer\"\nsession.redo.none = \"Nada que rehacer\"\nsession.redo.left = \"Te quedan {%0} acciones de rehacer\"\nsession.brush.added = \"Agregado {%0} a la sesión\"\nsession.brush.deleted = \"Eliminado {%0} (UUID {%1})\"\nsession.brush.removed = \"Eliminado {%0} (UUID {%1})\"\nsession.language.set = \"Establecer correctamente el idioma en {%0}\"\nsession.language.notfound = \"Idioma {%0} no encontrado, restableciendo a los valores predeterminados\"\n; task\ntask.copy.success = \"La copia asíncrona se realizó correctamente, tomó {%0}, copió {%1} bloques de {%2}\".\ntask.count.success = \"El análisis asincrónico tuvo éxito, tomó {%0}\"\ntask.count.result = \"{%0} bloques encontrados en un total de {%1} bloques\"\ntask.fill.success = \"El llenado asíncrono tuvo éxito, tomó {%0}, {%1} bloques de {%2} cambiado\".\ntask.replace.success = \"Reemplazo asíncrono exitoso, tomó {%0}, {%1} bloques de {%2} cambiado\".\ntask.revert.undo.success = \"Deshacer asíncrono exitoso, tomó {%0}, {%1} bloques de {%2} cambiado\".\ntask.revert.redo.success = \"Rehacer asíncrono tuvo éxito, tomó {%0}, {%1} bloques de {%2} cambiado\".\n; flags\nflags.keepexistingblocks = \"Mantener bloques existentes\"\nflags.keepair = \"Mantener el aire\"\nflags.hollow = \"Hueco\"\nflags.hollowclosed = \"Hueco con extremos cerrados\"\nflags.natural = \"Natural\"\n; tools\n; wand tool\ntool.wand = \"Varita mágica\"\ntool.wand.lore.1 = \"Haga clic izquierdo en un bloque para establecer la posición 1 de una selección\"\ntool.wand.lore.2 = \"Haga clic derecho en un bloque para establecer la posición 2 de una selección\"\ntool.wand.lore.3 = \"Use //togglewand  para alternar su funcionalidad\"\ntool.wand.disabled = \"La herramienta de varita está deshabilitada. Use //togglewand para volver a habilitarla\"\ntool.wand.setenabled = \"¡La herramienta de varita ahora es {% 0}!\"\n; debug tool\ntool.debug = \"Herramienta de depuración\"\ntool.debug.lore.1 = \"Haga clic izquierdo en un bloque para obtener información\"\ntool.debug.lore.2 = \"nombre y valores de daño de un bloque\"\ntool.debug.lore.3 = \"Use //toggledebug para alternar su funcionalidad\"\ntool.debug.disabled = \"La herramienta de depuración está deshabilitada. Use //toggledebug para volver a habilitarla\"\ntool.debug.setenabled = \"¡La herramienta de depuración ahora es {%0}!\"\n; flood tool\nui.flood.title = \"Menú de inundación\"\nui.flood.options.limit = \"Bloques máximos\"\nui.flood.options.blocks = \"Bloques\"\nui.flood.options.blocks.placeholder = \"Bloques separados por punto y coma\"\nui.flood.options.label.infoapply = \"Haga clic en el botón \"Enviar\" para aplicar\"\n; brush tool\nui.brush.title = \"Menú de pincel\"\nui.brush.content = \"Menú principal de pincel\"\nui.brush.create = \"Crear nuevo\"\nui.brush.getsession = \"Obtener pincel de sesión\"\nui.brush.edithand = \"Editar pincel en mano\"\n; brush settings\nui.brush.settings.title = \"{%0} ajustes de pincel\"\n; brush options\nui.brush.options.blocks = \"Bloques\"\nui.brush.options.blocks.placeholder = \"Ejemplo: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diámetro\"\nui.brush.options.width = \"Anchura\"\nui.brush.options.height = \"Altura\"\nui.brush.options.depth = \"Profundidad\"\nui.brush.options.flags = \"Agregar banderas?\"\n; language\nui.language.title = \"Seleccione el idioma\"\nui.language.label = \"Establece el idioma de tu sesión. Si su idioma no está disponible, puede traducir el complemento en GitHub!\"\nui.language.dropdown = \"Seleccione el idioma\""
  },
  {
    "path": "resources/lang/est.ini",
    "content": "; Updated time : 26th 09 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Estonian\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"käsud\"\nenabled = \"lubatud\"\ndisabled = \"puudega\"\nconfirmation = \"Kinnitamine\"\nconfirmation.yes = \"Jah\"\nconfirmation.no = \"Ei\"\n; errors\nerror = \"Ilmnes viga\"\nerror.command-error = \"Paistab, et teil pole argumenti ega käsku valesti kasutanud!\"\nerror.runingame = \"Käitage seda käsku mängus!\"\nerror.limitexceeded = \"Üritate redigeerida liiga palju plokke korraga. Vähendage valikut või tõstke limiiti\"\nerror.notarget = \"Sihtplokki ei leitud. Kui vaja, suurendage tööriistavahemikku // setrange abil\"\nerror.noselection = \"Valikut ei leitud - valige kõigepealt piirkond\"\nerror.selectioninvalid = \"Valik ei kehti! Kontrollige, kas kõik positsioonid on seatud!\"\nerror.nosession = \"Ühtegi seanssi ei loodud - tõenäoliselt pole selle kasutamiseks luba {%0}\"\nerror.noclipboard = \"Lõikelauda ei leitud - kõigepealt looge lõikelauale\"\nwarning.differentworld = \"[HOIATUS] Redigeerite tasemel, milles te praegu ei viibi!\"\n; commands\ncommand.info.title = \"Teave\"\ncommand.limit.current = \"Praegune piir: {%0}\"\ncommand.limit.set = \"Ploki muutmise limiidiks seati {%0}\"\ncommand.setrange.current = \"Praegune vahemik: {%0}\"\ncommand.setrange.set = \"Tööriistade vahemik seati väärtusele {%0}\"\ncommand.biomeinfo.attarget = \"Biome sihtmärgis\"\ncommand.biomeinfo.atposition = \"Biome positsioonil\"\ncommand.biomeinfo.result = \"{%0} biomid, mis on leitud valikul\"\ncommand.biomeinfo.result.line = \"ID: {%0} Nimi: {%1}\"\ncommand.biomelist.title = \"Biome loend\"\ncommand.biomelist.result.line = \"ID: {%0} Nimi: {%1}\"\ncommand.brushname.set = \"Pintsli nimi on seatud \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Lõikelauad on puhastatud\"\ncommand.flip.try = \"Trying to flip clipboard by {%0}\"\ncommand.flip.success = \"Successfully flipped clipboard\"\ncommand.rotate.try = \"Proovin lõikelauda pöörata {%0} kraadi\"\ncommand.rotate.success = \"Lõikelaua edukas pööramine\"\ncommand.history.cleared = \"Ajalugu on kustutatud\"\ncommand.listchunks.found = \"Valikus leiti {%0} tükki\"\ncommand.size = \"Valiku suurus\"\n; selection\nselection.pos1.set = \"Asend 1 seatud X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Asend 2 seatud X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Pole midagi tühistada\"\nsession.undo.left = \"Teil on {%0} toiminguid tühistatud\"\nsession.redo.none = \"Pole midagi tee kordada\"\nsession.redo.left = \"Teil on{%0} korratud toimingut on jäänud\"\nsession.brush.added = \"Lisas sessioonidele {%0} eset\"\nsession.brush.deleted = \"Kustutatud {%0} (UUID {%1})\"\nsession.brush.removed = \"Eemaldatud {%0} (UUID {%1})\"\nsession.language.set = \"Keele valimine õnnestus {%0}\"\nsession.language.notfound = \"Keelt {%0} ei leitud, lähtestatakse vaikeseadele\"\n; task\ntask.copy.success = \"Asynci kopeerimine õnnestus, kulus {%0}, kopeeriti {%1} plokid väljast {%2}.\"\ntask.count.success = \"Asynci analüüsimine õnnestus, võttis {%0}\"\ntask.count.result = \"{%0} plokke leiti kokku {%1} plokkidest\"\ntask.fill.success = \"Asynci täitmine õnnestus, võttis {%0}, {%1} plokid saidist {%2} muudeti.\"\ntask.replace.success = \"Asynci asendamine õnnestus, võttis {%0}, {%1} plokid saidist {%2} muudeti.\"\ntask.revert.undo.success = \"Asynci tagasivõtmine õnnestus, võttis {%0}, {%1} plokid saidist {%2} muudeti.\"\ntask.revert.redo.success = \"Async Redo õnnestus, võttis {%0}, {%1} plokid saidist {%2} muudeti.\"\n; flags\nflags.keepexistingblocks = \"Hoidke olemasolevad plokid alles\"\nflags.keepair = \"Hoidke õhku\"\nflags.hollow = \"Õõnes\"\nflags.hollowclosed = \"Õõnes suletud otstega\"\nflags.natural = \"Looduslik\"\n; tools\n; wand tool\ntool.wand = \"Võlukepp\"\ntool.wand.lore.1 = \"Vasakklõps plokil võimaldab seada valiku 1. positsiooni\"\ntool.wand.lore.2 = \"Vasakklõps plokil võimaldab seada valiku 2. positsiooni\"\ntool.wand.lore.3 = \"Kasutage //togglewand selle funktsionaalsuse muutmiseks\"\ntool.wand.disabled = \"Võlukepp on keelatud. Selle uuesti lubamiseks kasutage //togglewand\"\ntool.wand.setenabled = \"Võlukepi tööriist on nüüd {%0}!\"\n; debug tool\ntool.debug = \"Silumisriist\"\ntool.debug.lore.1 = \"Teabe saamiseks klõpsake vasakklõpsake plokki\"\ntool.debug.lore.2 = \"nagu ploki nimi ja kahjustusväärtused\"\ntool.debug.lore.3 = \"Kasutage //toggledebug selle funktsionaalsuse muutmiseks\"\ntool.debug.disabled = \"Silumisriist on keelatud. Selle uuesti lubamiseks kasutage //toggledebug\"\ntool.debug.setenabled = \"Silumisriist on nüüd {%0}!\"\n; flood tool\nui.flood.title = \"Üleujutuse menüü\"\nui.flood.options.limit = \"Maksimaalne plokkide arv\"\nui.flood.options.blocks = \"Plokid\"\nui.flood.options.blocks.placeholder = \"Semikoolonitega eraldatud plokid\"\nui.flood.options.label.infoapply = \"Muudatuste rakendamiseks klõpsake nuppu Edasta\"\n; brush tool\nui.brush.title = \"Pintslimenüü\"\nui.brush.content = \"Pintsli peamenüü\"\nui.brush.create = \"Loo uus\"\nui.brush.getsession = \"Hankige sessioonipintsel\"\nui.brush.edithand = \"Redigeeri pintslit käes\"\n; brush settings\nui.brush.settings.title = \"{%0} harjaseaded\"\n; brush options\nui.brush.options.blocks = \"Plokid\"\nui.brush.options.blocks.placeholder = \"Näide: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Läbimõõt\"\nui.brush.options.width = \"Laius\"\nui.brush.options.height = \"Kõrgus\"\nui.brush.options.depth = \"Sügavus\"\nui.brush.options.flags = \"Kas lisada lippe?\"\n; language\nui.language.title = \"Vali keel\"\nui.language.label = \"Seansi keele määramine. Kui teie keel pole saadaval, võite tõlkida pistikprogrammi GitHubis!\"\nui.language.dropdown = \"Vali keel\""
  },
  {
    "path": "resources/lang/fre.ini",
    "content": "; Updated time : 6th 10 2019\nlanguage.name = \"French\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"Quelque chose s'est mal passé\"\ncommands = \"Commandes\"\nenabled = \"activé\"\ndisabled = \"désactivé\"\n; errors\nerror.command-error = \"Il semble qu'il manque un argument ou que vous ayez mal utilisé la commande !\"\nerror.runingame = \"Veuillez éxécuter cette commande en jeu !\"\nerror.limitexceeded = \"Vous êtes en train d'essayer de modifier trop de blocs d'un coup, réduisez la sélection ou augmentez la limite\"\nerror.notarget = \"Bloc de cible pas trouvé. Augmentez la portée de l'outil avec //setrange si besoin\"\nerror.noselection = \"Aucune sélection trouvée - sélectionnez une zone d'abord\"\nerror.selectioninvalid = \"Sélection non valide ! Vérifiez que toutes les positions sont définies\"\nerror.nosession = \"Aucune session n'a été créée - vous n'avez probablement pas le droit d'utiliser {%0}\"\nerror.noclipboard = \"Aucun presse-papier trouvé - créez d'abord un presse-papier\"\nwarning.differentworld = \"[ATTENTION] Vous êtes en train de modifier un niveau dans lequel vous n'êtes pas\"\n; commands\ncommand.info.title = \"Information\"\ncommand.limit.current = \"Limite actuelle: {%0}\"\ncommand.limit.set = \"Limite de changement de block mis à {%0}\"\ncommand.setrange.current = \"Portée actuelle: {%0}\"\ncommand.setrange.set = \"Portée de l'outil mis à {%0}\"\ncommand.biomeinfo.attarget = \"Biome ciblé\"\ncommand.biomeinfo.atposition = \"Biome à la position position\"\ncommand.biomeinfo.result = \"{%0} biomes trouvés dans la sélection\"\ncommand.biomeinfo.result.line = \"ID: {%0} Nom: {%1}\"\ncommand.biomelist.title = \"Liste de biomes\"\ncommand.biomelist.result.line = \"ID: {%0} Nom: {%1}\"\ncommand.brushname.set = \"Nom de pinceau mis à \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Presse-papiers effacés\"\ncommand.flip.try = \"Tentative de retourner presse-papier de {%0}\"\ncommand.flip.success = \"Presse-papier retourné avec succès\"\ncommand.rotate.try = \"Tentative de rotation du presse-papier de {%0} degrés\"\ncommand.rotate.success = \"Rotation du presse-papier avec succès\"\ncommand.history.cleared = \"Historique effacé\"\ncommand.listchunks.found = \"{%0} chunks trouvés dans la sélection\"\ncommand.size = \"Taille de sélection\"\n; selection\nselection.pos1.set = \"Position 1 mis à X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Position 2 mis à X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Rien à annuler\"\nsession.undo.left = \"Il vous reste {%0} actions à annuler\"\nsession.redo.none = \"Rien à refaire\"\nsession.redo.left = \"Il vous reste {%0} actions à refaire\"\nsession.brush.added = \"{%0} ajouté à la session\"\nsession.brush.deleted = \"Effacé {%0} (UUID {%1})\"\nsession.brush.removed = \"Enlevé {%0} (UUID {%1})\"\nsession.language.set = \"Langue mise avec succès à {%0}\"\nsession.language.notfound = \"Langue {%0} pas trouvée, remise par défaut\"\n; task\ntask.copy.success = \"Copie asynchrone réussie, pris {%0}, copié {%1} blocs sur {%2}.\"\ntask.count.success = \"Analyse asynchrone réussie, pris {%0}\"\ntask.count.result = \"{%0} blocs trouvés sur un total de {%1} blocs\"\ntask.fill.success = \"Remplissage asynchrone réussi, pris {%0}, {%1} blocs sur {%2} changés.\"\ntask.replace.success = \"Remplacement asynchrone réussi, pris {%0}, {%1} blocs sur {%2} changés.\"\ntask.revert.undo.success = \"Annulation asynchrone réussie, pris {%0}, {%1} blocs sur {%2} changés.\"\ntask.revert.redo.success = \"Restauration asynchrone réussi, pris {%0}, {%1} blocs sur {%2} changés.\"\n; user interfaces\nconfirmation = \"Confirmation\"\nconfirmation.yes = \"Oui\"\nconfirmation.no = \"Non\"\n; wand tool\ntool.wand = \"Baguette\"\ntool.wand.lore.1 = \"Clic gauche sur un bloc pour définir position 1 d'une sélection\"\ntool.wand.lore.2 = \"Clic droit sur un bloc pour définir position 2 d'une sélection\"\ntool.wand.lore.3 = \"Utilisez //togglewand pour basculer sa fonctionnalité\"\ntool.wand.disabled = \"L'outil de baguette est desactivé. Utilisez //togglewand pour le réactiver\"\ntool.wand.setenabled = \"L'outil de baguette est maintenant {%0}!\"\n; debug tool\ntool.debug = \"Outil de debug\"\ntool.debug.lore.1 = \"Clic droit sur un bloc pour obtenir de l'information\"\ntool.debug.lore.2 = \"comme le nom et les valeurs de dégâts d'un bloc\"\ntool.debug.lore.3 = \"Utilisez //toggledebug pour basculer sa fonctionnalité\"\ntool.debug.disabled = \"L'outil de debug est désactivé. Utilisez //toggledebug Pour le réactiver\"\ntool.debug.setenabled = \"L'outil de débug est maintenant {%0}!\"\n; ui brush\nui.brush.title = \"Menu Pinceau\"\n\n; ui brush settings\nui.brush.settings.title = \"{%0} paramètres de pinceau\"\n; ui brush options\nui.brush.options.blocks = \"Blocs\"\nui.brush.options.blocks.placeholder = \"Exemple: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diamètre\"\nui.brush.options.width = \"Largeur\"\nui.brush.options.height = \"Elevé\"\nui.brush.options.depth = \"Profondeur\"\nui.brush.options.flags = \"Ajouter des drapeaux?\"\nui.brush.content = \"Menu principal du pinceau\"\nui.brush.create = \"Créer nouveau\"\nui.brush.edithand = \"Modifier pinceau en main\"\nui.brush.getsession = \"Recevoir pinceau de session\"\n; ui flags\nflags.keepexistingblocks = \"Conserver les blocs existants\"\nflags.keepair = \"Gardez l'air\"\nflags.hollow = \"Creux\"\nflags.hollowclosed = \"Creux avec bouts fermés\"\nflags.natural = \"Naturel\"\n\n; ui flood\nui.flood.title = \"Menu Flood\"\nui.flood.options.limit = \"Maximum de blocs\"\nui.flood.options.blocks = \"Blocs\"\nui.flood.options.blocks.placeholder = \"Les blocs doivent être séparés par des points-virgules\"\nui.flood.options.label.infoapply = \"Cliquez sur le bouton Envoyer pour appliquer les modifications\"\n; language\nui.language.title = \"Sélectionner langage\"\nui.language.label = \"Définir le langage pour la session. Si votre langage n'est pas disponible, vous pouvez traduire ce plugin sur GitHub!\"\nui.language.dropdown = \"Sélectionnez une langue\"\n"
  },
  {
    "path": "resources/lang/geo.ini",
    "content": "; Updated time : 30th 10 2020\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Georgian\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"ბრძანებები\"\nenabled = \"ჩართული\"\ndisabled = \"გამორთული\"\nconfirmation = \"დადასტურება\"\nconfirmation.yes = \"კი\"\nconfirmation.no = \"არა\"\n; errors\nerror = \"დაფიქსირდა შეცდომა\"\nerror.command-error = \"როგორც ჩანს აკლია არგუმენტი ან ბრძანება არასწორად იქნა გამოყენებული!\"\nerror.runingame = \"გთხოვთ გაუშვით ეს ბრძანება თამაშში!\"\nerror.limitexceeded = \"თქვენ ცდილობთ ერთდროულად ძალიან ბევრი ბლოკის რედაქტირებას. შეამცირეთ მონიშნული ან გაზარდეთ ლიმიტი\"\nerror.notarget = \"სამიზნე ბლოკი ვერ იქნა ნაპოვნი. საჭიროების შემთხვევაში გაზარდეთ ინსტრუმენტის დიაპაზონი //setrange პარამეტრით\"\nerror.noselection = \"მონიშნული ტერიტორია ვერ მოიძებნა - პირველ რიგში მონიშნეთ ტერიტორია\"\nerror.selectioninvalid = \"მონიშნული ტერიტორია არაა ვალიდური! შეამოწმეთ არის თუ არა ყველა პოზიცია მითითებული!\"\nerror.nosession = \"სესია არაა შექმნილი - სავარაუდოდ არაა გამოყენების ნება დართული {%0}\"\nerror.noclipboard = \"ბუფერი ვერ მოიძებნა - პირველ რიგში შექმენით ბუფერი\"\nwarning.differentworld = \"[გაფრთხილება] თქვენ არედაქტირებთ იმ დონეს, რომელშიც ამჟამად არ ხართ!\"\n; commands\ncommand.info.title = \"ინფორმაცია\"\ncommand.limit.current = \"მიმდინარე ლიმიტი: {%0}\"\ncommand.limit.set = \"ბლოკის ცვლილების ლიმიტი მითითებულია როგორც {%0}\"\ncommand.setrange.current = \"მიმდინარე დიაპაზონი: {%0}\"\ncommand.setrange.set = \"ინსტრუმენტის დიაპაზონი მითითებულია როგორც {%0}\"\ncommand.biomeinfo.attarget = \"გარემო სამიზნე ადგილზე\"\ncommand.biomeinfo.atposition = \"გარემო პოზიციაზე\"\ncommand.biomeinfo.result = \"{%0} გარემო იქნა ნაპოვნი მონიშნულში\"\ncommand.biomeinfo.result.line = \"იდენტიფიკატორი: {%0} დასახელება: {%1}\"\ncommand.biomelist.title = \"გარემოთა სია\"\ncommand.biomelist.result.line = \"იდენტიფიკატორი: {%0} დასახელება: {%1}\"\ncommand.brushname.set = \"ფუნჯის სახელი მითითებულია როგორც \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"ბუფერი გასუფთავებულია\"\ncommand.flip.try = \"სცადეთ ამოაბრუნოთ ბუფერი {%0}\"\ncommand.flip.success = \"წარმატებით ამობრუნდა ბუფერში\"\ncommand.rotate.try = \"სცადეთ გადაატრიალოთ ბუფერი {%0} გრადუსით\"\ncommand.rotate.success = \"წარმატებით გადატრიალდა ბუფერში\"\ncommand.history.cleared = \"ისტორია გასუფთავებულია\"\ncommand.listchunks.found = \"{%0} ნაწილი მოიძებნა მონიშნულში\"\ncommand.size = \"არჩეულის ზომა\"\n; selection\nselection.pos1.set = \"პოზიცია 1 მითითებულია X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"პოზიცია 2 მითითებულია X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"არაფერია გასაუქმებელი\"\nsession.undo.left = \"თქვენ გაქვთ {%0} გაუქმების ქმედება დარჩენილი\"\nsession.redo.none = \"არაფერია დასაბრუნებელი\"\nsession.redo.left = \"თქვენ გაქვთ {%0} დაბრუნების ქმედება დარჩენილი\"\nsession.brush.added = \"{%0} დაემატა სესიაში\"\nsession.brush.deleted = \"წაიშალა {%0} (UUID {%1})\"\nsession.brush.removed = \"ამოღებულია {%0} (UUID {%1})\"\nsession.language.set = \"წარმატებით შეიცვალა ენა {%0}-ზე\"\nsession.language.notfound = \"{%0} ენა ვერ მოიძებნა, იტვირთება სტანდარტული\"\n; task\ntask.copy.success = \"ასინქრონული კოპირება წარმატებით შესრულდა, დასჭირდა {%0}, დაკოპირდა {%1} ბლოკი {%2} ბლოკიდან.\"\ntask.count.success = \"ასინქრონული ანალიზი წარმატებით შესრულდა, დასჭირდა {%0}\"\ntask.count.result = \"{%0} ბლოკი იქნა ნაპოვნი ჯამური {%1} ბლოკიდან\"\ntask.fill.success = \"ასინქრონული შევსება წარმატებით შესრულდა, დასჭირდა {%0}, შეიცვალა {%1} ბლოკი {%2} ბლოკიდან.\"\ntask.replace.success = \"ასინქრონული ჩანაცვლება წარმატებით შესრულდა, დასჭირდა {%0}, შეიცვალა {%1} ბლოკი {%2} ბლოკიდან.\"\ntask.revert.undo.success = \"ასინქრონული გაუქმება წარმატებით შესრულდა, დასჭირდა {%0}, შეიცვალა {%1} ბლოკი {%2} ბლოკიდან.\"\ntask.revert.redo.success = \"ასინქრონული დაბრუნება წარმატებით შესრულდა, დასჭირდა {%0}, შეიცვალა {%1} ბლოკი {%2} ბლოკიდან.\"\n; flags\nflags.keepexistingblocks = \"არსებული ბლოკების შენარჩუნება\"\nflags.keepair = \"ჰაერის შენარჩუნება\"\nflags.hollow = \"ცარიელი\"\nflags.hollowclosed = \"ცარიელი დახურული ბოლოებით\"\nflags.natural = \"ბუნებრივი\"\n; tools\n; wand tool\ntool.wand = \"კვერთხი\"\ntool.wand.lore.1 = \"მარცხენა ღილაკით დააჭირეთ ბლოკს რათა მიუთითოთ პოზიცია 1 მონიშნულზე\"\ntool.wand.lore.2 = \"მარჯვენა ღილაკით დააჭირეთ ბლოკს რათა მიუთითოთ პოზიცია 2 მონიშნულზე\"\ntool.wand.lore.3 = \"გამოიყენეთ //togglewand მისი ფუნქციონირების გადასართავად\"\ntool.wand.disabled = \"კვერთხის ინსტრუმენტი გამორთულია. გამოიყენეთ //togglewand ხელახლა ჩასართავად\"\ntool.wand.setenabled = \"კვერთხის ინსტრუმენტი ახლა არის {%0}!\"\n; debug tool\ntool.debug = \"დებაგირების ინსტრუმენტი\"\ntool.debug.lore.1 = \"მარცხენა ღილაკით დააჭირეთ ბლოკს ინფორმაციის მისაღებად\"\ntool.debug.lore.2 = \"მაგალითად, ბლოკის სახელი და ზიანის მნიშვნელობები\"\ntool.debug.lore.3 = \"გამოიყენეთ //toggledebug მისი ფუნქციონირების გადასართავად\"\ntool.debug.disabled = \"დებაგირების ინსტრუმენტი გამორთულია. გამოიყენეთ //toggledebug ხელახლა ჩასართავად\"\ntool.debug.setenabled = \"დებაგირების ინსტრუმენტი ახლა არის {%0}!\"\n; WAILA tool (What am i looking at)\ntool.waila = \"Waila\"\ntool.waila.setenabled = \"Waila საშუალება ახლა არის {%0}!\"\n; flood tool\nui.flood.title = \"წყალდიდობის მენიუ\"\nui.flood.options.limit = \"მაქსიმალური ბლოკები\"\nui.flood.options.blocks = \"ბლოკები\"\nui.flood.options.blocks.placeholder = \"ბლოკები გამოყოფილია წერტილმძიმით\"\nui.flood.options.label.infoapply = \"გასაწევრიანებლად დააჭირეთ \"დადასტურების\" ღილაკს\"\n; brush tool\nui.brush.title = \"ფუნჯის მენიუ\"\nui.brush.content = \"ფუნჯის მთავარი მენიუ\"\nui.brush.create = \"ახლის შექმნა\"\nui.brush.getsession = \"მიიღეთ სესიის ფუნჯი\"\nui.brush.edithand = \"შეცვალეთ ფუნჯი\"\n; brush settings\nui.brush.settings.title = \"{%0} ფუნჯის პარამეტრები\"\n; brush options\nui.brush.options.blocks = \"ბლოკები\"\nui.brush.options.blocks.placeholder = \"მაგ: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"დიამეტრი\"\nui.brush.options.width = \"სიგანე\"\nui.brush.options.height = \"სიმაღლე\"\nui.brush.options.depth = \"სიღრმე\"\nui.brush.options.flags = \"დავამატოთ პარამეტრები?\"\n; language\nui.language.title = \"აირჩიეთ ენა\"\nui.language.label = \"აირჩიეთ სესიის ენა. თუ თქვენთვის სასურველი ენა მიუწვდომელია, შეგიძლიათ თარგმნოთ მოდული GitHub-ზე!\"\nui.language.dropdown = \"აირჩიეთ ენა\"\n"
  },
  {
    "path": "resources/lang/hin.ini",
    "content": "; Updated time : 4th 10 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Hindi\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"आदेश\"\nenabled = \"चालू\"\ndisabled = \"बंद\"\nconfirmation = \"पुष्टीकरण\"\nconfirmation.yes = \"हाँ\"\nconfirmation.no = \"नहीं\"\n; errors\nerror = \"कुछ गलत हो गया\"\nerror.command-error = \"लगता है अपने कोई आर्गुमेंट लगाना भूल गए या कमांड को ग़लत लगाया\"\nerror.runingame = \"कृपया इस कमांड को खेल में चलाएं\"\nerror.limitexceeded = \"आप कई सारे ब्लॉक एक साथ ही सम्पादित करने की कोशिश कर रहे हैं। चुने हुए ब्लॉक की संख्या घटाएं अथवा सीमा बढ़ाएं।\"\nerror.notarget = \"कोई भी लक्ष्य ब्लॉक मिला नहीं। आवश्यकता होने पर //setrange द्वारा उपकरण का विस्तार बढ़ाएं।\"\nerror.noselection = \"कोई चयनक्षेत्र मिला नहीं। पहले क्षेत्र चुनें।\"\nerror.selectioninvalid = \"यह चयनक्षेत्र मान्य नहीं है। सुनिश्चित करें कि सभी स्थिति निर्धारित किये जा चुके हैं।\"\nerror.nosession = \"कोई सत्र बना नहीं; शायद {%0} के प्रयोग की अनुमति नहीं है।\"\nerror.noclipboard = \"कोई क्लिपबोर्ड मिला नहीं; पहले एक क्लिपबोर्ड बनाएं।\"\nwarning.differentworld = \"[चेतावनी] आप ऐसे स्तर का संपादन कर रहे है जहाँ आप अभी हैं नहीं।\"\n; commands\ncommand.info.title = \"सूचना\"\ncommand.limit.current = \"मौजूदा विस्तार: {%0}\"\ncommand.limit.set = \"ब्लॉक बदलाव सीमा अब {%0}\"\ncommand.setrange.current = \"मौजूदा विस्तार: {%0}\"\ncommand.setrange.set = \"उपकरण विस्तार अब {%0}\"\ncommand.biomeinfo.attarget = \"बायोम लक्ष्य पर\"\ncommand.biomeinfo.atposition = \"बायोम स्थिति पर\"\ncommand.biomeinfo.result = \"चयन में {%0} बायोम मिले\"\ncommand.biomeinfo.result.line = \"ID: {%0} नाम: {%1}\"\ncommand.biomelist.title = \"बायोम सूचि\"\ncommand.biomelist.result.line = \"ID: {%0} नाम: {%1}\"\ncommand.brushname.set = \"ब्रश का नाम अब  \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"क्लिपबोर्ड साफ़ हो गए\"\ncommand.flip.try = \"क्लिपबोर्ड को {%0} पलटने की कोशिश\"\ncommand.flip.success = \"क्लिपबोर्ड पलट गया\"\ncommand.rotate.try = \"क्लिपबोर्ड को {%0} डिग्री घुमाने की कोशिश\"\ncommand.rotate.success = \"क्लिपबोर्ड घूम गया\"\ncommand.history.cleared = \"इतिहास साफ़ हो गया\"\ncommand.listchunks.found = \"चयन में {%0} खंड मिले\"\ncommand.size = \"चयन साइज़\"\n; selection\nselection.pos1.set = \"स्थिति 1 अब X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"स्थिति 2 अब X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"पूर्वस्थिति में लौटाने को कुछ है नहीं\"\nsession.undo.left = \"आपके पास {%0} पूर्ववत क्रिया बाकी हैं\"\nsession.redo.none = \"फिर से करने को कुछ है नहीं\"\nsession.redo.left = \"आपके पास {%0} पुनरावत क्रिया बाकी हैं\"\nsession.brush.added = \"{%0} को सत्र में जोड़ा\"\nsession.brush.deleted = \"{%0} (UUID {%1}) मिटा दिया\"\nsession.brush.removed = \"{%0} (UUID {%1}) हटा दिया\"\nsession.language.set = \"भाषा अब {%0}\"\nsession.language.notfound = \"{%0} भाषा मिला नहीं; डिफ़ॉल्ट भाषा लागू\"\n; task\ntask.copy.success = \"एसिन्क्रोनस कॉपी हो गया; {%0} लिए गए, {%2} में से {%1} ब्लॉक कॉपी हुए।\"\ntask.count.success = \"एसिन्क्रोनस विश्लेषण हो गया; {%0} लिए गए।\"\ntask.count.result = \"कुल {%1} ब्लॉक में {%0} ब्लॉक पाए गए\"\ntask.fill.success = \"एसिन्क्रोनस भराव हो गया; {%0} लिए गए, {%2} में से {%1} ब्लॉक बदले।\"\ntask.replace.success = \"एसिन्क्रोनस बदलाव हो गया; {%0} लिए गए, {%2} में से {%1} ब्लॉक बदले।\"\ntask.revert.undo.success = \"एसिन्क्रोनस पूर्ववत हो गया; {%0} लिए गए, {%2} में से {%1} ब्लॉक बदले।\"\ntask.revert.redo.success = \"एसिन्क्रोनस पुनरावत हो गया; {%0} लिए गए, {%2} में से {%1} ब्लॉक बदले।\"\n; flags\nflags.keepexistingblocks = \"मौजूदा ब्लॉक रखें\"\nflags.keepair = \"हवा रखें\"\nflags.hollow = \"खोखला\"\nflags.hollowclosed = \"दोनों तरफ से बंद खोखला\"\nflags.natural = \"प्राकृतिक\"\n; tools\n; wand tool\ntool.wand = \"वाण्ड\"\ntool.wand.lore.1 = \"चयन की स्थिति 1 निश्चित करने के लिए ब्लॉक पर बाईं ओर का बटन दबाएं\"\ntool.wand.lore.2 = \"चयन की स्थिति 2 निश्चित करने के लिए ब्लॉक पर दाईं ओर का बटन दबाएं\"\ntool.wand.lore.3 = \"कार्यात्मकता टॉगल करने को //togglewand का प्रयोग करें\"\ntool.wand.disabled = \"वाण्ड उपकरण चालू नहीं है। उसे चालू करने के लिए //togglewand का प्रयोग करें।\"\ntool.wand.setenabled = \"वाण्ड उपकरण अब {%0}\"\n; debug tool\ntool.debug = \"डिबग उपकरण\"\ntool.debug.lore.1 = \"जानकारी के लिए ब्लॉक पर बाईं ओर का बटन दबाएं\"\ntool.debug.lore.2 = \"ब्लॉक का नाम एवं क्षति मूल्य की तरह\"\ntool.debug.lore.3 = \" कार्यात्मकता टॉगल करने को //toggledebug का प्रयोग करें\"\ntool.debug.disabled = \"डिबग उपकरण चालू नहीं है। उसे चालू करने के लिए //toggledebug का प्रयोग करें।\"\ntool.debug.setenabled = \"डिबग उपकरण अब {%0}\"\n; flood tool\nui.flood.title = \"फ्लड मेनू\"\nui.flood.options.limit = \"अधिकतम ब्लॉक\"\nui.flood.options.blocks = \"ब्लॉक\"\nui.flood.options.blocks.placeholder = \"अल्पविराम द्वारा अलग किये गए ब्लॉक\"\nui.flood.options.label.infoapply = \"लागू करने के लिए 'सबमिट' बटन दबाएं\"\n; brush tool\nui.brush.title = \"ब्रश मेनू\"\nui.brush.content = \"ब्रश मुख्य मेनू\"\nui.brush.create = \"नया बनाएं\"\nui.brush.getsession = \"सत्र ब्रश लें\"\nui.brush.edithand = \"हाथ का ब्रश सम्पादित करें\"\n; brush settings\nui.brush.settings.title = \"{%0} ब्रश सेटिंग्स\"\n; brush options\nui.brush.options.blocks = \"ब्लॉक\"\nui.brush.options.blocks.placeholder = \"उदाहरण: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"व्यास\"\nui.brush.options.width = \"चौड़ाई\"\nui.brush.options.height = \"ऊंचाई\"\nui.brush.options.depth = \"गहराई\"\nui.brush.options.flags = \"झंडे जोड़ें?\"\n; language\nui.language.title = \"भाषा चुनें\"\nui.language.label = \"अपने सत्र के लिए भाषा चुनें। यदि आपकी भाषा उपलब्ध नहीं है, आप इस प्लग-इन का गिटहब पर अनुवाद कर सकते हैं।\"\nui.language.dropdown = \"भाषा चुनें\"\n"
  },
  {
    "path": "resources/lang/ind.ini",
    "content": "; Updated time : 05th 10 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Indonesian\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"perintah\"\nenabled = \"diaktifkan\"\ndisabled = \"dimatikan\"\nconfirmation = \"Konfirmasi\"\nconfirmation.yes = \"Ya\"\nconfirmation.no = \"Tidak\"\n; errors\nerror = \"Terjadi kesalahan\"\nerror.command-error = \"Sepertinya Anda melewatkan argumen atau menggunakan perintah yang salah!\"\nerror.runingame = \"Silakan jalankan perintah ini dalam game!\"\nerror.limitexceeded = \"Anda mencoba mengedit terlalu banyak blok sekaligus. Kurangi pilihan atau naikkan batas\"\nerror.notarget = \"Tidak ada blok target yang ditemukan. Tingkatkan rentang alat dengan //atur rentang jika perlu\"\nerror.noselection = \"Tidak ada pilihan yang ditemukan - pilih area terlebih dahulu\"\nerror.selectioninvalid = \"Pilihannya tidak valid! Periksa apakah semua posisi sudah ditentukan!\"\nerror.nosession = \"Tidak ada sesi yang dibuat - mungkin tidak ada izin untuk menggunakan {%0}\"\nerror.noclipboard = \"Papan klip tidak ditemukan - buat papan klip dulu\"\nwarning.differentworld = \"[PERINGATAN] Anda mengedit di level yang saat ini tidak Anda masuki!\"\n; commands\ncommand.info.title = \"Informasi\"\ncommand.limit.current = \"Batas saat ini: {%0}\"\ncommand.limit.set = \"Batas perubahan blok disetel ke {%0}\"\ncommand.setrange.current = \"Kisaran saat ini: {%0}\"\ncommand.setrange.set = \"Rentang alat diatur ke {%0}\"\ncommand.biomeinfo.attarget = \"Bioma target\"\ncommand.biomeinfo.atposition = \"Bioma di posisi\"\ncommand.biomeinfo.result = \"{%0} bioma ditemukan dalam seleksi\"\ncommand.biomeinfo.result.line = \"ID: {%0} Nama: {%1}\"\ncommand.biomelist.title = \"Daftar Biome\"\ncommand.biomelist.result.line = \"ID: {%0} Nama: {%1}\"\ncommand.brushname.set = \"Nama kuas ditetapkan ke \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Clipboard dihapus\"\ncommand.flip.try = \"Mencoba membalik clipboard dengan {%0}\"\ncommand.flip.success = \"Papan klip terbalik sukses\"\ncommand.rotate.try = \"Mencoba memutar clipboard dengan {%0} derajat\"\ncommand.rotate.success = \"Papan klip berhasil diputar\"\ncommand.history.cleared = \"Riwayat dihapus\"\ncommand.listchunks.found = \"{%0} potongan ditemukan dalam pilihan\"\ncommand.size = \"Ukuran pilihan\"\n; selection\nselection.pos1.set = \"Posisi 1 diatur ke X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Posisi 2 diatur ke X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Tidak ada yang dibatalkan\"\nsession.undo.left = \"Anda memiliki {%0} membatalkan tindakan yang tersisa\"\nsession.redo.none = \"Tidak ada yang harus diulang\"\nsession.redo.left = \"Anda memiliki {%0} ulangi tindakan yang tersisa\"\nsession.brush.added = \"Ditambahkan {%0} ke sesi\"\nsession.brush.deleted = \"Dihapus {%0} (UUID {%1})\"\nsession.brush.removed = \"Dihapus {%0} (UUID {%1})\"\nsession.language.set = \"Berhasil mengatur bahasa ke {%0}\"\nsession.language.notfound = \"Bahasa {%0} tidak ditemukan, mengatur ulang ke default\"\n; task\ntask.copy.success = \"Salin Async berhasil, ambil {%0}, salin {%1} blok dari {%2}.\"\ntask.count.success = \"Analisis async berhasil, ambil {%0}\"\ntask.count.result = \"{%0} blok ditemukan dalam total {%1} blok\"\ntask.fill.success = \"Async Fill berhasil, ambil {%0}, {%1} blok dari {%2} diubah.\"\ntask.replace.success = \"Async Replace berhasil, mengambil {%0}, {%1} blok dari {%2} diubah.\"\ntask.revert.undo.success = \"Async Undo berhasil, ambil {%0}, {%1} blok dari {%2} diubah.\"\ntask.revert.redo.success = \"Async Redo berhasil, ambil {%0}, {%1} blok dari {%2} diubah.\"\n; flags\nflags.keepexistingblocks = \"Simpan blok yang ada\"\nflags.keepair = \"Jaga udara\"\nflags.hollow = \"Hollow\"\nflags.hollowclosed = \"Berongga dengan ujung tertutup\"\nflags.natural = \"Alami\"\n; tools\n; wand tool\ntool.wand = \"Wand\"\ntool.wand.lore.1 = \"Klik kiri sebuah blok untuk mengatur posisi 1 dari suatu pilihan\"\ntool.wand.lore.2 = \"Klik kanan sebuah blok untuk mengatur posisi 2 dari suatu pilihan\"\ntool.wand.lore.3 = \"Gunakan //togglewand untuk mengganti fungsionalitasnya\"\ntool.wand.disabled = \"Alat tongkat dinonaktifkan. Gunakan //togglewand untuk mengaktifkannya kembali\"\ntool.wand.setenabled = \"Alat tongkat sekarang {%0}!\"\n; debug tool\ntool.debug = \"Alat Debug\"\ntool.debug.lore.1 = \"Klik kiri satu blok untuk mendapatkan informasi\"\ntool.debug.lore.2 = \"seperti nama dan nilai kerusakan suatu blok\"\ntool.debug.lore.3 = \"Gunakan //toggledebug untuk mengaktifkan fungsinya\"\ntool.debug.disabled = \"Alat debug dinonaktifkan. Gunakan //toggledebug untuk mengaktifkannya kembali\"\ntool.debug.setenabled = \"Alat debug sekarang {%0}!\"\n; flood tool\nui.flood.title = \"Menu banjir\"\nui.flood.options.limit = \"Blok maksimum\"\nui.flood.options.blocks = \"Blok\"\nui.flood.options.blocks.placeholder = \"Blok dipisahkan oleh titik koma\"\nui.flood.options.label.infoapply = \"Klik tombol\" Kirim \"untuk mendaftar\"\n; brush tool\nui.brush.title = \"Menu kuas\"\nui.brush.content = \"Menu utama sikat\"\nui.brush.create = \"Buat baru\"\nui.brush.getsession = \"Dapatkan sikat sesi\"\nui.brush.edithand = \"Edit kuas di tangan\"\n; brush settings\nui.brush.settings.title = \"{%0} pengaturan kuas\"\n; brush options\nui.brush.options.blocks = \"Blok\"\nui.brush.options.blocks.placeholder = \"Contoh: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diameter\"\nui.brush.options.width = \"Lebar\"\nui.brush.options.height = \"Tinggi\"\nui.brush.options.depth = \"Kedalaman\"\nui.brush.options.flags = \"Tambah bendera?\"\n; language\nui.language.title = \"Pilih bahasa\"\nui.language.label = \"Atur bahasa sesi Anda. Jika bahasa Anda tidak tersedia, Anda dapat menerjemahkan plugin di GitHub!\"\nui.language.dropdown = \"Pilih bahasa\"\n"
  },
  {
    "path": "resources/lang/ita.ini",
    "content": "; Updated time : 22th 10 2020\nlanguage.name = \"Italian\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"comandi\"\nenabled = \"abilitato\"\ndisabled = \"disabilitato\"\nconfirmation = \"Conferma\"\nconfirmation.yes = \"Sì\"\nconfirmation.no = \"No\"\n; errors\nerror = \"Qualcosa è andato storto\"\nerror.command-error = \"Sembra che ti manchi un argomento o che tu abbia usato il comando sbagliato!\"\nerror.runingame = \"Esegui questo comando nel gioco!\"\nerror.limitexceeded = \"Stai cercando di modificare troppi blocchi contemporaneamente. Riduci la selezione o aumenta il limite\"\nerror.notarget = \"Nessun obiettivo trovato. Aumenta l'intervallo degli strumenti //setrange se necessario\"\nerror.noselection = \"Nessuna selezione trovata - seleziona prima un'area\"\nerror.selectioninvalid = \"La selezione non è valida! Controlla se tutte le posizioni sono impostate!\"\nerror.nosession = \"Nessuna sessione è stata creata - probabilmente non hai il permesso di utilizzare {%0}\"\nerror.noclipboard = \"Nessuna clipboard trovata - prima crea una clipboard\"\nwarning.differentworld = \"[ATTENZIONE] Stai modificando in un mondo in cui al momento non ci sei!\"\n; commands\ncommand.info.title = \"Informazioni\"\ncommand.limit.current = \"Limite attuale: {%0}\"\ncommand.limit.set = \"Il limite di modifica del blocco è stato impostato a {%0}\"\ncommand.setrange.current = \"Raggio attuale {%0}\"\ncommand.setrange.set = \"Il raggio degli strumenti è impostato a {%0}\"\ncommand.biomeinfo.attarget = \"Bioma sull'obiettivo\"\ncommand.biomeinfo.atposition = \"Bioma in posizione\"\ncommand.biomeinfo.result = \"{%0} biomi trovati nella selezione\"\ncommand.biomeinfo.result.line = \"ID: {%0} Nome: {%1}\"\ncommand.biomelist.title = \"Lista biomi\"\ncommand.biomelist.result.line = \"ID: {%0} Nome: {%1}\"\ncommand.brushname.set = \"Nome pennello impostato a \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Clipboards pulite\"\ncommand.flip.try = \"Cercando di capovolgere la clipboard di {%0}\"\ncommand.flip.success = \"Clipboard capovolta con successo\"\ncommand.rotate.try = \"Cercando di ruotare la clipboard di {%0} gradi\"\ncommand.rotate.success = \"Clipboard ruotata con successo\"\ncommand.history.cleared = \"Cronologia cancellata\"\ncommand.listchunks.found = \"{%0} chunk trovati nella selezione\"\ncommand.size = \"Dimensione della selezione\"\n; selection\nselection.pos1.set = \"Posizione 1 impostata a X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Posizione 2 impostata a X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Niente da annullare\"\nsession.undo.left = \"Sono rimaste {%0} azioni annullabili\"\nsession.redo.none = \"Niente da ripetere\"\nsession.redo.left = \"Sono rimaste {%0} azioni ripetibili\"\nsession.brush.added = \"Aggiunto {%0} alla sessione\"\nsession.brush.deleted = \"Cancellato {%0} (UUID {%1})\"\nsession.brush.removed = \"Rimosso {%0} (UUID {%1})\"\nsession.language.set = \"Impostata con successo la lingua su {%0}\"\nsession.language.notfound = \"Lingua {%0} non trovata, ripristino a quella predefinita\"\n; task\ntask.copy.success = \"Copia asincrona riuscita, impiegando {%0}, copiati {%1} blocchi su {%2}.\"\ntask.count.success = \"Analisi asincrona riuscita, impiegando {%0}\"\ntask.count.result = \"{%0} blocchi trovati su un totale di {%1} blocchi\"\ntask.fill.success = \"Riempimento asincrono riuscito, impiegando {%0}, {%1} blocchi su {%2} modificati.\"\ntask.replace.success = \"Sostituzione asincrona riuscita, impiegando {%0}, {%1} blocchi su {%2} modificati.\"\ntask.revert.undo.success = \"Annullamento asincrono riuscito, impiegando {%0}, {%1} blocchi su {%2} modificati.\"\ntask.revert.redo.success = \"Ripetizione asincrona riuscita, impiegando {%0}, {%1} blocchi su {%2} modificati.\"\n; flags\nflags.keepexistingblocks = \"Mantieni i blocchi esistenti\"\nflags.keepair = \"Mantieni l'aria\"\nflags.hollow = \"Cavo\"\nflags.hollowclosed = \"Cavo con le estremità chiuse\"\nflags.natural = \"Naturale\"\n; tools\n; wand tool\ntool.wand = \"Bacchetta magica\"\ntool.wand.lore.1 = \"Clicca con il tasto sinistro su un blocco per impostare la posizione 1 di una selezione\"\ntool.wand.lore.2 = \"Clicca con il tasto destro su un blocco per impostare la posizione 2 di una selezione\"\ntool.wand.lore.3 = \"Usa //togglewand per attivare la sua funzionalità\"\ntool.wand.disabled = \"Lo strumento bacchetta magica è disabilitato. Usa //togglewand per riabilitarlo\"\ntool.wand.setenabled = \"Lo strumento bacchetta magica è ora {%0}!\"\n; debug tool\ntool.debug = \"Strumento di debug\"\ntool.debug.lore.1 = \"Clicca con il tasto sinistro su un blocco per ricevere informazioni\"\ntool.debug.lore.2 = \"come il nome e i valori di danno di un blocco\"\ntool.debug.lore.3 = \"Usa //toggledebug per attivare la sua funzionalità\"\ntool.debug.disabled = \"Lo strumento di debug è disabilitato. Usa //toggledebug per riabilitarlo\"\ntool.debug.setenabled = \"Lo strumento di debug è ora {%0}!\"\n; flood tool\nui.flood.title = \"Menu riempimento\"\nui.flood.options.limit = \"Numero massimo di blocchi\"\nui.flood.options.blocks = \"Blocchi\"\nui.flood.options.blocks.placeholder = \"I blocchi devono essere separati da punti e virgola\"\nui.flood.options.label.infoapply = \"Clicca il pulsante \"Invio\" per confermare\"\n; brush tool\nui.brush.title = \"Menu pennello\"\nui.brush.content = \"Menu pennello principale\"\nui.brush.create = \"Crea nuovo\"\nui.brush.getsession = \"Ottieni una sessione pennello\"\nui.brush.edithand = \"Modifica il pennello in mano\"\n; ui brush settings\nui.brush.settings.title = \"{%0} impostazioni pennello\"\n; ui brush options\nui.brush.options.blocks = \"Blocchi\"\nui.brush.options.blocks.placeholder = \"Esempio: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diametro\"\nui.brush.options.width = \"Larghezza\"\nui.brush.options.height = \"Altezza\"\nui.brush.options.depth = \"Profondità\"\nui.brush.options.flags = \"Aggiungere flag?\"\n; language\nui.language.title = \"Seleziona la lingua\"\nui.language.label = \"Imposta la lingua della tua sessione. Se la tua lingua non è disponibile, puoi tradurre il plugin su GitHub!\"\nui.language.dropdown = \"Seleziona una lingua\"\n"
  },
  {
    "path": "resources/lang/jpn.ini",
    "content": "; Updated time : 26th 07 2017\nlanguage.name = \"Japanese\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"問題が発生しました\"\nnoperm = \"このコマンドを実行する権限がありません\"\nruningame = \"ゲーム内でこのコマンドを実行してください！\"\ncommands = \"コマンド\"\n; user interfaces\nui.confirmation = \"確認\"\nui.confirmation.yes = \"はい\"\nui.confirmation.no = \"いいえ\"\n; ui brush\nui.brush.title = \"ブラシメニュー\"\n; ui brush select\nui.brush.select.title = \"ブラシの種類を選択\"\nui.brush.select.type.sphere = \"球\"\nui.brush.select.type.cylinder = \"円柱\"\nui.brush.select.type.cuboid = \"直方体\"\nui.brush.select.type.clipboard = \"クリップボード\"\n; ui brush settings\nui.brush.settings.title = \"{%0} ブラシ設定\"\n; ui brush options\nui.brush.options.blocks = \"ブロック\"\nui.brush.options.blocks.placeholder = \"例：1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"直径\"\nui.brush.options.width = \"横幅\"\nui.brush.options.height = \"縦幅\"\nui.brush.options.depth = \"深さ\"\nui.brush.options.flags = \"フラグを追加？\"\n; ui flags\nui.flags.keepexistingblocks = \"既存のブロックを維持\"\nui.flags.keepair = \"空気を維持\"\nui.flags.hollow = \"空洞\"\nui.flags.natural = \"自然\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"塗りつぶしメニュー\"\nui.flood.options.limit = \"最大ブロック数\"\nui.flood.options.blocks = \"ブロック\"\nui.flood.options.blocks.placeholder = \"セミコロンで区切られたブロック\"\nui.flood.options.label.infoapply = \"適用するには\"送信\"ボタンをクリックしてください\""
  },
  {
    "path": "resources/lang/kor.ini",
    "content": "; Updated time : 2nd 10 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Korean\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"명령어\"\nenabled = \"활성화됩니다\"\ndisabled = \"비활성화됩니다\"\nconfirmation = \"확인\"\nconfirmation.yes = \"예\"\nconfirmation.no = \"아니요\"\n; errors\nerror = \"오류가 발생했습니다\"\nerror.command-error = \"인수가 누락되었거나 명령어를 잘못 사용한 것 같습니다!\"\nerror.runingame = \"게임 내에서 이 명령어를 실행해주세요!\"\nerror.limitexceeded = \"한 번에 너무 많은 블록을 편집하려고 합니다. 선택 영역을 줄이거나 제한을 늘리세요\"\nerror.notarget = \"대상 블록이 없습니다. 필요한 경우 //setrange로 도구 범위를 늘리세요\"\nerror.noselection = \"선택 영역이 없습니다. 영역을 먼저 선택하세요\"\nerror.selectioninvalid = \"선택 영역이 올바르지 않습니다! 모든 위치가 설정되어 있는지 확인하세요!\"\nerror.nosession = \"세션이 만들어지지 않았습니다. {%0}을(를) 사용할 수 있는 권한이 없을 수 있습니다\"\nerror.noclipboard = \"클립보드가 없습니다. 먼저 클립보드를 만드세요\"\nwarning.differentworld = \"[경고] 사용자가 현재 있지 않은 레벨을 편집하고 있습니다!\"\n; commands\ncommand.info.title = \"정보\"\ncommand.limit.current = \"현재 제한: {%0}\"\ncommand.limit.set = \"블록 변경 제한이 {%0}(으)로 설정되었습니다\"\ncommand.setrange.current = \"현재 범위: {%0}\"\ncommand.setrange.set = \"도구 범위가 {%0}(으)로 설정되었습니다\"\ncommand.biomeinfo.attarget = \"대상 블록의 생물 군계\"\ncommand.biomeinfo.atposition = \"대상 위치의 생물 군계\"\ncommand.biomeinfo.result = \"선택 영역에서 생물 군계 {%0}개를 찾았습니다\"\ncommand.biomeinfo.result.line = \"ID: {%0} 이름: {%1}\"\ncommand.biomelist.title = \"생물 군계 목록\"\ncommand.biomelist.result.line = \"ID: {%0} 이름: {%1}\"\ncommand.brushname.set = \"브러시 이름이 \\\"{%0}\\\"(으)로 설정되었습니다\"\ncommand.clearclipboard.cleared = \"클립보드가 삭제되었습니다\"\ncommand.flip.try = \"클립보드 {%0} 뒤집기 시도 중\"\ncommand.flip.success = \"클립보드를 성공적으로 뒤집었습니다\"\ncommand.rotate.try = \"클립보드 {%0}도 회전 시도 중\"\ncommand.rotate.success = \"클립보드를 성공적으로 회전시켰습니다\"\ncommand.history.cleared = \"기록이 삭제되었습니다\"\ncommand.listchunks.found = \"선택 영역에서 청크 {%0}개를 찾았습니다\"\ncommand.size = \"선택 영역 크기\"\n; selection\nselection.pos1.set = \"위치 1이 X: {%0} Y: {%1} Z: {%2}(으)로 설정되었습니다\"\nselection.pos2.set = \"위치 2가 X: {%0} Y: {%1} Z: {%2}(으)로 설정되었습니다\"\n; session\nsession.undo.none = \"실행 취소할 작업이 없습니다\"\nsession.undo.left = \"실행 취소할 작업이 {%0}개 남았습니다\"\nsession.redo.none = \"다시 실행할 작업이 없습니다\"\nsession.redo.left = \"다시 실행할 작업이 {%0}개 남았습니다\"\nsession.brush.added = \"{%0}을(를) 세션에 추가했습니다\"\nsession.brush.deleted = \"{%0}(UUID {%1})을(를) 삭제했습니다\"\nsession.brush.removed = \"{%0}(UUID {%1})을(를) 제거했습니다\"\nsession.language.set = \"언어를 {%0}(으)로 성공적으로 설정했습니다\"\nsession.language.notfound = \"언어 {%0}을(를) 찾을 수 없기에 기본값으로 초기화합니다\"\n; task\ntask.copy.success = \"비동기 복사에 성공했습니다(걸린 시간 {%0}, 블록 {%2}개 중 {%1}개 복사).\"\ntask.count.success = \"비동기 분석에 성공했습니다(걸린 시간 {%0})\"\ntask.count.result = \"블록 총 {%1}개 중 블록 {%0}개를 찾았습니다\"\ntask.fill.success = \"비동기 채우기에 성공했습니다(걸린 시간 {%0}, 블록 {%2}개 중 {%1}개 변경).\"\ntask.replace.success = \"비동기 교체에 성공했습니다(걸린 시간 {%0}, 블록 {%2}개 중 {%1}개 변경).\"\ntask.revert.undo.success = \"비동기 실행 취소에 성공했습니다(걸린 시간 {%0}, 블록 {%2}개 중 {%1}개 변경).\"\ntask.revert.redo.success = \"비동기 다시 실행에 성공했습니다(걸린 시간 {%0}, 블록 {%2}개 중 {%1}개 변경).\"\n; flags\nflags.keepexistingblocks = \"기존 블록 유지\"\nflags.keepair = \"공기 유지\"\nflags.hollow = \"구멍\"\nflags.hollowclosed = \"닫힌 끝이 있는 구멍\"\nflags.natural = \"자연\"\n; tools\n; wand tool\ntool.wand = \"선택 도구\"\ntool.wand.lore.1 = \"블록을 왼쪽 버튼으로 클릭해 선택 영역의 위치 1을 설정합니다\"\ntool.wand.lore.2 = \"블록을 오른쪽 버튼으로 클릭해 선택 영역의 위치 2를 설정합니다\"\ntool.wand.lore.3 = \"//togglewand를 사용해 기능을 전환합니다\"\ntool.wand.disabled = \"선택 도구가 비활성화되어 있습니다. //togglewand를 사용해 다시 활성화하세요\"\ntool.wand.setenabled = \"선택 도구가 이제 {%0}!\"\n; debug tool\ntool.debug = \"디버그 도구\"\ntool.debug.lore.1 = \"블록을 왼쪽 버튼으로 클릭해 블록의 이름이나\"\ntool.debug.lore.2 = \"손상 정도 등의 정보를 가져옵니다\"\ntool.debug.lore.3 = \"//toggledebug를 사용해 기능을 전환합니다\"\ntool.debug.disabled = \"디버그 도구가 비활성화되어 있습니다. //toggledebug를 사용해 다시 활성화하세요\"\ntool.debug.setenabled = \"디버그 도구가 이제 {%0}!\"\n; flood tool\nui.flood.title = \"채우기 메뉴\"\nui.flood.options.limit = \"최대 블록 수\"\nui.flood.options.blocks = \"블록\"\nui.flood.options.blocks.placeholder = \"쌍반점으로 구분된 블록\"\nui.flood.options.label.infoapply = \"적용하려면 \"보내기\" 버튼을 클릭하세요\"\n; brush tool\nui.brush.title = \"브러시 메뉴\"\nui.brush.content = \"브러시 메인 메뉴\"\nui.brush.create = \"새로 만들기\"\nui.brush.getsession = \"세션 브러시 획득\"\nui.brush.edithand = \"손에 있는 브러시 편집\"\n; brush settings\nui.brush.settings.title = \"{%0} 브러시 설정\"\n; brush options\nui.brush.options.blocks = \"블록\"\nui.brush.options.blocks.placeholder = \"예: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"지름\"\nui.brush.options.width = \"너비\"\nui.brush.options.height = \"높이\"\nui.brush.options.depth = \"깊이\"\nui.brush.options.flags = \"플래그 추가?\"\n; language\nui.language.title = \"언어 선택\"\nui.language.label = \"세션의 언어를 선택하세요. 언어를 사용할 수 없는 경우, GitHub에서 플러그인을 번역하세요!\"\nui.language.dropdown = \"언어 선택\""
  },
  {
    "path": "resources/lang/lao.ini",
    "content": "; Updated time : 26th 09 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Lao\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"ຄຳສັ່ງ\"\nenabled = \"ເປີດໃຊ້ງານ\"\ndisabled = \"ປິດໃຊ້ງານ\"\nconfirmation = \"ການຢືນຢັນ\"\nconfirmation.yes = \"ແມ່ນ\"\nconfirmation.no = \"ບໍ່\"\n; errors\nerror = \"ມີຂໍ້ຜິດພາດເກີດຂື້ນ\"\nerror.command-error = \"ໂຕປ່ຽນຫຼືຄຳສັ່ງບໍ່ຖືກຕ້ອງ!\"\nerror.runingame = \"ກະລຸນາໃຊ້ຄຳສັ່ງນີ້ໃນເກມເທົ່ານັ້ນ!\"\nerror.limitexceeded = \"ທ່ານໄດ້ແກ້ໄຂບລັອກຈຳນວນຫຼາຍເກີນໄປ ຫຼຸດຈຳນວນຫຼືເພີ່ມຈຳນວນຈຳກັດ\"\nerror.notarget = \"ບໍ່ມີບລັອກເປົ້າໝາຍໃຫ້ເລືອກ. ເພີ່ມໄລຍະອຸປະກອນດ້ວຍຄຳສັ່ງ //setrange ຖ້າຕ້ອງການ\"\nerror.noselection = \"ບໍ່ມີການເລືອກ - ເລືອກພື້ນທີ່ກ່ອນ\"\nerror.selectioninvalid = \"ການເລືອກບໍ່ຖືກຕ້ອງ! ກວດສອບຕຳແໜ່ງທັງໝົດອີກເທື່ອໜຶ່ງ!\"\nerror.nosession = \"ບໍ່ມີເຊສຊັ່ນສ້າງຂຶ້ນ - ອາດເປັນເພາະບໍ່ມີສິດນຳໃຊ້ {%0}\"\nerror.noclipboard = \"ບໍ່ມີຄລິບບອດ - ສ້າງຄລິບບອດກ່ອນ\"\nwarning.differentworld = \"[ຄຳເຕືອນ] ທ່ານແກ້ໄຂເລເວລທ່ານບໍ່ໄດ້ຢູ່!\"\n; commands\ncommand.info.title = \"ຂໍ້ມູນ\"\ncommand.limit.current = \"ຈຳນວນຈຳກັດປະຈຸບັນ: {%0}\"\ncommand.limit.set = \"ຈຳນວນຈຳກັດໃນການແກ້ໄຂບລັອກຖືກຕັ້ງເປັນ {%0}\"\ncommand.setrange.current = \"ໄລຍະປັດຈຸບັນ: {%0}\"\ncommand.setrange.set = \"ໄລຍະອຸປະກອນຖືກຕັ້ງເປັນ {%0}\"\ncommand.biomeinfo.attarget = \"Biome ທີ່ເປົ້າໝາຍ\"\ncommand.biomeinfo.atposition = \"Biome ທີ່ຕຳແໜ່ງ\"\ncommand.biomeinfo.result = \"ພົບ {%0} biomes ໃນການເລຶອກ\"\ncommand.biomeinfo.result.line = \"ໄອດີ: {%0} ຊື່: {%1}\"\ncommand.biomelist.title = \"ລາຍຈຳນວນຂອງ Biome\"\ncommand.biomelist.result.line = \"ໄອດີ: {%0} ຊື່: {%1}\"\ncommand.brushname.set = \"ຊື່ຖືກປ່ຽນເປັນ \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"ຄລິບບອດຖືກລົບລ້າງ\"\ncommand.flip.try = \"ພະຍາຍາມທີ່ຈະພິກຄລິບບອດໂດຍ {%0}\"\ncommand.flip.success = \"ຄລິບບອດຖືກພິກຮຽບຮ້ອຍ\"\ncommand.rotate.try = \"ພະຍາຍາມທີ່ຈະພິກຄລິບບອດ {%0} ອົງສາ\"\ncommand.rotate.success = \"ຄລິບບອດຖືກໝຸນຮຽບຮ້ອຍແລ້ວ\"\ncommand.history.cleared = \"ປະຫວັດຖືກລົບລ້າງແລ້ວ\"\ncommand.listchunks.found = \"ພົບ {%0} chunks ໃນການເລືອກ\"\ncommand.size = \"ຂະໜາດການເລືອກ\"\n; selection\nselection.pos1.set = \"ຕຳແໜ່ງທີ່ 1 ຕັ້ງເປັນ X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"ຕຳແໜ່ງທີ່ 2 ຕັ້ງເປັນ X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"ຍ້ອນກັບບໍ່ໄດ້\"\nsession.undo.left = \"ທ່ານມີຄຳສັ່ງຍ້ອນກັບເຫຼືອ {%0} ເທື່ອ\"\nsession.redo.none = \"ບໍ່ມີຫຍັງໃໝ່ໃຫ້ເຮັດ\"\nsession.redo.left = \"ທ່ານມີຄຳສັ່ງໃໝ່ໃຫ້ເຮັດ {%0}\"\nsession.brush.added = \"ເພີ່ມ {%0} ເຂົ້າເຊສຊັ້ນ\"\nsession.brush.deleted = \"ລົບ {%0} (UUID {%1})\"\nsession.brush.removed = \"ນຳອອກ {%0} (UUID {%1})\"\nsession.language.set = \"ປ່ຽນພາສາເປັນ {%0} ຮຽບຮ້ອຍ\"\nsession.language.notfound = \"ບໍ່ພົບພາສາ {%0} ປັບເປັນຄ່າເລີ່ມຕົ້ນ\"\n; task\ntask.copy.success = \"ຄັດລອກສຳເລັດ, ໃຊ້ເວລາ {%0}, ຄັດລອກ {%1} ບລັອກຈາກທັງໝົດ {%2}\"\ntask.count.success = \"ວິເຄາະສຳເລັດ, ໃຊ້ເວລາ {%0}\"\ntask.count.result = \"ພົບ {%0} ບລັອກທັງໝົດ {%1} ບລັອກ\"\ntask.fill.success = \"ເຕີມເຕັມສຳເລັດ, ໃຊ້ເວລາ {%0}, ປ່ຽນ {%1} ບລັອກຈາກທັງໝົດ {%2}\"\ntask.replace.success = \"ວາງທັບສຳເລັດ ໃຊ້ເວລາ {%0}, ປ່ຽນ {%1} ບລັອກຈາກທັງໝົດ {%2}\"\ntask.revert.undo.success = \"ຍ້ອນກັບສຳເລັດ, ໃຊ້ເວລາ {%0}, ປ່ຽນ {%1} ບລັອກຈາກທັງໝົດ {%2}\"\ntask.revert.redo.success = \"ເຮັດໃໝ່ສຳເລັດ, ໃຊ້ເວລາ {%0}, ປ່ຽນ {%1} ບລັອກຈາກທັງໝົດ {%2}\"\n; flags\nflags.keepexistingblocks = \"ເກັບບລັອກທີ່ມີຢູ່ສຳເລັດ\"\nflags.keepair = \"ເກັບອາກາດ\"\nflags.hollow = \"ໂພງ\"\nflags.hollowclosed = \"ໂພງທີ່ມີທາງອອກປິດ\"\nflags.natural = \"ຕາມທຳມະຊາດ\"\n; tools\n; wand tool\ntool.wand = \"ຄະທາ\"\ntool.wand.lore.1 = \"ຄິກຊ້າຍທີ່ບລັອກເພື່ອຕັ້ງຕຳແໜ່ງ 1 ຂອງການເລືອກ\"\ntool.wand.lore.2 = \"ຄິກຂວາທີ່ບລັອກເພື່ອຕັ້ງຕຳແໜ່ງ 2 ຂອງການເລືອກ\"\ntool.wand.lore.3 = \"ໃຊ້ຄຳສັ່ງ //togglewand ເພື່ອສະຫຼັບການເຮັດວຽກຂອງຄະທາ\"\ntool.wand.disabled = \"ຄະທາຖືກປິດໃຊ້ງານ ໃຊ້ຄຳສັ່ງ //togglewand ເພື່ອເປີດໃຊ້ງານ\"\ntool.wand.setenabled = \"ຄະທາໄດ້ຖືກ {%0}!\"\n; debug tool\ntool.debug = \"ເຄື່ອງມື Debug\"\ntool.debug.lore.1 = \"ຄລິກຊ້າຍທີ່ບລັອກເພື່ອເບິ່ງຂໍ້ມູນ\"\ntool.debug.lore.2 = \"ເຊັ່ນເບິ່ງຊື່ຫຼືຄ່າຄວາມເສຍຫາຍຂອງບລັອກ\"\ntool.debug.lore.3 = \"ໃຊ້ຄຳສັ່ງ //toggledebug ເພື່ອສະຫຼັບການເຮັດວຽກຂອງຄະທາ\"\ntool.debug.disabled = \"ເຄື່ອງມື Debug ຖືກປິດໃຊ້ງານ ໃຊ້ຄຳສັ່ງ //toggledebug ເພື່ອເປີດໃຊ້ງານ\"\ntool.debug.setenabled = \"ເຄື່ອງ Debug ຖືກ {%0}!\"\n; flood tool\nui.flood.title = \"ເມນູ Flood\"\nui.flood.options.limit = \"ຈຳນວນບລັອກທີ່ຫຼາຍທີ່ສຸດ\"\nui.flood.options.blocks = \"ບລັອກ\"\nui.flood.options.blocks.placeholder = \"ບລັກທີ່ແຍກດ້ວຍ ;\"\nui.flood.options.label.infoapply = \"ກົດປຸ່ມ \"Submit\" ເພື່ອນຳມາໃຊ້\"\n; brush tool\nui.brush.title = \"ເມນູແປງ\"\nui.brush.content = \"ເມນູແປງຫຼັກ\"\nui.brush.create = \"ສ້າງໃໝ່\"\nui.brush.getsession = \"ເອີ້ນເຊສຊັ້ນແປງ\"\nui.brush.edithand = \"ແກ້ໄຊແປງໃນມື\"\n; brush settings\nui.brush.settings.title = \"ການຕັ້ງຄ່າແປງ {%0}\"\n; brush options\nui.brush.options.blocks = \"ບລັອກ\"\nui.brush.options.blocks.placeholder = \"ຕົວຢ່າງ: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"ເສັ້ນຜ່າໃຈກາງ\"\nui.brush.options.width = \"ກ້ວາງ\"\nui.brush.options.height = \"ສູງ\"\nui.brush.options.depth = \"ເລິກ\"\nui.brush.options.flags = \"ເພີ່ມຕົວເລືອກ?\"\n; language\nui.language.title = \"ເລືອກພາສາ\"\nui.language.label = \"ຕັ້ງຄ່າພາສາຂອງເຊສຊັ້ນທ່ານ ຖ້າບໍ່ມີພາສາຂອງທ່ານ ທ່ານສາມາດຊ່ວຍແປງປລັກອິນທີ່ GitHub!\"\nui.language.dropdown = \"ເລືອກພາສາ\"\n"
  },
  {
    "path": "resources/lang/lit.ini",
    "content": "; Updated time : 29th 10 2018\nlanguage.name = \"Lithuanian\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"Kažkas nutiko klaidingai\"\nnoperm = \"Jūs neturite leidimo paleisti šią komandą\"\nruningame = \"Prašau paleisti šią komandą žaidime!\"\ncommands = \"komandos\"\n; user interfaces\nui.confirmation = \"Patvirtinimas\"\nui.confirmation.yes = \"Taip\"\nui.confirmation.no = \"Ne\"\n; ui brush\nui.brush.title = \"Teptuko meniu\"\n; ui brush select\nui.brush.select.title = \"Pasirinkite teptuko tipą\"\nui.brush.select.type.sphere = \"Sfera\"\nui.brush.select.type.cylinder = \"Cilindras\"\nui.brush.select.type.cuboid = \"Kuboidas\"\nui.brush.select.type.clipboard = \"Iškarpinė\"\n; ui brush settings\nui.brush.settings.title = \"{%0} teptuko nustatymai\"\n; ui brush options\nui.brush.options.blocks = \"Blokai\"\nui.brush.options.blocks.placeholder = \"Pavyzdys: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diametras\"\nui.brush.options.width = \"Plotis\"\nui.brush.options.height = \"Aukštis\"\nui.brush.options.depth = \"Gylis\"\nui.brush.options.flags = \"Dėti vėliavėles?\"\n; ui flags\nui.flags.keepexistingblocks = \"Laikyti esamus blokus\"\nui.flags.keepair = \"Laikyti orą\"\nui.flags.hollow = \"Tuščiaviduris\"\nui.flags.natural = \"Natūralus\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"Užpildymo meniu\"\nui.flood.options.limit = \"Maximalūs blokai\"\nui.flood.options.blocks = \"Blokai\"\nui.flood.options.blocks.placeholder = \"Blokai atskirti kabliataškiais\"\nui.flood.options.label.infoapply = \"Paspauskite \"Submit\" mygtukas pakeisti\"\n"
  },
  {
    "path": "resources/lang/mar.ini",
    "content": "; Updated time : 20th 10 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Marathi\"\n; general\ndivider = \"======================================== \"\nspacer = \" -=+=- {%0} -=+=-\"\ncommands = \"आदेश\"\nenabled = \"कार्यान्वित केले\"\ndisabled = \"निष्क्रिय केले\"\nconfirmation = \"पुष्टीकरण करा\"\nconfirmation.yes = \"होय\"\nconfirmation.no = \"नाही\"\n; errors\nerror = \"एक त्रुटी आली\"\nerror.command-error = \"कदाचित आपण एक मापदंड (parameter) गमावत आहात किंवा चुकीची कमांड वापरली आहे!\"\nerror.runingame = \"कृपया ही आज्ञा खेळ चालू असताना चालवा!\"\nerror.limitexceeded = \"आपण एकाच वेळी अनेक ब्लॉक संपादित करण्याचा प्रयत्न करीत आहात. कमी ब्लॉक निवडा किंवा मर्यादा वाढवा\"\nerror.notarget = \"लक्ष्य ब्लॉक आढळला नाही. आवश्यक असल्यास //setrange वापरुन टूलचा पल्ला (range) वाढवा\"\nerror.noselection = \"कोणतीही निवड आढळली नाही - प्रथम एक क्षेत्र निवडा\"\nerror.selectioninvalid = \"निवड वैध नाही! सर्व जागा सेट केल्या आहेत का, ते तपासा!\"\nerror.nosession = \"सत्र (सेशन) तयार केले नाही - कदाचित {%0} वापरण्याची परवानगी नाही\"\nerror.noclipboard = \"कोणताही क्लिपबोर्ड सापडला नाही - प्रथम एक क्लिपबोर्ड तयार करा\"\nwarning.differentworld = \"[चेतावणी] आपण सध्या ज्या पातळीवर नाही, त्या पातळीवर आपण संपादन करीत आहात!\"\n; commands\ncommand.info.title = \"माहिती\"\ncommand.limit.current = \"वर्तमान मर्यादा: {%0}\"\ncommand.limit.set = \"ब्लॉक बदल मर्यादा {%0} इतकी सेट केली आहे\"\ncommand.setrange.current = \"वर्तमान पल्ला (रेंज): {%0}\"\ncommand.setrange.set = \"टुल रेंज {%0} इतकी सेट केली आहे\"\ncommand.biomeinfo.attarget = \"बायोम निशाण्यावर आहे\"\ncommand.biomeinfo.atposition = \"बायोम ठिकाणावर आहे\"\ncommand.biomeinfo.result = \"निवडीत {%0} बायोम सापडले\"\ncommand.biomeinfo.result.line = \"ओळख: {%0} नाव: {%1}\"\ncommand.biomelist.title = \"बायोम यादी\"\ncommand.biomelist.result.line = \"ओळख: {%0} नाव: {%1}\"\ncommand.brushname.set = \"ब्रश नाव सेट केले आहे \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"क्लिपबोर्ड मोकळे केले\"\ncommand.flip.try = \"{%0} द्वारा क्लिपबोर्ड फ्लिप करण्याचा प्रयत्न करीत आहे\"\ncommand.flip.success = \"क्लिपबोर्ड यशस्वीरित्या फ्लिप झाला\"\ncommand.rotate.try = \"{%0} अंशांनी क्लिपबोर्ड फिरवण्याचा प्रयत्न करीत आहे\"\ncommand.rotate.success = \"क्लिपबोर्ड यशस्वीरित्या फिरविला\"\ncommand.history.cleared = \"इतिहास पुसला\"\ncommand.listchunks.found = \"निवडीत {%0} तुकडे सापडले\"\ncommand.size = \"निवड आकार\"\n; selection\nselection.pos1.set = \"जागा 1 ला X: {%0} Y: {%1} Z: {%2} वर सेट केले\"\nselection.pos2.set = \"जागा 2 ला X: {%0} Y: {%1} Z: {%2} वर सेट केले\"\n; session\nsession.undo.none = \"पूर्ववत करण्यासाठी काहीही नाही\"\nsession.undo.left = \"आपल्याकडे {%0} पूर्ववत क्रिया बाकी आहे\"\nsession.redo.none = \"पुन्हा करण्यासारखे काही नाही\"\nsession.redo.left = \"आपल्याकडे {%0} पुन्हा करण्याच्या क्रिया बाकी आहे\"\nsession.brush.added = \"सत्रामध्ये {%0} जोडले\"\nsession.brush.deleted = \"{%0} हटविले (UUID {%1})\"\nsession.brush.removed = \"{%0} काढून टाकले (UUID {%1})\"\nsession.language.set = \"{%0} भाषा यशस्वीरित्या सेट केली\"\nsession.language.notfound = \"{%0} भाषा आढळली नाही, म्हणून मुळ भाषा सेट करत आहोत\"\n; task\ntask.copy.success = \"एसिंक कॉपी यशस्वी, {%0} घेतली, {%2} पैकी {%1} ब्लॉक कॉपी केले.\"\ntask.count.success = \"एसिंकचे विश्लेषण यशस्वी, {%0} घेतले\"\ntask.count.result = \"एकूण {%1} ब्लॉक्समध्ये {%0} ब्लॉक सापडले\"\ntask.fill.success = \"एसिंक भरणे यशस्वी, {%0} घेतले, {%2} पैकी {%1} ब्लॉक बदलले.\"\ntask.replace.success = \"एसिंक बदलणे यशस्वी, {%0} घेतले, {%2} पैकी {%1} ब्लॉक बदलले\"\ntask.revert.undo.success = \"एसिंक यशस्वीरित्या पूर्ववत (undo) केले, {%0} घेतले, {%2} पैकी {%1} ब्लॉक बदलले\"\ntask.revert.redo.success = \"एसिंक यशस्वीरित्या पुन्हा (redo) केले, {%0} घेतले, {%2} पैकी {%1} ब्लॉक बदलले\"\n; flags\nflags.keepexistingblocks = \"विद्यमान ब्लॉक्स ठेवा\"\nflags.keepair = \"हवा ठेवा\"\nflags.hollow = \"पोकळ\"\nflags.hollowclosed = \"बंद टोकांसह पोकळ\"\nflags.natural = \"नैसर्गिक\"\n; tools\n; wand tool\ntool.wand = \"कांडी\"\ntool.wand.lore.1 = \"निवडीची स्थिती 1 सेट करण्यासाठी ब्लॉकवर डावे क्लिक करा\"\ntool.wand.lore.2 = \"निवडीची स्थिती 2 सेट करण्यासाठी ब्लॉकवर उजवे क्लिक करा\"\ntool.wand.lore.3 = \"कार्यक्षमता बदलण्यासाठी //togglewand वापरा\"\ntool.wand.disabled = \"कांडीचे साधन (wand tool) निष्क्रिय केले. ते पुन्हा कार्यान्वित करण्यासाठी //togglewand वापरा\"\ntool.wand.setenabled = \"कांडीचे साधन {%0}!\"\n; debug tool\ntool.debug = \"डीबग साधन\"\ntool.debug.lore.1 = \"माहिती मिळविण्यासाठी ब्लॉक वर डावे क्लिक करा\"\ntool.debug.lore.2 = \"ब्लॉकचे नाव आणि नुकसान मूल्ये यासारख्या\"\ntool.debug.lore.3 = \"कार्यक्षमता बदलण्यासाठी //toggledebug वापरा\"\ntool.debug.disabled = \"डीबग साधन निष्क्रिय केले आहे. ते पुन्हा सक्रिय करण्यासाठी //toggledebug वापरा\"\ntool.debug.setenabled = \"डीबग साधन {%0}!\"\n; flood tool\nui.flood.title = \"पूर मेनू\"\nui.flood.options.limit = \"जास्तीत जास्त ब्लॉक्स\"\nui.flood.options.blocks = \"ब्लॉक्स\"\nui.flood.options.blocks.placeholder = \"अर्धविरामांनी विभक्त (वेगळे) केलेले ब्लॉक्स\"\nui.flood.options.label.infoapply = \"लागू करण्यासाठी \"सबमिट\" बटणावर क्लिक करा\"\n; brush tool\nui.brush.title = \"ब्रश मेन्यू\"\nui.brush.content = \"मुख्य ब्रश मेन्यू\"\nui.brush.create = \"नवीन तयार करा\"\nui.brush.getsession = \"सेशन ब्रश मिळवा\"\nui.brush.edithand = \"हातातील ब्रश संपादित करा\"\n; brush settings\nui.brush.settings.title = \"{%0} ब्रश सेटिंग्ज\"\n; brush options\nui.brush.options.blocks = \"ब्लॉक्स\"\nui.brush.options.blocks.placeholder = \"उदाहरण: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"व्यास\"\nui.brush.options.width = \"रुंदी\"\nui.brush.options.height = \"ऊंची\"\nui.brush.options.depth = \"खोली\"\nui.brush.options.flags = \"चिन्ह जोडा?\"\n; language\nui.language.title = \"भाषा निवडा\"\nui.language.label = \"आपल्या सत्राची भाषा सेट करा. जर आपली भाषा उपलब्ध नसेल तर आपण GitHub वर प्लगइन भाषांतरित करू शकता!\"\nui.language.dropdown = \"एक भाषा निवडा\""
  },
  {
    "path": "resources/lang/mas.ini",
    "content": "; Updated time : 29th 10 2018\nlanguage.name = \"Masai\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"Sesuatu telah salah.\"\nnoperm = \"Kamu tidak ada hak untuk jalankan arahan ini.\"\nruningame = \"Sila jalankan arahan ini dalam permainan!\"\ncommands = \"Arahan\"\n; user interfaces\nui.confirmation = \"Pengesahan\"\nui.confirmation.yes = \"Ya\"\nui.confirmation.no = \"Tidak\"\n; ui brush\nui.brush.title = \"Menu berus\"\n; ui brush select\nui.brush.select.title = \"Pilih sejenis berus\"\nui.brush.select.type.sphere = \"Sfera\"\nui.brush.select.type.cylinder = \"Silinder\"\nui.brush.select.type.cuboid = \"Cuboid\"\nui.brush.select.type.clipboard = \"Papan Klip\"\n; ui brush settings\nui.brush.settings.title = \"{%0} Penetapan berus\"\n; ui brush options\nui.brush.options.blocks = \"Blok\"\nui.brush.options.blocks.placeholder = \"Contohnya: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diameter\"\nui.brush.options.width = \"Lebar\"\nui.brush.options.height = \"Ketinggian\"\nui.brush.options.depth = \"Kedalaman\"\nui.brush.options.flags = \"Tambah bendera?\"\n; ui flags\nui.flags.keepexistingblocks = \"Kekal blok yang sedia ada\"\nui.flags.keepair = \"Kekal udara\"\nui.flags.hollow = \"Kosong\"\nui.flags.natural = \"Semula jadi\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"Isi menu\"\nui.flood.options.limit = \"Maksimum blok\"\nui.flood.options.blocks = \"Blok\"\nui.flood.options.blocks.placeholder = \"Blok dipisahkan oleh titik koma\"\nui.flood.options.label.infoapply = \"Klik butang \"Hantar\" untuk memohon\"\n"
  },
  {
    "path": "resources/lang/nld.ini",
    "content": "; Updated time : 7th 11 2019\nlanguage.name = \"Dutch\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"Opdrachten\"\nenabled = \"ingeschakeld\"\ndisabled = \"uitgeschakeld\"\nconfirmation = \"Bevestiging\"\nconfirmation.yes = \"Ja\"\nconfirmation.no = \"Nee\"\n; errors\nerror = \"Er is iets fout gegaan\"\nerror.command-error = \"Het lijkt erop dat je een argument mist of de opdracht verkeerd hebt gebruikt!\"\nerror.runingame = \"Voer deze opdracht alstublieft in-game uit\"\nerror.limitexceeded = \"U probeert te veel blokken tegelijk te bewerken. Verklein de selectie of verhoog de limiet\"\nerror.notarget = \"Geen doelblok gevonden. Vergroot gereedschapsbereik met //setrange indien nodig\"\nerror.noselection = \"Geen selectie gevonden - selecteer eerst een gebied\"\nerror.selectioninvalid = \"De selectie is niet geldig! Controleer of alle posities zijn geselecteerd!\"\nerror.nosession = \"Er is geen sessie gemaakt - waarschijnlijk geen toestemming om {% 0} te gebruiken\"\nerror.noclipboard = \"Geen klembord gevonden - maak eerst een klembord\"\nwarning.differentworld = \"[WAARSCHUWING] Je bewerkt een wereld waar je momenteel niet in zit!\"\n; commands\ncommand.info.title = \"Informatie\"\ncommand.limit.current = \"Huidig limiet: {%0}\"\ncommand.limit.set = \"Limiet voor aantal wijzigingen van blok is ingesteld op {%0}\"\ncommand.setrange.current = \"Huidig bereik: {%0}\"\ncommand.setrange.set = \"Gereedschapsbereik is ingesteld op {%0}\"\ncommand.biomeinfo.attarget = \"Biome op doel\"\ncommand.biomeinfo.atposition = \"Biome op positie\"\ncommand.biomeinfo.result = \"{%0} biomen gevonden in selectie\"\ncommand.biomeinfo.result.line = \"ID: {%0} Naam: {%1}\"\ncommand.biomelist.title = \"Biome lijst\"\ncommand.biomelist.result.line = \"ID: {%0} Naam: {%1}\"\ncommand.brushname.set = \"Kwast naam ingesteld op \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Klemborden gewist\"\ncommand.flip.try = \"Klembord proberen te draaien met {%0}\"\ncommand.flip.success = \"Klembord succesvol gedraaid\"\ncommand.rotate.try = \"Probeeren het klembord met {%0} graden te draaien\"\ncommand.rotate.success = \"Klembord succesvol gedraaid\"\ncommand.history.cleared = \"Geschiedenis gewist\"\ncommand.listchunks.found = \"{%0} chunks in selectie gevonden\"\ncommand.size = \"Selectie grootte\"\n; selection\nselection.pos1.set = \"Positie 1 ingesteld op X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Positie 2 ingesteld op X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Niks om ongedaan te maken\"\nsession.undo.left = \"U kunt nog {%0} acties ongedaan maken\"\nsession.redo.none = \"Niets om opnieuw te doen\"\nsession.redo.left = \"U heeft nog {%0} opnieuw uit te voeren acties\"\nsession.brush.added = \"{%0} toegevoegd aan sessie\"\nsession.brush.deleted = \"Verwijderd {%0} (UUID {%1})\"\nsession.brush.removed = \"Verwijderd {%0} (UUID {%1})\"\nsession.language.set = \"Taal succesvol ingesteld op {%0}\"\nsession.language.notfound = \"Taal {%0} niet gevonden, gereset naar standaard\"\n; task\ntask.copy.success = \"Async Copy geslaagd, duurde {% 0}, kopieerde {% 1} blokken van {% 2}.\"\ntask.count.success = \"Async-analyse slaagde, duurde {% 0}\"\ntask.count.result = \"{% 0} blokken gevonden van in totaal {% 1} blokken\"\ntask.fill.success = \"Async Fill is geslaagd, duurde {%0}, {%1} blokken uit {%2} gewijzigd.\"\ntask.replace.success = \"Async vervangen geslaagd, duurde {%0}, {%1} blokken van {%2} gewijzigd.\"\ntask.revert.undo.success = \"Async Ongedaan maken geslaagd, duurde {%0}, {%1} blokken uit {%2} gewijzigd.\"\ntask.revert.redo.success = \"Async opnieuw doen is geslaagd, duurde {%0}, {%1} blokken uit {%2} gewijzigd.\"\n; flags\nflags.keepexistingblocks = \"Behoudt bestaande blokken\"\nflags.keepair = \"Behoudt lucht\"\nflags.hollow = \"Hol\"\nflags.hollowwclosed = \"Hol met gesloten einden\"\nflags.natural = \"Natuurlijk\"\n; tools\n; wand tool\ntool.wand = \"Toverstaf\"\ntool.wand.lore.1 = \"Klik met de linkermuisknop op een blok om de positie 1 van een selectie in te stellen\"\ntool.wand.lore.2 = \"Klik met de rechtermuisknop op een blok om de positie 2 van een selectie in te stellen\"\ntool.wand.lore.3 = \"Gebruik //togglewand om van functionaliteit te wisselen\"\ntool.wand.disabled = \"De toverstaf is uitgeschakeld. Gebruik //togglewand om het opnieuw in te schakelen\"\ntool.wand.setenabled = \"Het gereedschap Toverstaf is nu{ %0}!\"\n; debug tool\ntool.debug = \"Foutopsporing gereedschap\"\ntool.debug.lore.1 = \"Klik met de linkermuisknop op een blok om informatie te krijgen\"\ntool.debug.lore.2 = \"zoals de naam en schadewaarden van een blok\"\ntool.debug.lore.3 = \"Gebruik //toggledebug om van functionaliteit te wisselen\"\ntool.debug.disabled = \"Het foutopsporing gereedschap is uitgeschakeld. Gebruik //toggledebug om het opnieuw in te schakelen\"\ntool.debug.setenabled = \"Het foutopsporing gereedschap is nu {%0}!\"\n; flood tool\nui.flood.title = \"Opvullings menu\"\nui.flood.options.limit = \"Maximum aantal blokken\"\nui.flood.options.blocks = \"Blokken\"\nui.flood.options.blocks.placeholder = \"Blokken onderbroken door puntkomma\"\nui.flood.options.label.infoapply = \"Klik op de \"Submit\" knop om het op te sturen\"\n; brush tool\nui.brush.title = \"Kwast menu\"\nui.brush.content = \"Kwast hoofdmenu\"\nui.brush.create = \"Maak nieuw\"\nui.brush.getsession = \"Krijg sessie kwast\"\nui.brush.edithand = \"Verander kwast in hand\"\n; brush settings\nui.brush.settings.title = \"{%0} kwast instellingen\"\n; brush options\nui.brush.options.blocks = \"Blokken\"\nui.brush.options.blocks.placeholder = \"Bijvoorbeeld 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diameter\"\nui.brush.options.width = \"Breedte\"\nui.brush.options.height = \"Hoogte\"\nui.brush.options.depth = \"Diepte\"\nui.brush.options.flags = \"Opties toevoegen?\"\n; language\nui.language.title = \"Selecteer taal\"\nui.language.label = \"Stel de taal van je sessie in. Als jou taal niet beschikbaar is kan je de plug-in vertalen op GitHub!\"\nui.language.dropdown = \"Selecteer een taal\"\n"
  },
  {
    "path": "resources/lang/nor.ini",
    "content": "﻿; Updated time : 28th 10 2018\nlanguage.name = \"Norwegian\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"Noe gikk galt\"\nnoperm = \"Du har ikke rettigheter til å kjøre denne kommandoen\"\nruningame = \"Vennligst kjør denne kommandoen i spillet!\"\ncommands = \"commands\"\n; user interfaces\nui.confirmation = \"Bekreft\"\nui.confirmation.yes = \"Ja\"\nui.confirmation.no = \"Nei\"\n; ui brush\nui.brush.title = \"Pensel-meny\"\n; ui brush select\nui.brush.select.title = \"Velg en type pensel\"\nui.brush.select.type.sphere = \"Sfære\"\nui.brush.select.type.cylinder = \"Sylinder\"\nui.brush.select.type.cuboid = \"Kubeform\"\nui.brush.select.type.clipboard = \"Utklippstavle\"\n; ui brush settings\nui.brush.settings.title = \"{%0} pensel innstillinger\"\n; ui brush options\nui.brush.options.blocks = \"Blokker\"\nui.brush.options.blocks.placeholder = \"Eksempel: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diameter\"\nui.brush.options.width = \"Bredde\"\nui.brush.options.height = \"Høyde\"\nui.brush.options.depth = \"Dybde\"\nui.brush.options.flags = \"Legg til flagg?\"\n; ui flags\nui.flags.keepexistingblocks = \"Behold eksisterende blokker\"\nui.flags.keepair = \"Behold luft\"\nui.flags.hollow = \"Hul\"\nui.flags.natural = \"Naturlig\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"Flommeny\"\nui.flood.options.limit = \"Maximum blokker\"\nui.flood.options.blocks = \"Blokker\"\nui.flood.options.blocks.placeholder = \"Blokker separert av semikolon\"\nui.flood.options.label.infoapply = \"Klikk på \"Submit\"-knappen for å lagre\""
  },
  {
    "path": "resources/lang/pol.ini",
    "content": "; Updated time : 26th 07 2017\nlanguage.name = \"Polish\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"Coś poszło nie tak\"\nnoperm = \"Nie masz uprawnień do wykonania tego polecenia\"\nruningame = \"Proszę wykonać to polecenie w grze!\"\ncommands = \"Commands\"\n; user interfaces\nui.confirmation = \"Potwierdzenie\"\nui.confirmation.yes = \"Tak\"\nui.confirmation.no = \"Nie\"\n; ui brush\nui.brush.title = \"Menu pędzla\"\n; ui brush select\nui.brush.select.title = \"Wybierz rodzaj pędzla\"\nui.brush.select.type.sphere = \"Kula\"\nui.brush.select.type.cylinder = \"Cylinder\"\nui.brush.select.type.cuboid = \"Cuboid\"\nui.brush.select.type.clipboard = \"Schowek\"\n; ui brush settings\nui.brush.settings.title = \"{%0} ustawienia pędzla\"\n; ui brush options\nui.brush.options.blocks = \"Bloky\"\nui.brush.options.blocks.placeholder = \"Przykład: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Średnica\"\nui.brush.options.width = \"Szerokość\"\nui.brush.options.height = \"High\"\nui.brush.options.depth = \"Depth\"\nui.brush.options.flags = \"Dodaj flagi?\"\n; ui flags\nui.flags.keepexistingblocks = \"Zachowaj istniejące bloki\"\nui.flags.keepair = \"Zatrzymaj powietrze\"\nui.flags.hollow = \"Hollow\"\nui.flags.natural = \"Prírodné\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"Menu powodzi\"\nui.flood.options.limit = \"Maksymalne bloki\"\nui.flood.options.blocks = \"Bloki\"\nui.flood.options.blocks.placeholder = \"Bloki muszą być oddzielone średnikami\"\nui.flood.options.label.infoapply = \"Kliknij przycisk Wyślij, aby zastosować zmiany\"\n"
  },
  {
    "path": "resources/lang/por.ini",
    "content": "; Updated time : 26th 07 2017\nlanguage.name = \"Portuguese\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nnoperm = \"Você não tem permissão para executar este comando\"\nruningame = \"Por favor, execute este comando no jogo!\"\ncommands = \"comandos\"\nenabled = \"Ativado\"\ndisabled = \"Desativado\"\nconfirmation = \"Confirmação\"\nconfirmation.yes = \"Sim\"\nconfirmation.no = \"Não\"\n; errors\nerror = \"Algo deu errado\"\nerror.command-error = \"Parece que você esqueceu um argumento ou usou o comando errado!\"\nerror.runingame = \"Por favor, execute o comando dentro do jogo!\"\nerror.limitexceeded = \"Você está tentando editar vários blocos de uma vez. Reduza a quantidade selecionada ou aumente o limite\"\nerror.notarget = \"Nenhum bloco de destino foi encontrado. Aumente o alcance da ferramenta com //setrange se necessário\"\nerror.noselection = \"Nenhuma seleção encontrada - selecione uma área primeiro\"\nerror.selectioninvalid = \"A seleção não é válida! Verifique se todas as posições estão definidas!\"\nerror.nosession = \"Nenuma sessão foi criada - provavelmente você não tem permissão para usar {%0}\"\nerror.noclipboard = \"Nenhuma área de transferência encontrada - primeiro crie uma área de transferência\"\nwarning.differentworld = \"[AVISO] Você está editando em um nível no qual não está atualmente!\"\n; commands\ncommand.info.title = \"Informação\"\ncommand.limit.current = \"Limite atual: {%0}\"\ncommand.limit.set = \"O limite de alteração de bloco foi definido para {%0}\"\ncommand.setrange.current = \"Alcance atual: {%0}\"\ncommand.setrange.set = \"Alcance da ferramenta foi definida para {%0}\"\ncommand.biomeinfo.attarget = \"Bioma no alvo\"\ncommand.biomeinfo.atposition = \"Bioma na posição\"\ncommand.biomeinfo.result = \"{%0} biomas encontrados na seleção\"\ncommand.biomeinfo.result.line = \"ID: {%0} Nome: {%1}\"\ncommand.biomelist.title = \"Lista de biomas\"\ncommand.biomelist.result.line = \"ID: {%0} Nome: {%1}\"\ncommand.brushname.set = \"Nome do pincel definido como \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Área de transferência limpa\"\ncommand.flip.try = \"Tentando virar a área de transferência em {%0}\"\ncommand.flip.success = \"Área de transferência lançada com sucesso\"\ncommand.rotate.try = \"Tentando girar a área de transferência em {%0} graus\"\ncommand.rotate.success = \"Área de transferência girada com sucesso\"\ncommand.history.cleared = \"Histórico limpo\"\ncommand.listchunks.found = \"{%0} pedaços encontrados na seleção\"\ncommand.size = \"Tamanho da selação\"\n; selection\nselection.pos1.set = \"Posição 1 difinido em X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Posição 2 definido em X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Nada para desfazer\"\nsession.undo.left = \"Você tem {%0} ações para desfazer\"\nsession.redo.none = \"Nada para refazer\"\nsession.redo.left = \"Você tem  {%0} ações para refazer\"\nsession.brush.added = \"Adicionado {%0} na sessão\"\nsession.brush.deleted = \"Excluído {%0} (UUID {%1})\"\nsession.brush.removed = \"Removido {%0} (UUID {%1})\"\nsession.language.set = \"Definido com sucesso o idioma para {%0}\"\nsession.language.notfound = \"Idioma {%0} não encontrado, redefinido para o padrão\"\n; task\ntask.copy.success = \"Cópia assíncrona realizada com sucesso, levou {%0}, copiou {%1} blocos de um total de {%2}.\"\ntask.count.success = \"Análise assíncrona bem-sucedida, levou {%0}\"\ntask.count.result = \"{%0} blocos encontrado em um total de {%1} blocos\"\ntask.fill.success = \"Preenchimento assíncrono bem-sucedido, levou {%0}, {%1} blocos de um total de {%2} alterados.\"\ntask.replace.success = \"Substituição assíncrona bem-sucedida, levou {%0}, {%1} blocos de um total de {%2} alterados.\"\ntask.revert.undo.success = \"Desfeito assíncrono com êxito, levou {%0}, {%1} blocos de um total de {%2} alterados.\"\ntask.revert.redo.success = \"Refeito assíncrono com êxito, levou {%0}, {%1} blocos de um total de {%2} alterados.\"\n; flags\nflags.keepexistingblocks = \"Manter blocos existentes\"\nflags.keepair = \"Manter ar\"\nflags.hollow = \"Oco\"\nflags.hollowclosed = \"Oco com extremidades fechadas\"\nflags.natural = \"Natural\"\n; tools\n; wand tool\ntool.wand = \"Varinha\"\ntool.wand.lore.1 = \"Clique com o botão esquerdo do mouse em um bloco para definir a posição 1 de uma seleção\"\ntool.wand.lore.2 = \"Clique com o botão direito do mouse em um bloco para definir a posição 2 de uma seleção\"\ntool.wand.lore.3 = \"Utilize //togglewand para alternar sua funcionalidade\"\ntool.wand.disabled = \"A ferramenta da varinha está desativada. Utilize //togglewand para reativá-lo\"\ntool.wand.setenabled = \"A ferramenta da varinha está agora {%0}!\"\n; debug tool\ntool.debug = \"Ferramenta de Depuração\"\ntool.debug.lore.1 = \"Clique com o botão esquerdo no bloco para obter informação\"\ntool.debug.lore.2 = \"Como o nome e os valores do dano de um bloco\"\ntool.debug.lore.3 = \"Utilize //toggledebug para alternar sua funcionalidade\"\ntool.debug.disabled = \"A ferramenta de depuração está desabilitada. Utilize //toggledebug para habilitá-la\"\ntool.debug.setenabled = \"A ferramenta de depuração está agora {%0}!\"\n; ui flood\nui.flood.title = \"Menu de inundação\"\nui.flood.options.limit = \"Blocos máximos\"\nui.flood.options.blocks = \"Blocos\"\nui.flood.options.blocks.placeholder = \"Os blocos devem ser separados por ponto-e-vírgula\"\nui.flood.options.label.infoapply = \"Clique no botão Enviar para aplicar as alterações\"\n; brush tool\nui.brush.title = \"Menu de pincel\"\nui.brush.content = \"Menu principal do pincel\"\nui.brush.create = \"Criar um novo\"\nui.brush.getsession = \"Obter pincel da sessão\"\nui.brush.edithand = \"Editar pincel na mão\"\n; ui brush settings\nui.brush.settings.title = \"{%0} configurações de pincel\"\n; ui brush options\nui.brush.options.blocks = \"Blocos\"\nui.brush.options.blocks.placeholder = \"Exemplo: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diâmetro\"\nui.brush.options.width = \"Largura\"\nui.brush.options.height = \"Alto\"\nui.brush.options.depth = \"Profundidade\"\nui.brush.options.flags = \"Adicionar bandeiras?\"\n; language\nui.language.title = \"Selecione o idioma\"\nui.language.label = \"Defina o idioma da sua sessão. Se o seu idioma não está disponível, sinta-se a vontade para traduzir o plugin no GitHub!\"\nui.language.dropdown = \"Selecione um idioma\"\n\n"
  },
  {
    "path": "resources/lang/rom.ini",
    "content": "; Updated time : 26th 07 2017\nlanguage.name = \"Romany\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"Ceva a mers prost\"\nnoperm = \"Nu aveți permisiunea de a executa această comandă\"\nruningame = \"Vă rugăm să executați această comandă în joc!\"\ncommands = \"Comenzi\"\n; user interfaces\nui.confirmation = \"Confirmare\"\nui.confirmation.yes = \"Da\"\nui.confirmation.no = \"Nu\"\n; ui brush\nui.brush.title = \"Meniu perie\"\n; ui brush select\nui.brush.select.title = \"Selectați un tip de pensulă\"\nui.brush.select.type.sphere = \"Sphere\"\nui.brush.select.type.cylinder = \"Cilindrul\"\nui.brush.select.type.cuboid = \"Cuboid\"\nui.brush.select.type.clipboard = \"Clipboard\"\n; ui brush settings\nui.brush.settings.title = \"{%0} setările periei\"\n; ui brush options\nui.brush.options.blocks = \"Blocuri\"\nui.brush.options.blocks.placeholder = \"Exemplu: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diametru\"\nui.brush.options.width = \"Lățime\"\nui.brush.options.height = \"Înalt\"\nui.brush.options.depth = \"Depth\"\nui.brush.options.flags = \"Adaugă steaguri?\"\n; ui flags\nui.flags.keepexistingblocks = \"Păstrați blocurile existente\"\nui.flags.keepair = \"Păstrați aerul\"\nui.flags.hollow = \"Hollow\"\nui.flags.natural = \"Natural\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"Meniul de inundații\"\nui.flood.options.limit = \"Blocuri maxime\"\nui.flood.options.blocks = \"Blocuri\"\nui.flood.options.blocks.placeholder = \"Blocurile trebuie separate prin punct și virgulă\"\nui.flood.options.label.infoapply = \"Faceți clic pe butonul de trimitere pentru a aplica modificările\"\n"
  },
  {
    "path": "resources/lang/rus.ini",
    "content": "; Updated time : 26th 09 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Russian\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"команды\"\nenabled = \"включен(а)\"\ndisabled = \"отключен(а)\"\nconfirmation = \"Подтверждение\"\nconfirmation.yes = \"Да\"\nconfirmation.no = \"Нет\"\n; errors\nerror = \"Что-то пошло не так\"\nerror.command-error = \"Похоже, Вы пропустили аргумент или использовали команду неправильно!\"\nerror.runingame = \"Пожалуйста, запустите эту команду в игре!\"\nerror.limitexceeded = \"Вы пытаетесь отредактировать слишком много блоков за раз. Уменьшите выделение или увеличте лимит\"\nerror.notarget = \"Целевой блок не найден. Увеличьте диапазон инструмента с помощью //setrange при необходимости\"\nerror.noselection = \"Выделение не найдено - сначала выделите область\"\nerror.selectioninvalid = \"Выделение не валидно! Проверьте, что все позиции выставлены!\"\nerror.nosession = \"Сессия не была создана - возможно нет прав на использование {%0}\"\nerror.noclipboard = \"Буфер обмена не найден - сначала создайте буфер обмена\"\nwarning.differentworld = \"[ПРЕДУПРЕЖДЕНИЕ] Вы редактируете на уровне, на котором вы в данный момент не находитесь!\"\n; commands\ncommand.info.title = \"Информация\"\ncommand.limit.current = \"Текущий лимит: {%0}\"\ncommand.limit.set = \"Лимит на количество изменяемых блоков установлен на {%0}\"\ncommand.setrange.current = \"Текущий диапазон: {%0}\"\ncommand.setrange.set = \"Диапазон инструментов был установлен на {%0}\"\ncommand.biomeinfo.attarget = \"Биом в мишени\"\ncommand.biomeinfo.atposition = \"Биом в положении\"\ncommand.biomeinfo.result = \"{%0} биомов найдено в выделении\"\ncommand.biomeinfo.result.line = \"ID: {%0} Имя: {%1}\"\ncommand.biomelist.title = \"Список биомов\"\ncommand.biomelist.result.line = \"ID: {%0} Имя: {%1}\"\ncommand.brushname.set = \"Имя кисти изменено на \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Буферы обмена очищены\"\ncommand.flip.try = \"Попытка перевернуть буфер обмена на {%0}\"\ncommand.flip.success = \"Буфер обмена перевернут успешно\"\ncommand.rotate.try = \"Попытка повернуть буфер обмена на {%0} градусов\"\ncommand.rotate.success = \"Буфер обмена повернут успешно\"\ncommand.history.cleared = \"История очищена\"\ncommand.listchunks.found = \"{%0} кусков найдены в выделении\"\ncommand.size = \"Размер выделения\"\n; selection\nselection.pos1.set = \"Позиция 1 выставлена на X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Позиция 2 выставлена на X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Нечего отменять\"\nsession.undo.left = \"У вас осталось {%0} отмененяемых действий\"\nsession.redo.none = \"Нечего возвращать\"\nsession.redo.left = \"У вас осталось {%0} возвращаемых действий\"\nsession.brush.added = \"{%0} добавлено в сессию\"\nsession.brush.deleted = \"Удалено {%0} (UUID {%1})\"\nsession.brush.removed = \"Удалено {%0} (UUID {%1})\"\nsession.language.set = \"Выбран язык {%0}\"\nsession.language.notfound = \"Язык {%0} не найден, восстановлен язык по умолчанию\"\n; task\ntask.copy.success = \"Асинхронное копирование выполнено успешно, извлечено {%0}, скопировано {%1} блоков из {%2}.\"\ntask.count.success = \"Асинхронный анализ выполнен успешно, извлечено {%0}\"\ntask.count.result = \"{%0} блоков найдено в общей сложности {%1} блоков\"\ntask.fill.success = \"Асинхронное заполнение выполнено успешно, извлечено {%0}, {%1} блоков из {%2} изменено.\"\ntask.replace.success = \"Асинхронная замена выполнена успешно, извлечено {%0}, {%1} блоков из {%2} изменено.\"\ntask.revert.undo.success = \"Асинхронная отмена выполнена успешно, извлечено {%0}, {%1} блоков из {%2} изменено.\"\ntask.revert.redo.success = \"Асинхронный возврат выполнен успешно, извлечено {%0}, {%1} блоков из {%2} изменено.\"\n; flags\nflags.keepexistingblocks = \"Оставить текущие блоки\"\nflags.keepair = \"Оставить воздух\"\nflags.hollow = \"Полый\"\nflags.hollowclosed = \"Полый с закрытыми концами\"\nflags.natural = \"Естественный\"\n; tools\n; wand tool\ntool.wand = \"Волшебная палочка\"\ntool.wand.lore.1 = \"Кликните левой кнопкой по блоку, чтобы выставить позицию 1 для выделения\"\ntool.wand.lore.2 = \"Кликните правой кнопкой по блоку, чтобы выставить позицию 2 для выделения\"\ntool.wand.lore.3 = \"Используйте //togglewand чтобы переключить функциональность\"\ntool.wand.disabled = \"Волшебная палочка отключена. Используйте //togglewand чтобы включить ее\"\ntool.wand.setenabled = \"Волшебная палочка сейчас {%0}!\"\n; debug tool\ntool.debug = \"Инструмент отладки\"\ntool.debug.lore.1 = \"Кликните левой кнопкой по блоку, чтобы получить информацию\"\ntool.debug.lore.2 = \"как имя и значения урона блока\"\ntool.debug.lore.3 = \"Используйте //toggledebug чтобы переключить функциональность\"\ntool.debug.disabled = \"Инструмент отладки отключен. Используйте //toggledebug чтобы включить его\"\ntool.debug.setenabled = \"Инструмент отладки сейчас {%0}!\"\n; flood tool\nui.flood.title = \"Меню заливки\"\nui.flood.options.limit = \"Максимум блоков\"\nui.flood.options.blocks = \"Блоки\"\nui.flood.options.blocks.placeholder = \"Блоки, разделенные точкой с запятой\"\nui.flood.options.label.infoapply = \"Нажмите кнопку подтверждения, чтобы применить изменения\"\n; brush tool\nui.brush.title = \"Меню кистей\"\nui.brush.content = \"Основное меню кистей\"\nui.brush.create = \"Создать новую\"\nui.brush.getsession = \"Взять кисть из сессии\"\nui.brush.edithand = \"Редактировать кисть в руке\"\n; brush settings\nui.brush.settings.title = \"{%0} настройки кисти\"\n; brush options\nui.brush.options.blocks = \"Блоки\"\nui.brush.options.blocks.placeholder = \"Пример: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Диаметр\"\nui.brush.options.width = \"Ширина\"\nui.brush.options.height = \"Высота\"\nui.brush.options.depth = \"Глубина\"\nui.brush.options.flags = \"Добавить флаги?\"\n; language\nui.language.title = \"Выбрать язык\"\nui.language.label = \"Установите язык вашей сессии. Если ваш язык недоступен, вы можете перевести плагин на GitHub!\"\nui.language.dropdown = \"Выберите язык\""
  },
  {
    "path": "resources/lang/slo.ini",
    "content": "; Updated time : 31th 10 2019\nlanguage.name = \"Slovak\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"príkazy\"\nenabled = \"povolené\"\ndisabled = \"zablokovaný\"\nconfirmation = \"Potvrdenie\"\nconfirmation.yes = \"Áno\"\nconfirmation.no = \"Nie\"\nerror = \"Nastala chyba\"\nerror.command-error = \"Vyzerá to, že vám chýba argument alebo ste použili príkaz nesprávne!\"\nerror.runingame = \"Prosím spustite tento príkaz v hre!\"\nerror.limitexceeded = \"Pokúšate sa upraviť príliš veľa blokov naraz. Znížte výber alebo zvýšte limit\"\nerror.notarget = \"Nenašiel sa žiadny cieľový blok. Ak je to potrebné, zväčšite rozsah nástrojov pomocou //setrange\"\nerror.noselection = \"Nenašiel sa žiadny výber - najskôr vyberte oblasť\"\nerror.selectioninvalid = \"Výber nie je platný! Skontrolujte, či sú nastavené všetky polohy!\"\nerror.nosession = \"Nebola vytvorená žiadna relácia - pravdepodobne žiadne povolenie na používanie {%0}\"\nerror.noclipboard = \"Nenašla sa žiadna schránka - najprv si vytvorte schránku\"\nwarning.differentworld = \"[VAROVANIE] Upravujete na úrovni, v ktorej sa momentálne nenachádzate!\"\n; commands\ncommand.info.title = \"Informácie\"\ncommand.limit.current = \"Aktuálny limit: {%0}\"\ncommand.limit.set = \"Limit zmeny bloku bol nastavený na {%0}\"\ncommand.setrange.current = \"Aktuálny rozsah: {%0}\"\ncommand.setrange.set = \"Rozsah nástrojov bol nastavený na {%0}\"\ncommand.biomeinfo.attarget = \"Bióm v cieli\"\ncommand.biomeinfo.atposition = \"Bióm na pozícii\"\ncommand.biomeinfo.result = \"{%0} biómy nájdené vo výbere\"\ncommand.biomeinfo.result.line = \"ID: {%0} Meno: {%1}\"\ncommand.biomelist.title = \"Zoznam biómov\"\ncommand.biomelist.result.line = \"ID: {%0} Meno: {%1}\"\ncommand.brushname.set = \"Názov štetca je nastavený na \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Schránky boli vymazané\"\ncommand.flip.try = \"Pokúšam sa otočiť schránku o {%0}\"\ncommand.flip.success = \"Schránka bola úspešne prevrátená\"\ncommand.rotate.try = \"Pokúšam sa otočiť schránku o {%0} stupňov\"\ncommand.rotate.success = \"Schránka bola úspešne otočená\"\ncommand.history.cleared = \"História vymazaná\"\ncommand.listchunks.found = \"{%0} kusy nájdené vo výbere\"\ncommand.size = \"Veľkosť výberu\"\n; selection\nselection.pos1.set = \"Poloha 1 nastavená na X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Poloha 2 nastavená na X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Nič na vrátenie\"\nsession.undo.left = \"Zostáva ti {%0} akcií na vrátenie\"\nsession.redo.none = \"Nič na prerobenie\"\nsession.redo.left = \"Zostáva ti {%0} akcií na prerobenie\"\nsession.brush.added = \"Do relácie bolo pridané {%0}\"\nsession.brush.deleted = \"Vymazané {%0} (UUID {%1})\"\nsession.brush.removed = \"Odstránené {%0} (UUID {%1})\"\nsession.language.set = \"Jazyk bol úspešne nastavený na {%0}\"\nsession.language.notfound = \"Jazyk {%0} sa nenašiel, obnovuje sa predvolená hodnota\"\n; task\ntask.copy.success = \"Async Copy uspel, prevzal {%0}, skopíroval {%1} blokov z {%2}.\"\ntask.count.success = \"Analýza async bola úspešná trvala {%0}\"\ntask.count.result = \"{%0} blokov nájdených v celkovo {%1} blokoch\"\ntask.fill.success = \"Async Vyplň uspel, zabral {%0}, {%1} blokov z {%2} sa zmenilo.\"\ntask.replace.success = \"Async Vymeň uspel, zabral {%0}, {%1} blokov z {%2} sa zmenilo.\"\ntask.revert.undo.success = \"Async Vráť uspel, zabral {%0}, {%1} blokov z {%2} sa zmenilo.\"\ntask.revert.redo.success = \"Async Prerob uspel, zabral {%0}, {%1} blokov z {%2} sa zmenilo.\"\n; flags\nflags.keepexistingblocks = \"Zachovaj existujúce bloky\"\nflags.keepair = \"Zachovaj vzduch\"\nflags.hollow = \"Prázdny\"\nflags.hollowclosed = \"Duté so zatvorenými koncami\"\nflags.natural = \"Prírodné\"\n; tools\n; wand tool\ntool.wand = \"čarodejný prútik\"\ntool.wand.lore.1 = \"Kliknutím ľavým tlačidlom myši na blok nastavíte pozíciu 1 výberu\"\ntool.wand.lore.2 = \"Kliknutím pravým tlačidlom myši na blok nastavíte pozíciu 2 výberu\"\ntool.wand.lore.3 = \"Funkciu môžete prepínať pomocou //togglewand\"\ntool.wand.disabled = \"Nástroj čarodejný prútik je zakázaný. Použite //togglewand na jeho opätovné povolenie\"\ntool.wand.setenabled = \"Nástroj čarodejný prútik je teraz {%0}!\"\n; debug tool\ntool.debug = \"Nástroj na odstraňovanie chýb\"\ntool.debug.lore.1 = \"Ak chcete získať informácie, kliknite ľavým tlačidlom na blok\"\ntool.debug.lore.2 = \"ako je názov a hodnoty poškodenia bloku\"\ntool.debug.lore.3 = \"Funkciu môžete prepínať pomocou //toggledebug\"\ntool.debug.disabled = \"Nástroj na odstraňovanie chýb je zakázaný. Použite //toggledebug na opätovné povolenie\"\ntool.debug.setenabled = \"Nástroj na odstraňovanie chýb je teraz {%0}!\"\n; flood tool\nui.flood.title = \"Ponuka výplne\"\nui.flood.options.limit = \"Maximálny počet blokov\"\nui.flood.options.blocks = \"Bloky\"\nui.flood.options.blocks.placeholder = \"Bloky oddelené bodkočiarkami\"\nui.flood.options.label.infoapply = \"Kliknite na tlačidlo \"Submit\" na použite\"\n; brush tool\nui.brush.title = \"Ponuka štetca\"\nui.brush.content = \"Hlavná ponuka štetca\"\nui.brush.create = \"Vytvor nový\"\nui.brush.getsession = \"Získajte reláciu štetca\"\nui.brush.edithand = \"Upravte štetec v ruke\"\n; brush settings\nui.brush.settings.title = \"{%0} nastavenie štetca\"\n; brush options\nui.brush.options.blocks = \"Bloky\"\nui.brush.options.blocks.placeholder = \"Príklad: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Priemer\"\nui.brush.options.width = \"šírka\"\nui.brush.options.height = \"Výška\"\nui.brush.options.depth = \"Hĺbka\"\nui.brush.options.flags = \"Pridať vlajky?\"\n; language\nui.language.title = \"Výber jazyka\"\nui.language.label = \"Nastavte jazyk relácie. Ak váš jazyk nie je k dispozícii, môžete preložiť doplnok na GitHub-e!\"\nui.language.dropdown = \"Zvoľ jazyk\"\n"
  },
  {
    "path": "resources/lang/swa.ini",
    "content": "; Muda wa kufanyiwa marekebisho : 28th 10 2018\nlanguage.name = \"Swahili\"\n; ya kawaida\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"Kuna kitu kimeenda vibaya\"\nnoperm = \"Huna ruhusa ya kutekeleza amri hii\"\nruningame = \"Tafadhali tekeleza amri hii ndani ya mchezo!\"\ncommands = \"amri nyingi\"\n; user interfaces\nui.confirmation = \"Uthibitisho\"\nui.confirmation.yes = \"Ndio\"\nui.confirmation.no = \"Hapana\"\n; ui brush\nui.brush.title = \"Orodha ya brashi\"\n; ui brush select\nui.brush.select.title = \"Chagua aina ya brashi\"\nui.brush.select.type.sphere = \"Nyanja\"\nui.brush.select.type.cylinder = \"Silinda\"\nui.brush.select.type.cuboid = \"Cuboid\"\nui.brush.select.type.clipboard = \"Kipande cha ubao cha kuandikia maelezo\"\n; ui brush settings\nui.brush.settings.title = \"{%0} mipangilio ya brashi\"\n; ui brush options\nui.brush.options.blocks = \"Vitalu\"\nui.brush.options.blocks.placeholder = \"Mfano: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Kipenyo\"\nui.brush.options.width = \"Upana\"\nui.brush.options.height = \"Urefu\"\nui.brush.options.depth = \"Kina\"\nui.brush.options.flags = \"Ongeza bendera?\"\n; ui flags\nui.flags.keepexistingblocks = \"Weka vitalu vilivyopo\"\nui.flags.keepair = \"Weka upepo\"\nui.flags.hollow = \"Mashimo\"\nui.flags.natural = \"Asili\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"Orodha ya mafuriko\"\nui.flood.options.limit = \"Vitalu vingi\"\nui.flood.options.blocks = \"Vitalu\"\nui.flood.options.blocks.placeholder = \"Vitalu vilivyo tenganishwa na semicoloni\"\nui.flood.options.label.infoapply = \"Bonyeza kitufe cha \"Tuma\" kuomba\"\n"
  },
  {
    "path": "resources/lang/swe.ini",
    "content": "; Updated time : 26th 07 2017\nlanguage.name = \"Swedish\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"kommandon\"\nenabled = \"På\"\ndisabled = \"Av\"\nconfirmation = \"Bekräfta\"\nconfirmation.yes = \"Yes\"\nconfirmation.no = \"No\"\n; errors\nerror = \"Ett fel uppstod\"\nerror.command-error = \"Det verkar som att du saknar ett argument eller använder komandot fel!\"\nerror.runingame = \"Var snäll att köra detta kommando in-game!\"\nerror.limitexceeded = \"Du försöker ändra för många block samtidigt. Minska valet eller öka gränsen.\"\nerror.notarget = \"Inget målblock hittat. Öka det effektiva avståndet med //setrange om du behöver\"\nerror.noselection = \"Ingen markering hittad - välj en area först\"\nerror.selectioninvalid = \"Markeringen är inte giltig! Kolla så att alla positioner är satta!\"\nerror.nosession = \"Ingen session skapad - förmodeligen saknas rättigheter att använda {%0}\"\nerror.noclipboard = \"Inget urklipp funnet - skapa ett urklipp först\"\nwarning.differentworld = \"[VARNING] Du editerar en level som du inte är i för tillfället!\"\n; commands\ncommand.info.title = \"Information\"\ncommand.limit.current = \"Nuvarande gräns: {%0}\"\ncommand.limit.set = \"Block change limit satt till {%0}\"\ncommand.setrange.current = \"Nuvarande nivå: {%0}\"\ncommand.setrange.set = \"Tool range satt till {%0}\"\ncommand.biomeinfo.attarget = \"Biome vid mål\"\ncommand.biomeinfo.atposition = \"Biome vid position\"\ncommand.biomeinfo.result = \"{%0} biomes hittade in markering\"\ncommand.biomeinfo.result.line = \"ID: {%0} Namn: {%1}\"\ncommand.biomelist.title = \"Biome lista\"\ncommand.biomelist.result.line = \"ID: {%0} Namn: {%1}\"\ncommand.brushname.set = \"Penselnamn satt till \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"Urklipps rensat\"\ncommand.flip.try = \"Försöker spegla urklipp med {%0}\"\ncommand.flip.success = \"Urklipp har speglats\"\ncommand.rotate.try = \"Försöker rotera urklipp med {%0} grader\"\ncommand.rotate.success = \"Urklipp har roterats\"\ncommand.history.cleared = \"Historik rensat\"\ncommand.listchunks.found = \"{%0} delar hittade i urvalet\"\ncommand.size = \"Markeringsstorlek\"\n; selection\nselection.pos1.set = \"Position 1 satt till X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"Position 2 satt till X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"Det finns inget att ångra\"\nsession.undo.left = \"Du kan ångra {%0} fler gånger\"\nsession.redo.none = \"Inget att återskapa\"\nsession.redo.left = \"Du kan återskapa {%0} fler gånger\"\nsession.brush.added = \"Lade till {%0} till sessionen\"\nsession.brush.deleted = \"Raderade {%0} (UUID {%1})\"\nsession.brush.removed = \"Tog bort {%0} (UUID {%1})\"\nsession.language.set = \"Språk satt till {%0}\"\nsession.language.notfound = \"Språk {%0} inte hittat, återställer till standard!\"\n; task\ntask.copy.success = \"Async Kopiering lyckades, tog {%0}, kopierade {%1} block av {%2} totalt.\"\ntask.count.success = \"Async Analysering lyckades, tog {%0}\"\ntask.count.result = \"{%0} block hittade av totalt {%1} block\"\ntask.fill.success = \"Async Fyll lyckades, tog {%0}, {%1} block av {%2} ändrade.\"\ntask.replace.success = \"Async Ersätta lyckades, tog {%0}, {%1} block av {%2} ändrade.\"\ntask.revert.undo.success = \"Async Ånga lyckades, tog {%0}, {%1} block av {%2} ändrade.\"\ntask.revert.redo.success = \"Async Återskapa lyckades, tog {%0}, {%1} block av {%2} ändrade.\"\n; flags\nflags.keepexistingblocks = \"Behåll existerande block\"\nflags.keepair = \"Behåller luft\"\nflags.hollow = \"Ihåligt\"\nflags.hollowclosed = \"Ihåligt med stängda ändar\"\nflags.natural = \"Neutral\"\n; tools\n; wand tool\ntool.wand = \"Trollspö\"\ntool.wand.lore.1 = \"Vänsterklicka på ett block för att sätta position 1 av markering\"\ntool.wand.lore.2 = \"Högerklicka på ett block för att sätta position 2 av markering\"\ntool.wand.lore.3 = \"Använd //togglewand för att aktivera funktionaliteten\"\ntool.wand.disabled = \"Trollspöet är avaktiverat. Använd //togglewand för att aktivera\"\ntool.wand.setenabled = \"Trolspöet är nu {%0}!\"\n; debug tool\ntool.debug = \"Debugverktyg\"\ntool.debug.lore.1 = \"Vänsterklicka för att få information\"\ntool.debug.lore.2 = \"som namn och skada på block\"\ntool.debug.lore.3 = \"Använd //toggledebug för att aktivera funktionaliteten\"\ntool.debug.disabled = \"Debugverktyget är avaktiverat. Använd //toggledebug för att aktivera\"\ntool.debug.setenabled = \"Debugverktyget är nu {%0}!\"\n; flood tool\nui.flood.title = \"Fyllmeny\"\nui.flood.options.limit = \"Max block\"\nui.flood.options.blocks = \"Block\"\nui.flood.options.blocks.placeholder = \"Block separerade med semikolon\"\nui.flood.options.label.infoapply = \"Klicka på \"Submit\" knappen för att använda\"\n; brush tool\nui.brush.title = \"Penselmeny\"\nui.brush.content = \"Pensel huvudmeny\"\nui.brush.create = \"Skapa ny\"\nui.brush.getsession = \"Hämta sessionpensel\"\nui.brush.edithand = \"Ändra pensel i handen\"\n; brush settings\nui.brush.settings.title = \"{%0} penselinställningar\"\n; brush options\nui.brush.options.blocks = \"Block\"\nui.brush.options.blocks.placeholder = \"Exempel: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diameter\"\nui.brush.options.width = \"Bredd\"\nui.brush.options.height = \"Höjd\"\nui.brush.options.depth = \"Djup\"\nui.brush.options.flags = \"Lägg till flaggor?\"\n; language\nui.language.title = \"Välj språk\"\nui.language.label = \"Välj språk för din session. Om ditt språk inte finns, kan du översätta det på GitHub!\"\nui.language.dropdown = \"Välj ett språk\""
  },
  {
    "path": "resources/lang/tgl.ini",
    "content": "; Updated time : 30th 10 2018\nlanguage.name = \"Tagalog\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\nerror = \"May sumablay.\"\nnoperm = \"Wala po kayong pahintulot na gawin ito\"\nruningame = \"Gawin ito sa loob lamang ng laro!\"\ncommands = \"Mga Utos\"\n; user interfaces\nui.confirmation = \"Mga Tugon\"\nui.confirmation.yes = \"Oo\"\nui.confirmation.no = \"Hindi\"\n; ui brush\nui.brush.title = \"Mga Burutsa\"\n; ui brush select\nui.brush.select.title = \"Mamili ng uri ng burutsa\"\nui.brush.select.type.sphere = \"Bola\"\nui.brush.select.type.cylinder = \"Lata\"\nui.brush.select.type.cuboid = \"Kahon\"\nui.brush.select.type.clipboard = \"Clipboard\"\n; ui brush settings\nui.brush.settings.title = \"{%0} mga setting ng burutsa\"\n; ui brush options\nui.brush.options.blocks = \"Mga Bloke\"\nui.brush.options.blocks.placeholder = \"Halimbawa: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"Diameter\"\nui.brush.options.width = \"Lapad\"\nui.brush.options.height = \"Taas\"\nui.brush.options.depth = \"Lalim\"\nui.brush.options.flags = \"Magdagdag ng mga flags?\"\n; ui flags\nui.flags.keepexistingblocks = \"Hayaan lamang ang mga bloke\"\nui.flags.keepair = \"Keep air\"\nui.flags.hollow = \"Walang laman\"\nui.flags.natural = \"Natural\"\n; ui brush sphere\n; ui brush cylinder\n; ui brush cuboid\n; ui brush clipboard\n; ui flood\nui.flood.title = \"Menu sa pagpapadaloy/baha\"\nui.flood.options.limit = \"Sagad na dami ng mga bloke\"\nui.flood.options.blocks = \"Bloke\"\nui.flood.options.blocks.placeholder = \"Tuldok-kuwit ang taga-hiwalay ng mga bloke\"\nui.flood.options.label.infoapply = \"I-klik ang \"Submit\" na buton para i-apply\"\n"
  },
  {
    "path": "resources/lang/tha.ini",
    "content": "; Updated time : 26th 09 2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name = \"Thai\"\n; general\ndivider = \"========================================\"\nspacer = \" -=+=- {%0} -=+=- \"\ncommands = \"คำสั่ง\"\nenabled = \"เปิดใช้งาน\"\ndisabled = \"ปิดใช้งาน\"\nconfirmation = \"การยืนยัน\"\nconfirmation.yes = \"ใช่\"\nconfirmation.no = \"ไม่\"\n; errors\nerror = \"มีข้อผิดพลาดเกิดขึ้น\"\nerror.command-error = \"ดูเหมือนค่าตัวแปรจะหายไปหรือคุณใช้คำสั่งไม่ถูกต้อง!\"\nerror.runingame = \"โปรดใช้คำสั่งนี้ในเกมเท่านั้น!\"\nerror.limitexceeded = \"คุณพยายามแก้ไขบล็อกในจำนวนมากเกินไป ลดจำนวนที่เลือกลงหรือเพิ่มจำนวนจำกัด\"\nerror.notarget = \"ไม่มีบล็อกเป้าหมายให้เลือก. เพิ่มระยะอุปกรณ์ด้วยคำสั่ง //setrange ถ้าต้องการ\"\nerror.noselection = \"ไม่มีการเลือก - เลือกพื้นที่ก่อน\"\nerror.selectioninvalid = \"การเลือกไม่ถูกต้อง! ตรวจสอบตำแหน่งทั้งหมดอีกครั้ง!\"\nerror.nosession = \"ไม่มีเซสชั่นสร้างขึ้น - อาจเป็นเพราะไม่มีสิทธิ์ในการใช้ {%0}\"\nerror.noclipboard = \"ไม่พบคลิปบอร์ด - สร้างคลิปบอร์ดก่อน\"\nwarning.differentworld = \"[คำเตือน] คุณกำลังแก้ไขเลเวลที่คุณไม่ได้อยู่!\"\n; commands\ncommand.info.title = \"ข้อมูล\"\ncommand.limit.current = \"จำนวนจำกัดปัจจุบัน: {%0}\"\ncommand.limit.set = \"จำนวนจำกัดการแก้ไขบล็อกถูกตั้งเป็น {%0}\"\ncommand.setrange.current = \"ระยะปัจจุบัน: {%0}\"\ncommand.setrange.set = \"ระยะอุปกรณ์ถูกตั้งเป็น {%0}\"\ncommand.biomeinfo.attarget = \"Biome ที่เป้าหมาย\"\ncommand.biomeinfo.atposition = \"Biome ที่ตำแหน่ง\"\ncommand.biomeinfo.result = \"พบ {%0} biomes ในการเลือก\"\ncommand.biomeinfo.result.line = \"ไอดี: {%0} ชื่อ: {%1}\"\ncommand.biomelist.title = \"ลิสของ Biome\"\ncommand.biomelist.result.line = \"ไอดี: {%0} ชื่อ: {%1}\"\ncommand.brushname.set = \"ชื่อแปรงถูกตั้งเป็น \\\"{%0}\\\"\"\ncommand.clearclipboard.cleared = \"คลิปบอร์ดถูกล้าง\"\ncommand.flip.try = \"พยายามที่จะพลิกคลิปบอร์ดโดย {%0}\"\ncommand.flip.success = \"คลิปบอร์ดถูกพลิกเรียบร้อย\"\ncommand.rotate.try = \"พยายามที่จะหมุนคลิปบอร์ด {%0} องศา\"\ncommand.rotate.success = \"คลิปบอร์ดถูกหมุนเรียบร้อย\"\ncommand.history.cleared = \"ประวัติถูกล้าง\"\ncommand.listchunks.found = \"พบ {%0} chunks ในการเลือก\"\ncommand.size = \"ขนาดการเลือก\"\n; selection\nselection.pos1.set = \"ตำแหน่งที่ 1 ตั้งเป็น X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set = \"ตำแหน่งที่ 2 ตั้งเป็น X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none = \"ไม่มีอะไรให้ย้อนกลับ\"\nsession.undo.left = \"คุณมีคำสั่งย้อนกลับเหลือ {%0}\"\nsession.redo.none = \"ไม่มีอะไรให้ทำใหม่\"\nsession.redo.left = \"คุณมีคำสั่งให้ทำใหม่เหลือ {%0}\"\nsession.brush.added = \"เพิ่ม {%0} เข้าเซสชั่น\"\nsession.brush.deleted = \"ลบ {%0} (UUID {%1})\"\nsession.brush.removed = \"นำออก {%0} (UUID {%1})\"\nsession.language.set = \"เปลี่ยนภาษาเป็น {%0} เรียบร้อย\"\nsession.language.notfound = \"ไม่พบภาษา {%0} ปรับกลับเป็นค่าเริ่มต้น\"\n; task\ntask.copy.success = \"คัดลอกสำเร็จ, ใช้เวลา {%0}, คัดลอก {%1} บล็อกจากทั้งหมด {%2}\"\ntask.count.success = \"วิเคราะห์สำเร็จ, ใช้เวลา {%0}\"\ntask.count.result = \"พบ {%0} บล็อกจากทั้งหมด {%1} บล็อก\"\ntask.fill.success = \"เติมเต็มสำเร็จ, ใช้เวลา {%0}, เปลี่ยน {%1} บล็อกจากทั้งหมด {%2}\"\ntask.replace.success = \"วางทับสำเร็จ ใช้เวลา {%0}, เปลี่ยน {%1} บล็อกจากทั้งหมด {%2}\"\ntask.revert.undo.success = \"ย้อนกลับสำเร็จ, ใช้เวลา {%0}, เปลี่ยน {%1} บล็อกจากทั้งหมด {%2}\"\ntask.revert.redo.success = \"ทำใหม่สำเร็จ, ใช้เวลา {%0}, เปลี่ยน {%1} บล็อกจากทั้งหมด {%2}\"\n; flags\nflags.keepexistingblocks = \"เก็บบล็อกที่มีอยู่ไว้\"\nflags.keepair = \"เก็บอากาศ\"\nflags.hollow = \"โพรง\"\nflags.hollowclosed = \"โพรงที่มีทางออกปิด\"\nflags.natural = \"ตามธรรมชาติ\"\n; tools\n; wand tool\ntool.wand = \"คทา\"\ntool.wand.lore.1 = \"คลิกซ้ายที่บล็อกเพื่อตั้งตำแหน่งที่ 1 ของการเลือก\"\ntool.wand.lore.2 = \"คลิกขวาที่บล็อกเพื่อตั้งตำแหน่งที่ 2 ของการเลือก\"\ntool.wand.lore.3 = \"ใช้คำสั่ง //togglewand เพื่อสลับการทำงานของคทา\"\ntool.wand.disabled = \"คทาถูกปิดใช้งาน ใช้คำสั่ง //togglewand เพื่อเปิดใช้งาน\"\ntool.wand.setenabled = \"คทาได้ถูก{%0}!\"\n; debug tool\ntool.debug = \"เครื่องมือ Debug\"\ntool.debug.lore.1 = \"คลิกซ้ายที่บล็อกเพื่อดูข้อมูล\"\ntool.debug.lore.2 = \"เช่นดูชื่อหรือค่าความเสียหายของบล็อก\"\ntool.debug.lore.3 = \"ใช้คำสั่ง //toggledebug เพื่อสลับการทำงานของเครื่องมือ\"\ntool.debug.disabled = \"เครื่องมือ Debug ถูกปิดใช้งาน ใช้คำสั่ง //toggledebug เพื่อเปิดใช้งาน\"\ntool.debug.setenabled = \"เครื่องมือ Debug ถูก{%0}!\"\n; flood tool\nui.flood.title = \"เมนู Flood\"\nui.flood.options.limit = \"จำนวนบล็อกที่มากที่สุด\"\nui.flood.options.blocks = \"บล็อก\"\nui.flood.options.blocks.placeholder = \"บล็อกที่แยกด้วย ;\"\nui.flood.options.label.infoapply = \"กดปุ่ม \"Submit\" เพื่อนำมาใช้\"\n; brush tool\nui.brush.title = \"เมนูแปรง\"\nui.brush.content = \"เมนูแปรงหลัก\"\nui.brush.create = \"สร้างใหม่\"\nui.brush.getsession = \"เรียกเซสชั่นแปรง\"\nui.brush.edithand = \"แก้ไขแปรงในมือ\"\n; brush settings\nui.brush.settings.title = \"การตั้งค่าแปรง {%0}\"\n; brush options\nui.brush.options.blocks = \"บล็อก\"\nui.brush.options.blocks.placeholder = \"ตัวอย่าง: 1:1,2,tnt,log:12\"\nui.brush.options.diameter = \"เส้นผ่าศูนย์กลาง\"\nui.brush.options.width = \"กว้าง\"\nui.brush.options.height = \"สูง\"\nui.brush.options.depth = \"ลึก\"\nui.brush.options.flags = \"เพิ่มตัวเลือก?\"\n; language\nui.language.title = \"เลือกภาษา\"\nui.language.label = \"ตั้งค่าภาษาของเซสชั่นของคุณ ถ้าไม่มีภาษาของคุณ คุณสามารถช่วยแปลปลั๊กอินนี้ได้ที่ GitHub!\"\nui.language.dropdown = \"เลือกภาษา\"\n"
  },
  {
    "path": "resources/lang/zho.ini",
    "content": "; Updated time : 3rd 10  2019\n; See: https://www.loc.gov/standards/iso639-2/php/English_list.php\nlanguage.name=\"Simplified Chinese\"\n; general\ndivider=\"========================================\"\nspacer=\"-=+=- {%0} -=+=-\"\ncommands=\"命令\"\nenabled=\"已启用\"\ndisabled=\"已禁用\"\nconfirmation=\"确认\"\nconfirmation.yes=\"是\"\nconfirmation.no=\"否\"\n; errors\nerror=\"发生了一个错误\"\nerror.command-error=\"看起来您缺少参数或使用了错误的命令！\"\nerror.runingame=\"请在游戏中运行这个命令！\"\nerror.limitexceeded=\"您正在尝试修改的方块太多了。减少选择的方块或提高限制\"\nerror.notarget=\"找不到目标方块。如果需要，使用//setrange增加工具范围\"\nerror.noselection=\"找不到选中 - 请先选中一个范围\"\nerror.selectioninvalid=\"选中范围无效！检查是否已设置所有位置！\"\nerror.nosession=\"为创建会话 - 可能没有使用{%0}的权限\"\nerror.noclipboard = \"找不到剪贴板 - 请先创建一个剪贴板\"\nwarning.differentworld = \"[警告] 您的编辑不处于您目前所在世界！\"\n; commands\ncommand.info.title=\"信息\"\ncommand.limit.current=\"目前极限：{%0}\"\ncommand.limit.set=\"方块变更限制已被设置为{%0}\"\ncommand.setrange.current=\"目前范围：{%0}\"\ncommand.setrange.set=\"工具范围已被设置为 {%0}\"\ncommand.biomeinfo.attarget=\"目标的生物群系\"\ncommand.biomeinfo.atposition=\"坐标的生物群系\"\ncommand.biomeinfo.result=\"在选中范围中找到了{%0}个生物群系\"\ncommand.biomeinfo.result.line=\"ID: {%0} 名称: {%1}\"\ncommand.biomelist.title=\"生物群系列表\"\ncommand.biomelist.result.line=\"ID: {%0} 名称: {%1}\"\ncommand.brushname.set=\"画笔名称设置为“{%0}”\"\ncommand.clearclipboard.cleared=\"已清空剪贴板\"\ncommand.flip.try=\"尝试翻转剪贴板到{%0}\"\ncommand.flip.success=\"成功翻转剪贴板\"\ncommand.rotate.try=\"尝试旋转剪贴板到{%0}度\"\ncommand.rotate.success=\"成功旋转剪贴板\"\ncommand.history.cleared=\"已清空历史\"\ncommand.listchunks.found=\"在选中范围内找到了{%0}个区块\"\ncommand.size=\"选中尺寸\"\n; selection\nselection.pos1.set=\"设置坐标1为 X: {%0} Y: {%1} Z: {%2}\"\nselection.pos2.set=\"设置坐标2为 X: {%0} Y: {%1} Z: {%2}\"\n; session\nsession.undo.none=\"没有可撤销的操作\"\nsession.undo.left=\"你还可以进行 {%0}个撤销操作\"\nsession.redo.none=\"没有可重做的操作\"\nsession.redo.left=\"你还可以进行{%0}个重做操作\"\nsession.brush.added=\"已添加{%0}到会话\"\nsession.brush.deleted=\"已删除 {%0} (UUID {%1})\"\nsession.brush.removed=\"已移除 {%0} (UUID {%1})\"\nsession.language.set=\"成功将设置语言为{%0}\"\nsession.language.notfound=\"找不到语言“{%0}”，重置为默认\"\n; task\ntask.copy.success=\"异步复制成功，耗时{%0}，从{%2}个方块中复制了{%1}个。\"\ntask.count.success=\"异步分析成功，耗时{%0}\"\ntask.count.result=\"在{%1}个方块中找到了{%0}个方块\"\ntask.fill.success=\"异步填充成功，耗时{%0}，在{%2}个方块中修改了{%1}个。\"\ntask.replace.success=\"异步填充成功，耗时{%0}，在{%2}个方块中修改了{%1}个。\"\ntask.revert.undo.success=\"异步撤销成功，耗时{%0}，在{%2}个方块中修改了{%1}个。\"\ntask.revert.redo.success=\"异步重做成功，耗时{%0}，在{%2}个方块中修改了{%1}个。\"\n; flags\nflags.keepexistingblocks=\"保留现存方块\"\nflags.keepair=\"保留空气\"\nflags.hollow=\"中空\"\nflags.hollowclosed=\"中空，两端封闭\"\nflags.natural=\"自然\"\n; tools\n; wand tool\ntool.wand=\"魔杖\"\ntool.wand.lore.1=\"左键一个方块来设置选中的坐标1\"\ntool.wand.lore.2=\"右键一个方块来设置选中的坐标2\"\ntool.wand.lore.3=\"使用//togglewand来切换功能\"\ntool.wand.disabled=\"魔杖工具已禁用。使用//togglewand来重新启用它\"\ntool.wand.setenabled=\"魔杖已{%0}！\"\n; debug tool\ntool.debug=\"故障排除工具\"\ntool.debug.lore.1=\"左键一个方块以获取信息\"\ntool.debug.lore.2=\"例如方块的名称和损耗值\"\ntool.debug.lore.3=\"使用//toggledebug切换其功能\"\ntool.debug.disabled=\"故障排除工具已禁用。使用//toggledebug来重新启用它\"\ntool.debug.setenabled = \"故障排除工具已{%0}！\"\n; flood tool\nui.flood.title=\"覆盖菜单\"\nui.flood.options.limit=\"最大方块数\"\nui.flood.options.blocks=\"方块\"\nui.flood.options.blocks.placeholder=\"用分号分隔的方块\"\nui.flood.options.label.infoapply=\"点击“Submit”按键来应用\"\n; brush tool\nui.brush.title=\"画笔菜单\"\nui.brush.content=\"画笔主菜单\"\nui.brush.create=\"新建\"\nui.brush.getsession=\"获取会话的笔刷\"\nui.brush.edithand=\"编辑手中的画笔\"\n; brush settings\nui.brush.settings.title=\"{%0}画笔设置\"\n; brush options\nui.brush.options.blocks=\"方块\"\nui.brush.options.blocks.placeholder=\"例子：1:1,2,tnt,log:12\"\nui.brush.options.diameter=\"半径\"\nui.brush.options.width=\"宽\"\nui.brush.options.height=\"高\"\nui.brush.options.depth=\"深\"\nui.brush.options.flags=\"添加标志？\"\n; language\nui.language.title=\"选择语言\"\nui.language.label=\"设置你会话的语言。如果你的语言不可用，你可以在GitHub上翻译这个插件！\"\nui.language.dropdown=\"选择一个语言\""
  },
  {
    "path": "resources/parsepoggit.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n$yaml = yaml_parse_file(\".poggit.yml\");\n\n$urls = [];\n\nforeach ($yaml[\"projects\"] ?? [] as $project) {\n\tforeach ($project[\"libs\"] ?? [] as $lib) {\n\t\t$src = $lib[\"src\"] ?? null;\n\t\tif ($src === null) {\n\t\t\techo \"Missing src in libs\";\n\t\t\tcontinue;\n\t\t}\n\t\t$version = $lib[\"version\"] ?? \"*\";\n\t\t$branch = $lib[\"branch\"] ?? \":default\";\n\n\t\t$urls[] = \"https://poggit.pmmp.io/v.dl/{$src}/{$version}?branch={$branch}\";\n\t}\n}\n\nprint implode('\n', $urls);"
  },
  {
    "path": "resources/possible_blockstates.json",
    "content": "{\n  \"age\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7,\n    8,\n    9,\n    10,\n    11,\n    12,\n    13,\n    14,\n    15\n  ],\n  \"age_bit\": [\n    0,\n    1\n  ],\n  \"allow_underwater_bit\": [\n    0,\n    1\n  ],\n  \"attached_bit\": [\n    0,\n    1\n  ],\n  \"attachment\": [\n    \"standing\",\n    \"hanging\",\n    \"side\",\n    \"multiple\"\n  ],\n  \"bamboo_leaf_size\": [\n    \"no_leaves\",\n    \"small_leaves\",\n    \"large_leaves\"\n  ],\n  \"bamboo_stalk_thickness\": [\n    \"thin\",\n    \"thick\"\n  ],\n  \"bite_counter\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6\n  ],\n  \"block_light_level\": [\n    14\n  ],\n  \"brewing_stand_slot_a_bit\": [\n    0,\n    1\n  ],\n  \"brewing_stand_slot_b_bit\": [\n    0,\n    1\n  ],\n  \"brewing_stand_slot_c_bit\": [\n    0,\n    1\n  ],\n  \"button_pressed_bit\": [\n    0,\n    1\n  ],\n  \"cauldron_liquid\": [\n    \"water\",\n    \"lava\"\n  ],\n  \"chemistry_table_type\": [\n    \"compound_creator\",\n    \"material_reducer\",\n    \"element_constructor\",\n    \"lab_table\"\n  ],\n  \"chisel_type\": [\n    \"default\",\n    \"chiseled\",\n    \"lines\",\n    \"smooth\"\n  ],\n  \"cluster_count\": [\n    0,\n    1,\n    2,\n    3\n  ],\n  \"color\": [\n    \"white\",\n    \"orange\",\n    \"magenta\",\n    \"light_blue\",\n    \"yellow\",\n    \"lime\",\n    \"pink\",\n    \"gray\",\n    \"silver\",\n    \"cyan\",\n    \"purple\",\n    \"blue\",\n    \"brown\",\n    \"green\",\n    \"red\",\n    \"black\"\n  ],\n  \"color_bit\": [\n    0,\n    1\n  ],\n  \"composter_fill_level\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7,\n    8\n  ],\n  \"conditional_bit\": [\n    0,\n    1\n  ],\n  \"coral_color\": [\n    \"blue\",\n    \"pink\",\n    \"purple\",\n    \"red\",\n    \"yellow\"\n  ],\n  \"coral_direction\": [\n    0,\n    1,\n    2,\n    3\n  ],\n  \"coral_fan_direction\": [\n    0,\n    1\n  ],\n  \"coral_hang_type_bit\": [\n    0,\n    1\n  ],\n  \"covered_bit\": [\n    0,\n    1\n  ],\n  \"cracked_state\": [\n    \"no_cracks\",\n    \"cracked\",\n    \"max_cracked\"\n  ],\n  \"damage\": [\n    \"undamaged\",\n    \"slightly_damaged\",\n    \"very_damaged\",\n    \"broken\"\n  ],\n  \"dead_bit\": [\n    0,\n    1\n  ],\n  \"deprecated\": [\n    0,\n    1,\n    2,\n    3\n  ],\n  \"direction\": [\n    0,\n    1,\n    2,\n    3\n  ],\n  \"dirt_type\": [\n    \"normal\",\n    \"coarse\"\n  ],\n  \"disarmed_bit\": [\n    0,\n    1\n  ],\n  \"door_hinge_bit\": [\n    0,\n    1\n  ],\n  \"double_plant_type\": [\n    \"sunflower\",\n    \"syringa\",\n    \"grass\",\n    \"fern\",\n    \"rose\",\n    \"paeonia\"\n  ],\n  \"drag_down\": [\n    0,\n    1\n  ],\n  \"end_portal_eye_bit\": [\n    0,\n    1\n  ],\n  \"explode_bit\": [\n    0,\n    1\n  ],\n  \"extinguished\": [\n    0,\n    1\n  ],\n  \"facing_direction\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5\n  ],\n  \"fill_level\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6\n  ],\n  \"flower_type\": [\n    \"poppy\",\n    \"orchid\",\n    \"allium\",\n    \"houstonia\",\n    \"tulip_red\",\n    \"tulip_orange\",\n    \"tulip_white\",\n    \"tulip_pink\",\n    \"oxeye\",\n    \"cornflower\",\n    \"lily_of_the_valley\"\n  ],\n  \"ground_sign_direction\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7,\n    8,\n    9,\n    10,\n    11,\n    12,\n    13,\n    14,\n    15\n  ],\n  \"growth\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7\n  ],\n  \"hanging\": [\n    0,\n    1\n  ],\n  \"head_piece_bit\": [\n    0,\n    1\n  ],\n  \"height\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7\n  ],\n  \"huge_mushroom_bits\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7,\n    8,\n    9,\n    10,\n    11,\n    12,\n    13,\n    14,\n    15\n  ],\n  \"in_wall_bit\": [\n    0,\n    1\n  ],\n  \"infiniburn_bit\": [\n    0,\n    1\n  ],\n  \"item_frame_map_bit\": [\n    0,\n    1\n  ],\n  \"kelp_age\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7,\n    8,\n    9,\n    10,\n    11,\n    12,\n    13,\n    14,\n    15\n  ],\n  \"lever_direction\": [\n    \"down_east_west\",\n    \"east\",\n    \"west\",\n    \"south\",\n    \"north\",\n    \"up_north_south\",\n    \"up_east_west\",\n    \"down_north_south\"\n  ],\n  \"liquid_depth\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7,\n    8,\n    9,\n    10,\n    11,\n    12,\n    13,\n    14,\n    15\n  ],\n  \"moisturized_amount\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7\n  ],\n  \"monster_egg_stone_type\": [\n    \"stone\",\n    \"cobblestone\",\n    \"stone_brick\",\n    \"mossy_stone_brick\",\n    \"cracked_stone_brick\",\n    \"chiseled_stone_brick\"\n  ],\n  \"new_leaf_type\": [\n    \"acacia\",\n    \"dark_oak\"\n  ],\n  \"new_log_type\": [\n    \"acacia\",\n    \"dark_oak\"\n  ],\n  \"no_drop_bit\": [\n    0,\n    1\n  ],\n  \"occupied_bit\": [\n    0,\n    1\n  ],\n  \"old_leaf_type\": [\n    \"oak\",\n    \"spruce\",\n    \"birch\",\n    \"jungle\"\n  ],\n  \"old_log_type\": [\n    \"oak\",\n    \"spruce\",\n    \"birch\",\n    \"jungle\"\n  ],\n  \"open_bit\": [\n    0,\n    1\n  ],\n  \"output_lit_bit\": [\n    0,\n    1\n  ],\n  \"output_subtract_bit\": [\n    0,\n    1\n  ],\n  \"persistent_bit\": [\n    0,\n    1\n  ],\n  \"pillar_axis\": [\n    \"y\",\n    \"x\",\n    \"z\"\n  ],\n  \"portal_axis\": [\n    \"unknown\",\n    \"x\",\n    \"z\"\n  ],\n  \"powered_bit\": [\n    0,\n    1\n  ],\n  \"prismarine_block_type\": [\n    \"default\",\n    \"dark\",\n    \"bricks\"\n  ],\n  \"rail_data_bit\": [\n    0,\n    1\n  ],\n  \"rail_direction\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7,\n    8,\n    9\n  ],\n  \"redstone_signal\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7,\n    8,\n    9,\n    10,\n    11,\n    12,\n    13,\n    14,\n    15\n  ],\n  \"repeater_delay\": [\n    0,\n    1,\n    2,\n    3\n  ],\n  \"sand_stone_type\": [\n    \"default\",\n    \"heiroglyphs\",\n    \"cut\",\n    \"smooth\"\n  ],\n  \"sand_type\": [\n    \"normal\",\n    \"red\"\n  ],\n  \"sapling_type\": [\n    \"oak\",\n    \"spruce\",\n    \"birch\",\n    \"jungle\",\n    \"acacia\",\n    \"dark_oak\"\n  ],\n  \"sea_grass_type\": [\n    \"default\",\n    \"double_top\",\n    \"double_bot\"\n  ],\n  \"sponge_type\": [\n    \"dry\",\n    \"wet\"\n  ],\n  \"stability\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7\n  ],\n  \"stability_check\": [\n    0,\n    1\n  ],\n  \"stone_brick_type\": [\n    \"default\",\n    \"mossy\",\n    \"cracked\",\n    \"chiseled\",\n    \"smooth\"\n  ],\n  \"stone_slab_type\": [\n    \"smooth_stone\",\n    \"sandstone\",\n    \"wood\",\n    \"cobblestone\",\n    \"brick\",\n    \"stone_brick\",\n    \"quartz\",\n    \"nether_brick\"\n  ],\n  \"stone_slab_type_2\": [\n    \"red_sandstone\",\n    \"purpur\",\n    \"prismarine_rough\",\n    \"prismarine_dark\",\n    \"prismarine_brick\",\n    \"mossy_cobblestone\",\n    \"smooth_sandstone\",\n    \"red_nether_brick\"\n  ],\n  \"stone_slab_type_3\": [\n    \"end_stone_brick\",\n    \"smooth_red_sandstone\",\n    \"polished_andesite\",\n    \"andesite\",\n    \"diorite\",\n    \"polished_diorite\",\n    \"granite\",\n    \"polished_granite\"\n  ],\n  \"stone_slab_type_4\": [\n    \"mossy_stone_brick\",\n    \"smooth_quartz\",\n    \"stone\",\n    \"cut_sandstone\",\n    \"cut_red_sandstone\"\n  ],\n  \"stone_type\": [\n    \"stone\",\n    \"granite\",\n    \"granite_smooth\",\n    \"diorite\",\n    \"diorite_smooth\",\n    \"andesite\",\n    \"andesite_smooth\"\n  ],\n  \"stripped_bit\": [\n    0,\n    1\n  ],\n  \"structure_block_type\": [\n    \"data\",\n    \"save\",\n    \"load\",\n    \"corner\",\n    \"invalid\",\n    \"export\"\n  ],\n  \"suspended_bit\": [\n    0,\n    1\n  ],\n  \"tall_grass_type\": [\n    \"default\",\n    \"tall\",\n    \"fern\",\n    \"snow\"\n  ],\n  \"toggle_bit\": [\n    0,\n    1\n  ],\n  \"top_slot_bit\": [\n    0,\n    1\n  ],\n  \"torch_facing_direction\": [\n    \"unknown\",\n    \"west\",\n    \"east\",\n    \"north\",\n    \"south\",\n    \"top\"\n  ],\n  \"triggered_bit\": [\n    0,\n    1\n  ],\n  \"turtle_egg_count\": [\n    \"one_egg\",\n    \"two_egg\",\n    \"three_egg\",\n    \"four_egg\"\n  ],\n  \"update_bit\": [\n    0,\n    1\n  ],\n  \"upper_block_bit\": [\n    0,\n    1\n  ],\n  \"upside_down_bit\": [\n    0,\n    1\n  ],\n  \"vine_direction_bits\": [\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7,\n    8,\n    9,\n    10,\n    11,\n    12,\n    13,\n    14,\n    15\n  ],\n  \"wall_block_type\": [\n    \"cobblestone\",\n    \"mossy_cobblestone\",\n    \"granite\",\n    \"diorite\",\n    \"andesite\",\n    \"sandstone\",\n    \"brick\",\n    \"stone_brick\",\n    \"mossy_stone_brick\",\n    \"nether_brick\",\n    \"end_brick\",\n    \"prismarine\",\n    \"red_sandstone\",\n    \"red_nether_brick\"\n  ],\n  \"weirdo_direction\": [\n    0,\n    1,\n    2,\n    3\n  ],\n  \"wood_type\": [\n    \"oak\",\n    \"spruce\",\n    \"birch\",\n    \"jungle\",\n    \"acacia\",\n    \"dark_oak\"\n  ]\n}"
  },
  {
    "path": "resources/rotation_flip_data.json",
    "content": "{\"log:0\":{\"default\":{\"old_log_type\":\"oak\",\"pillar_axis\":\"y\"}},\"log:1\":{\"default\":{\"old_log_type\":\"spruce\",\"pillar_axis\":\"y\"}},\"log:2\":{\"default\":{\"old_log_type\":\"birch\",\"pillar_axis\":\"y\"}},\"log:3\":{\"default\":{\"old_log_type\":\"jungle\",\"pillar_axis\":\"y\"}},\"log:4\":{\"default\":{\"old_log_type\":\"oak\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"log:5\":{\"default\":{\"old_log_type\":\"spruce\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"log:6\":{\"default\":{\"old_log_type\":\"birch\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"log:7\":{\"default\":{\"old_log_type\":\"jungle\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"log:8\":{\"default\":{\"old_log_type\":\"oak\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"log:9\":{\"default\":{\"old_log_type\":\"spruce\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"log:10\":{\"default\":{\"old_log_type\":\"birch\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"log:11\":{\"default\":{\"old_log_type\":\"jungle\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"log:12\":{\"default\":{\"pillar_axis\":\"y\",\"stripped_bit\":false,\"wood_type\":\"oak\"}},\"log:13\":{\"default\":{\"pillar_axis\":\"y\",\"stripped_bit\":false,\"wood_type\":\"spruce\"}},\"dispenser:0\":{\"default\":{\"facing_direction\":0,\"triggered_bit\":false}},\"dispenser:1\":{\"default\":{\"facing_direction\":1,\"triggered_bit\":false}},\"dispenser:2\":{\"default\":{\"facing_direction\":2,\"triggered_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"dispenser:3\":{\"default\":{\"facing_direction\":3,\"triggered_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"dispenser:4\":{\"default\":{\"facing_direction\":4,\"triggered_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"dispenser:5\":{\"default\":{\"facing_direction\":5,\"triggered_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"dispenser:8\":{\"default\":{\"facing_direction\":0,\"triggered_bit\":false}},\"dispenser:9\":{\"default\":{\"facing_direction\":1,\"triggered_bit\":false}},\"dispenser:10\":{\"default\":{\"facing_direction\":2,\"triggered_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"dispenser:11\":{\"default\":{\"facing_direction\":3,\"triggered_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"dispenser:12\":{\"default\":{\"facing_direction\":4,\"triggered_bit\":false},\"90\":{\"facing_direction\":2,\"triggered_bit\":true},\"180\":{\"facing_direction\":5,\"triggered_bit\":true},\"270\":{\"facing_direction\":3,\"triggered_bit\":true},\"x\":{\"triggered_bit\":true},\"z\":{\"facing_direction\":5,\"triggered_bit\":true},\"xz\":{\"facing_direction\":5,\"triggered_bit\":true}},\"dispenser:13\":{\"default\":{\"facing_direction\":5,\"triggered_bit\":false},\"90\":{\"facing_direction\":3,\"triggered_bit\":true},\"180\":{\"facing_direction\":4,\"triggered_bit\":true},\"270\":{\"facing_direction\":2,\"triggered_bit\":true},\"x\":{\"triggered_bit\":true},\"z\":{\"facing_direction\":4,\"triggered_bit\":true},\"xz\":{\"facing_direction\":4,\"triggered_bit\":true}},\"golden_rail:0\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},\"golden_rail:1\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},\"golden_rail:2\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":2},\"90\":{\"rail_direction\":5},\"180\":{\"rail_direction\":3},\"270\":{\"rail_direction\":4},\"z\":{\"rail_direction\":3},\"xz\":{\"rail_direction\":3}},\"golden_rail:3\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},\"golden_rail:4\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},\"golden_rail:5\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":5},\"90\":{\"rail_direction\":3},\"180\":{\"rail_direction\":4},\"270\":{\"rail_direction\":2},\"x\":{\"rail_direction\":4},\"xz\":{\"rail_direction\":4}},\"golden_rail:8\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":0},\"90\":{\"rail_data_bit\":true,\"rail_direction\":1},\"180\":{\"rail_data_bit\":true},\"270\":{\"rail_data_bit\":true,\"rail_direction\":1},\"x\":{\"rail_data_bit\":true},\"z\":{\"rail_data_bit\":true},\"xz\":{\"rail_data_bit\":true}},\"golden_rail:9\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},\"golden_rail:10\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":2},\"90\":{\"rail_data_bit\":true,\"rail_direction\":5},\"180\":{\"rail_data_bit\":true,\"rail_direction\":3},\"270\":{\"rail_data_bit\":true,\"rail_direction\":4},\"x\":{\"rail_data_bit\":true},\"z\":{\"rail_data_bit\":true,\"rail_direction\":3},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":3}},\"golden_rail:11\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":3},\"90\":{\"rail_data_bit\":true,\"rail_direction\":4},\"180\":{\"rail_data_bit\":true,\"rail_direction\":2},\"270\":{\"rail_data_bit\":true,\"rail_direction\":5},\"x\":{\"rail_data_bit\":true},\"z\":{\"rail_data_bit\":true,\"rail_direction\":2},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":2}},\"golden_rail:12\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},\"golden_rail:13\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":5},\"90\":{\"rail_data_bit\":true,\"rail_direction\":3},\"180\":{\"rail_data_bit\":true,\"rail_direction\":4},\"270\":{\"rail_data_bit\":true,\"rail_direction\":2},\"x\":{\"rail_data_bit\":true,\"rail_direction\":4},\"z\":{\"rail_data_bit\":true},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":4}},\"detector_rail:0\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},\"detector_rail:1\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},\"detector_rail:2\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":2},\"90\":{\"rail_direction\":5},\"180\":{\"rail_direction\":3},\"270\":{\"rail_direction\":4},\"z\":{\"rail_direction\":3},\"xz\":{\"rail_direction\":3}},\"detector_rail:3\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},\"detector_rail:4\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},\"detector_rail:5\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":5},\"90\":{\"rail_direction\":3},\"180\":{\"rail_direction\":4},\"270\":{\"rail_direction\":2},\"x\":{\"rail_direction\":4},\"xz\":{\"rail_direction\":4}},\"detector_rail:8\":{\"default\":{\"rail_data_bit\":true,\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},\"detector_rail:9\":{\"default\":{\"rail_data_bit\":true,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},\"detector_rail:10\":{\"default\":{\"rail_data_bit\":true,\"rail_direction\":2},\"90\":{\"rail_direction\":5},\"180\":{\"rail_direction\":3},\"270\":{\"rail_direction\":4},\"z\":{\"rail_direction\":3},\"xz\":{\"rail_direction\":3}},\"detector_rail:11\":{\"default\":{\"rail_data_bit\":true,\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},\"detector_rail:12\":{\"default\":{\"rail_data_bit\":true,\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},\"detector_rail:13\":{\"default\":{\"rail_data_bit\":true,\"rail_direction\":5},\"90\":{\"rail_direction\":3},\"180\":{\"rail_direction\":4},\"270\":{\"rail_direction\":2},\"x\":{\"rail_direction\":4},\"xz\":{\"rail_direction\":4}},\"sticky_piston:0\":{\"default\":{\"facing_direction\":0}},\"sticky_piston:1\":{\"default\":{\"facing_direction\":1}},\"sticky_piston:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"sticky_piston:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"sticky_piston:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"sticky_piston:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"piston:0\":{\"default\":{\"facing_direction\":0}},\"piston:1\":{\"default\":{\"facing_direction\":1}},\"piston:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"piston:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"piston:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"piston:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"torch:0\":{\"default\":{\"torch_facing_direction\":\"west\"},\"90\":{\"torch_facing_direction\":\"north\"},\"180\":{\"torch_facing_direction\":\"east\"},\"270\":{\"torch_facing_direction\":\"south\"},\"z\":{\"torch_facing_direction\":\"east\"},\"xz\":{\"torch_facing_direction\":\"east\"}},\"torch:1\":{\"default\":{\"torch_facing_direction\":\"west\"},\"90\":{\"torch_facing_direction\":\"north\"},\"180\":{\"torch_facing_direction\":\"east\"},\"270\":{\"torch_facing_direction\":\"south\"},\"z\":{\"torch_facing_direction\":\"east\"},\"xz\":{\"torch_facing_direction\":\"east\"}},\"torch:2\":{\"default\":{\"torch_facing_direction\":\"east\"},\"90\":{\"torch_facing_direction\":\"south\"},\"180\":{\"torch_facing_direction\":\"west\"},\"270\":{\"torch_facing_direction\":\"north\"},\"z\":{\"torch_facing_direction\":\"west\"},\"xz\":{\"torch_facing_direction\":\"west\"}},\"torch:3\":{\"default\":{\"torch_facing_direction\":\"north\"},\"90\":{\"torch_facing_direction\":\"east\"},\"180\":{\"torch_facing_direction\":\"south\"},\"270\":{\"torch_facing_direction\":\"west\"},\"x\":{\"torch_facing_direction\":\"south\"},\"xz\":{\"torch_facing_direction\":\"south\"}},\"torch:4\":{\"default\":{\"torch_facing_direction\":\"south\"},\"90\":{\"torch_facing_direction\":\"west\"},\"180\":{\"torch_facing_direction\":\"north\"},\"270\":{\"torch_facing_direction\":\"east\"},\"x\":{\"torch_facing_direction\":\"north\"},\"xz\":{\"torch_facing_direction\":\"north\"}},\"torch:5\":{\"default\":{\"torch_facing_direction\":\"top\"}},\"oak_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"oak_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"oak_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"oak_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"oak_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"oak_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"oak_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"oak_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"chest:0\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"chest:1\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"chest:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"chest:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"chest:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"chest:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"furnace:0\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"furnace:1\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"furnace:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"furnace:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"furnace:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"furnace:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"lit_furnace:0\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"lit_furnace:1\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"lit_furnace:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"lit_furnace:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"lit_furnace:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"lit_furnace:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"standing_sign:0\":{\"default\":{\"ground_sign_direction\":0},\"90\":{\"ground_sign_direction\":4},\"180\":{\"ground_sign_direction\":8},\"270\":{\"ground_sign_direction\":12},\"x\":{\"ground_sign_direction\":8},\"xz\":{\"ground_sign_direction\":8}},\"standing_sign:1\":{\"default\":{\"ground_sign_direction\":1},\"90\":{\"ground_sign_direction\":5},\"180\":{\"ground_sign_direction\":9},\"270\":{\"ground_sign_direction\":13},\"x\":{\"ground_sign_direction\":7},\"z\":{\"ground_sign_direction\":15},\"xz\":{\"ground_sign_direction\":9}},\"standing_sign:2\":{\"default\":{\"ground_sign_direction\":2},\"90\":{\"ground_sign_direction\":6},\"180\":{\"ground_sign_direction\":10},\"270\":{\"ground_sign_direction\":14},\"x\":{\"ground_sign_direction\":6},\"z\":{\"ground_sign_direction\":14},\"xz\":{\"ground_sign_direction\":10}},\"standing_sign:3\":{\"default\":{\"ground_sign_direction\":3},\"90\":{\"ground_sign_direction\":7},\"180\":{\"ground_sign_direction\":11},\"270\":{\"ground_sign_direction\":15},\"x\":{\"ground_sign_direction\":5},\"z\":{\"ground_sign_direction\":13},\"xz\":{\"ground_sign_direction\":11}},\"standing_sign:4\":{\"default\":{\"ground_sign_direction\":4},\"90\":{\"ground_sign_direction\":8},\"180\":{\"ground_sign_direction\":12},\"270\":{\"ground_sign_direction\":0},\"z\":{\"ground_sign_direction\":12},\"xz\":{\"ground_sign_direction\":12}},\"standing_sign:5\":{\"default\":{\"ground_sign_direction\":5},\"90\":{\"ground_sign_direction\":9},\"180\":{\"ground_sign_direction\":13},\"270\":{\"ground_sign_direction\":1},\"x\":{\"ground_sign_direction\":3},\"z\":{\"ground_sign_direction\":11},\"xz\":{\"ground_sign_direction\":13}},\"standing_sign:6\":{\"default\":{\"ground_sign_direction\":6},\"90\":{\"ground_sign_direction\":10},\"180\":{\"ground_sign_direction\":14},\"270\":{\"ground_sign_direction\":2},\"x\":{\"ground_sign_direction\":2},\"z\":{\"ground_sign_direction\":10},\"xz\":{\"ground_sign_direction\":14}},\"standing_sign:7\":{\"default\":{\"ground_sign_direction\":7},\"90\":{\"ground_sign_direction\":11},\"180\":{\"ground_sign_direction\":15},\"270\":{\"ground_sign_direction\":3},\"x\":{\"ground_sign_direction\":1},\"z\":{\"ground_sign_direction\":9},\"xz\":{\"ground_sign_direction\":15}},\"standing_sign:8\":{\"default\":{\"ground_sign_direction\":8},\"90\":{\"ground_sign_direction\":12},\"180\":{\"ground_sign_direction\":0},\"270\":{\"ground_sign_direction\":4},\"x\":{\"ground_sign_direction\":0},\"xz\":{\"ground_sign_direction\":0}},\"standing_sign:9\":{\"default\":{\"ground_sign_direction\":9},\"90\":{\"ground_sign_direction\":13},\"180\":{\"ground_sign_direction\":1},\"270\":{\"ground_sign_direction\":5},\"x\":{\"ground_sign_direction\":15},\"z\":{\"ground_sign_direction\":7},\"xz\":{\"ground_sign_direction\":1}},\"standing_sign:10\":{\"default\":{\"ground_sign_direction\":10},\"90\":{\"ground_sign_direction\":14},\"180\":{\"ground_sign_direction\":2},\"270\":{\"ground_sign_direction\":6},\"x\":{\"ground_sign_direction\":14},\"z\":{\"ground_sign_direction\":6},\"xz\":{\"ground_sign_direction\":2}},\"standing_sign:11\":{\"default\":{\"ground_sign_direction\":11},\"90\":{\"ground_sign_direction\":15},\"180\":{\"ground_sign_direction\":3},\"270\":{\"ground_sign_direction\":7},\"x\":{\"ground_sign_direction\":13},\"z\":{\"ground_sign_direction\":5},\"xz\":{\"ground_sign_direction\":3}},\"standing_sign:12\":{\"default\":{\"ground_sign_direction\":12},\"90\":{\"ground_sign_direction\":0},\"180\":{\"ground_sign_direction\":4},\"270\":{\"ground_sign_direction\":8},\"z\":{\"ground_sign_direction\":4},\"xz\":{\"ground_sign_direction\":4}},\"standing_sign:13\":{\"default\":{\"ground_sign_direction\":13},\"90\":{\"ground_sign_direction\":1},\"180\":{\"ground_sign_direction\":5},\"270\":{\"ground_sign_direction\":9},\"x\":{\"ground_sign_direction\":11},\"z\":{\"ground_sign_direction\":3},\"xz\":{\"ground_sign_direction\":5}},\"standing_sign:14\":{\"default\":{\"ground_sign_direction\":14},\"90\":{\"ground_sign_direction\":2},\"180\":{\"ground_sign_direction\":6},\"270\":{\"ground_sign_direction\":10},\"x\":{\"ground_sign_direction\":10},\"z\":{\"ground_sign_direction\":2},\"xz\":{\"ground_sign_direction\":6}},\"standing_sign:15\":{\"default\":{\"ground_sign_direction\":15},\"90\":{\"ground_sign_direction\":3},\"180\":{\"ground_sign_direction\":7},\"270\":{\"ground_sign_direction\":11},\"x\":{\"ground_sign_direction\":9},\"z\":{\"ground_sign_direction\":1},\"xz\":{\"ground_sign_direction\":7}},\"wooden_door:0\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"wooden_door:1\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"wooden_door:2\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"wooden_door:3\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"wooden_door:4\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"wooden_door:5\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"wooden_door:6\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"wooden_door:7\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"wooden_door:8\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"wooden_door:9\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"wooden_door:10\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"wooden_door:11\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"wooden_door:12\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"wooden_door:13\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"wooden_door:14\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"wooden_door:15\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"ladder:0\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"ladder:1\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"ladder:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"ladder:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"ladder:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"ladder:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"rail:0\":{\"default\":{\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},\"rail:1\":{\"default\":{\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},\"rail:2\":{\"default\":{\"rail_direction\":2},\"90\":{\"rail_direction\":5},\"180\":{\"rail_direction\":3},\"270\":{\"rail_direction\":4},\"z\":{\"rail_direction\":3},\"xz\":{\"rail_direction\":3}},\"rail:3\":{\"default\":{\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},\"rail:4\":{\"default\":{\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},\"rail:5\":{\"default\":{\"rail_direction\":5},\"90\":{\"rail_direction\":3},\"180\":{\"rail_direction\":4},\"270\":{\"rail_direction\":2},\"x\":{\"rail_direction\":4},\"xz\":{\"rail_direction\":4}},\"rail:6\":{\"default\":{\"rail_direction\":6},\"90\":{\"rail_direction\":7},\"180\":{\"rail_direction\":8},\"270\":{\"rail_direction\":9},\"x\":{\"rail_direction\":9},\"z\":{\"rail_direction\":7},\"xz\":{\"rail_direction\":8}},\"rail:7\":{\"default\":{\"rail_direction\":7},\"90\":{\"rail_direction\":8},\"180\":{\"rail_direction\":9},\"270\":{\"rail_direction\":6},\"x\":{\"rail_direction\":8},\"z\":{\"rail_direction\":6},\"xz\":{\"rail_direction\":9}},\"rail:8\":{\"default\":{\"rail_direction\":8},\"90\":{\"rail_direction\":9},\"180\":{\"rail_direction\":6},\"270\":{\"rail_direction\":7},\"x\":{\"rail_direction\":7},\"z\":{\"rail_direction\":9},\"xz\":{\"rail_direction\":6}},\"rail:9\":{\"default\":{\"rail_direction\":9},\"90\":{\"rail_direction\":6},\"180\":{\"rail_direction\":7},\"270\":{\"rail_direction\":8},\"x\":{\"rail_direction\":6},\"z\":{\"rail_direction\":8},\"xz\":{\"rail_direction\":7}},\"stone_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"stone_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"stone_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"stone_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"stone_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"stone_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"stone_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"stone_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"wall_sign:0\":{\"default\":{\"facing_direction\":0}},\"wall_sign:1\":{\"default\":{\"facing_direction\":1}},\"wall_sign:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"wall_sign:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"wall_sign:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"wall_sign:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"lever:0\":{\"default\":{\"lever_direction\":\"down_east_west\",\"open_bit\":false},\"90\":{\"lever_direction\":\"down_north_south\"},\"270\":{\"lever_direction\":\"down_north_south\"}},\"lever:1\":{\"default\":{\"lever_direction\":\"east\",\"open_bit\":false},\"90\":{\"lever_direction\":\"south\"},\"180\":{\"lever_direction\":\"west\"},\"270\":{\"lever_direction\":\"north\"},\"z\":{\"lever_direction\":\"west\"},\"xz\":{\"lever_direction\":\"west\"}},\"lever:2\":{\"default\":{\"lever_direction\":\"west\",\"open_bit\":false},\"90\":{\"lever_direction\":\"north\"},\"180\":{\"lever_direction\":\"east\"},\"270\":{\"lever_direction\":\"south\"},\"z\":{\"lever_direction\":\"east\"},\"xz\":{\"lever_direction\":\"east\"}},\"lever:3\":{\"default\":{\"lever_direction\":\"south\",\"open_bit\":false},\"90\":{\"lever_direction\":\"west\"},\"180\":{\"lever_direction\":\"north\"},\"270\":{\"lever_direction\":\"east\"},\"x\":{\"lever_direction\":\"north\"},\"xz\":{\"lever_direction\":\"north\"}},\"lever:4\":{\"default\":{\"lever_direction\":\"north\",\"open_bit\":false},\"90\":{\"lever_direction\":\"east\"},\"180\":{\"lever_direction\":\"south\"},\"270\":{\"lever_direction\":\"west\"},\"x\":{\"lever_direction\":\"south\"},\"xz\":{\"lever_direction\":\"south\"}},\"lever:5\":{\"default\":{\"lever_direction\":\"up_north_south\",\"open_bit\":false},\"90\":{\"lever_direction\":\"up_east_west\"},\"270\":{\"lever_direction\":\"up_east_west\"}},\"lever:6\":{\"default\":{\"lever_direction\":\"up_east_west\",\"open_bit\":false},\"90\":{\"lever_direction\":\"up_north_south\"},\"270\":{\"lever_direction\":\"up_north_south\"}},\"lever:7\":{\"default\":{\"lever_direction\":\"down_north_south\",\"open_bit\":false},\"90\":{\"lever_direction\":\"down_east_west\"},\"270\":{\"lever_direction\":\"down_east_west\"}},\"lever:8\":{\"default\":{\"lever_direction\":\"down_east_west\",\"open_bit\":true},\"90\":{\"lever_direction\":\"down_north_south\"},\"270\":{\"lever_direction\":\"down_north_south\"}},\"lever:9\":{\"default\":{\"lever_direction\":\"east\",\"open_bit\":true},\"90\":{\"lever_direction\":\"south\"},\"180\":{\"lever_direction\":\"west\"},\"270\":{\"lever_direction\":\"north\"},\"z\":{\"lever_direction\":\"west\"},\"xz\":{\"lever_direction\":\"west\"}},\"lever:10\":{\"default\":{\"lever_direction\":\"west\",\"open_bit\":true},\"90\":{\"lever_direction\":\"north\"},\"180\":{\"lever_direction\":\"east\"},\"270\":{\"lever_direction\":\"south\"},\"z\":{\"lever_direction\":\"east\"},\"xz\":{\"lever_direction\":\"east\"}},\"lever:11\":{\"default\":{\"lever_direction\":\"south\",\"open_bit\":true},\"90\":{\"lever_direction\":\"west\"},\"180\":{\"lever_direction\":\"north\"},\"270\":{\"lever_direction\":\"east\"},\"x\":{\"lever_direction\":\"north\"},\"xz\":{\"lever_direction\":\"north\"}},\"lever:12\":{\"default\":{\"lever_direction\":\"north\",\"open_bit\":true},\"90\":{\"lever_direction\":\"east\"},\"180\":{\"lever_direction\":\"south\"},\"270\":{\"lever_direction\":\"west\"},\"x\":{\"lever_direction\":\"south\"},\"xz\":{\"lever_direction\":\"south\"}},\"lever:13\":{\"default\":{\"lever_direction\":\"up_north_south\",\"open_bit\":true},\"90\":{\"lever_direction\":\"up_east_west\"},\"270\":{\"lever_direction\":\"up_east_west\"}},\"lever:14\":{\"default\":{\"lever_direction\":\"up_east_west\",\"open_bit\":true},\"90\":{\"lever_direction\":\"up_north_south\"},\"270\":{\"lever_direction\":\"up_north_south\"}},\"lever:15\":{\"default\":{\"lever_direction\":\"down_north_south\",\"open_bit\":true},\"90\":{\"lever_direction\":\"down_east_west\"},\"270\":{\"lever_direction\":\"down_east_west\"}},\"iron_door:0\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"iron_door:1\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"iron_door:2\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"iron_door:3\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"iron_door:4\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"iron_door:5\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"iron_door:6\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"iron_door:7\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"iron_door:8\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"iron_door:9\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"iron_door:10\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"iron_door:11\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"iron_door:12\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"iron_door:13\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"iron_door:14\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"iron_door:15\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"unlit_redstone_torch:0\":{\"default\":{\"torch_facing_direction\":\"unknown\"}},\"unlit_redstone_torch:1\":{\"default\":{\"torch_facing_direction\":\"west\"},\"90\":{\"torch_facing_direction\":\"north\"},\"180\":{\"torch_facing_direction\":\"east\"},\"270\":{\"torch_facing_direction\":\"south\"},\"z\":{\"torch_facing_direction\":\"east\"},\"xz\":{\"torch_facing_direction\":\"east\"}},\"unlit_redstone_torch:2\":{\"default\":{\"torch_facing_direction\":\"east\"},\"90\":{\"torch_facing_direction\":\"south\"},\"180\":{\"torch_facing_direction\":\"west\"},\"270\":{\"torch_facing_direction\":\"north\"},\"z\":{\"torch_facing_direction\":\"west\"},\"xz\":{\"torch_facing_direction\":\"west\"}},\"unlit_redstone_torch:3\":{\"default\":{\"torch_facing_direction\":\"north\"},\"90\":{\"torch_facing_direction\":\"east\"},\"180\":{\"torch_facing_direction\":\"south\"},\"270\":{\"torch_facing_direction\":\"west\"},\"x\":{\"torch_facing_direction\":\"south\"},\"xz\":{\"torch_facing_direction\":\"south\"}},\"unlit_redstone_torch:4\":{\"default\":{\"torch_facing_direction\":\"south\"},\"90\":{\"torch_facing_direction\":\"west\"},\"180\":{\"torch_facing_direction\":\"north\"},\"270\":{\"torch_facing_direction\":\"east\"},\"x\":{\"torch_facing_direction\":\"north\"},\"xz\":{\"torch_facing_direction\":\"north\"}},\"unlit_redstone_torch:5\":{\"default\":{\"torch_facing_direction\":\"top\"}},\"redstone_torch:0\":{\"default\":{\"torch_facing_direction\":\"unknown\"}},\"redstone_torch:1\":{\"default\":{\"torch_facing_direction\":\"west\"},\"90\":{\"torch_facing_direction\":\"north\"},\"180\":{\"torch_facing_direction\":\"east\"},\"270\":{\"torch_facing_direction\":\"south\"},\"z\":{\"torch_facing_direction\":\"east\"},\"xz\":{\"torch_facing_direction\":\"east\"}},\"redstone_torch:2\":{\"default\":{\"torch_facing_direction\":\"east\"},\"90\":{\"torch_facing_direction\":\"south\"},\"180\":{\"torch_facing_direction\":\"west\"},\"270\":{\"torch_facing_direction\":\"north\"},\"z\":{\"torch_facing_direction\":\"west\"},\"xz\":{\"torch_facing_direction\":\"west\"}},\"redstone_torch:3\":{\"default\":{\"torch_facing_direction\":\"north\"},\"90\":{\"torch_facing_direction\":\"east\"},\"180\":{\"torch_facing_direction\":\"south\"},\"270\":{\"torch_facing_direction\":\"west\"},\"x\":{\"torch_facing_direction\":\"south\"},\"xz\":{\"torch_facing_direction\":\"south\"}},\"redstone_torch:4\":{\"default\":{\"torch_facing_direction\":\"south\"},\"90\":{\"torch_facing_direction\":\"west\"},\"180\":{\"torch_facing_direction\":\"north\"},\"270\":{\"torch_facing_direction\":\"east\"},\"x\":{\"torch_facing_direction\":\"north\"},\"xz\":{\"torch_facing_direction\":\"north\"}},\"redstone_torch:5\":{\"default\":{\"torch_facing_direction\":\"top\"}},\"stone_button:0\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":0}},\"stone_button:1\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":1}},\"stone_button:2\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"stone_button:3\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"stone_button:4\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"stone_button:5\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"stone_button:8\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":0}},\"stone_button:9\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":1}},\"stone_button:10\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"stone_button:11\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"stone_button:12\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"stone_button:13\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"pumpkin:0\":{\"default\":{\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"pumpkin:1\":{\"default\":{\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"pumpkin:2\":{\"default\":{\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"pumpkin:3\":{\"default\":{\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"portal:0\":{\"default\":{\"portal_axis\":\"unknown\"},\"90\":{\"portal_axis\":\"x\"},\"180\":{\"portal_axis\":\"z\"},\"270\":{\"portal_axis\":\"x\"},\"x\":{\"portal_axis\":\"z\"},\"z\":{\"portal_axis\":\"z\"},\"xz\":{\"portal_axis\":\"z\"}},\"portal:1\":{\"default\":{\"portal_axis\":\"x\"},\"90\":{\"portal_axis\":\"z\"},\"270\":{\"portal_axis\":\"z\"}},\"portal:2\":{\"default\":{\"portal_axis\":\"z\"},\"90\":{\"portal_axis\":\"x\"},\"270\":{\"portal_axis\":\"x\"}},\"lit_pumpkin:0\":{\"default\":{\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"lit_pumpkin:1\":{\"default\":{\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"lit_pumpkin:2\":{\"default\":{\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"lit_pumpkin:3\":{\"default\":{\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"unpowered_repeater:0\":{\"default\":{\"direction\":0,\"repeater_delay\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"unpowered_repeater:1\":{\"default\":{\"direction\":1,\"repeater_delay\":0},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"unpowered_repeater:2\":{\"default\":{\"direction\":2,\"repeater_delay\":0},\"90\":{\"direction\":3},\"270\":{\"direction\":1}},\"unpowered_repeater:3\":{\"default\":{\"direction\":3,\"repeater_delay\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"unpowered_repeater:4\":{\"default\":{\"direction\":0,\"repeater_delay\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"unpowered_repeater:5\":{\"default\":{\"direction\":1,\"repeater_delay\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"unpowered_repeater:6\":{\"default\":{\"direction\":2,\"repeater_delay\":1},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"unpowered_repeater:7\":{\"default\":{\"direction\":3,\"repeater_delay\":1},\"90\":{\"direction\":0},\"270\":{\"direction\":2}},\"unpowered_repeater:8\":{\"default\":{\"direction\":0,\"repeater_delay\":2},\"90\":{\"direction\":1},\"270\":{\"direction\":3}},\"unpowered_repeater:9\":{\"default\":{\"direction\":1,\"repeater_delay\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"unpowered_repeater:10\":{\"default\":{\"direction\":2,\"repeater_delay\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"unpowered_repeater:11\":{\"default\":{\"direction\":3,\"repeater_delay\":2},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"unpowered_repeater:12\":{\"default\":{\"direction\":0,\"repeater_delay\":3},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"unpowered_repeater:13\":{\"default\":{\"direction\":1,\"repeater_delay\":3},\"90\":{\"direction\":2},\"270\":{\"direction\":0}},\"unpowered_repeater:14\":{\"default\":{\"direction\":2,\"repeater_delay\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"unpowered_repeater:15\":{\"default\":{\"direction\":3,\"repeater_delay\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"powered_repeater:0\":{\"default\":{\"direction\":0,\"repeater_delay\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"powered_repeater:1\":{\"default\":{\"direction\":1,\"repeater_delay\":0},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"powered_repeater:2\":{\"default\":{\"direction\":2,\"repeater_delay\":0},\"90\":{\"direction\":3},\"270\":{\"direction\":1}},\"powered_repeater:3\":{\"default\":{\"direction\":3,\"repeater_delay\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"powered_repeater:4\":{\"default\":{\"direction\":0,\"repeater_delay\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"powered_repeater:5\":{\"default\":{\"direction\":1,\"repeater_delay\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"powered_repeater:6\":{\"default\":{\"direction\":2,\"repeater_delay\":1},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"powered_repeater:7\":{\"default\":{\"direction\":3,\"repeater_delay\":1},\"90\":{\"direction\":0},\"270\":{\"direction\":2}},\"powered_repeater:8\":{\"default\":{\"direction\":0,\"repeater_delay\":2},\"90\":{\"direction\":1},\"270\":{\"direction\":3}},\"powered_repeater:9\":{\"default\":{\"direction\":1,\"repeater_delay\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"powered_repeater:10\":{\"default\":{\"direction\":2,\"repeater_delay\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"powered_repeater:11\":{\"default\":{\"direction\":3,\"repeater_delay\":2},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"powered_repeater:12\":{\"default\":{\"direction\":0,\"repeater_delay\":3},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"powered_repeater:13\":{\"default\":{\"direction\":1,\"repeater_delay\":3},\"90\":{\"direction\":2},\"270\":{\"direction\":0}},\"powered_repeater:14\":{\"default\":{\"direction\":2,\"repeater_delay\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"powered_repeater:15\":{\"default\":{\"direction\":3,\"repeater_delay\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"trapdoor:0\":{\"default\":{\"direction\":0,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"trapdoor:1\":{\"default\":{\"direction\":1,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"trapdoor:2\":{\"default\":{\"direction\":2,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"trapdoor:3\":{\"default\":{\"direction\":3,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"trapdoor:4\":{\"default\":{\"direction\":0,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"trapdoor:5\":{\"default\":{\"direction\":1,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"trapdoor:6\":{\"default\":{\"direction\":2,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"trapdoor:7\":{\"default\":{\"direction\":3,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"trapdoor:8\":{\"default\":{\"direction\":0,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"trapdoor:9\":{\"default\":{\"direction\":1,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"trapdoor:10\":{\"default\":{\"direction\":2,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"trapdoor:11\":{\"default\":{\"direction\":3,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"trapdoor:12\":{\"default\":{\"direction\":0,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"trapdoor:13\":{\"default\":{\"direction\":1,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"trapdoor:14\":{\"default\":{\"direction\":2,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"trapdoor:15\":{\"default\":{\"direction\":3,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"brown_mushroom_block:0\":{\"default\":{\"huge_mushroom_bits\":0}},\"brown_mushroom_block:1\":{\"default\":{\"huge_mushroom_bits\":1}},\"brown_mushroom_block:2\":{\"default\":{\"huge_mushroom_bits\":2}},\"brown_mushroom_block:3\":{\"default\":{\"huge_mushroom_bits\":3}},\"brown_mushroom_block:4\":{\"default\":{\"huge_mushroom_bits\":4}},\"brown_mushroom_block:5\":{\"default\":{\"huge_mushroom_bits\":5}},\"brown_mushroom_block:6\":{\"default\":{\"huge_mushroom_bits\":6}},\"brown_mushroom_block:7\":{\"default\":{\"huge_mushroom_bits\":7}},\"brown_mushroom_block:8\":{\"default\":{\"huge_mushroom_bits\":8}},\"brown_mushroom_block:9\":{\"default\":{\"huge_mushroom_bits\":9}},\"brown_mushroom_block:10\":{\"default\":{\"huge_mushroom_bits\":10}},\"brown_mushroom_block:11\":{\"default\":{\"huge_mushroom_bits\":11}},\"brown_mushroom_block:12\":{\"default\":{\"huge_mushroom_bits\":12}},\"brown_mushroom_block:13\":{\"default\":{\"huge_mushroom_bits\":13}},\"brown_mushroom_block:14\":{\"default\":{\"huge_mushroom_bits\":14}},\"brown_mushroom_block:15\":{\"default\":{\"huge_mushroom_bits\":15}},\"red_mushroom_block:0\":{\"default\":{\"huge_mushroom_bits\":0}},\"red_mushroom_block:1\":{\"default\":{\"huge_mushroom_bits\":1}},\"red_mushroom_block:2\":{\"default\":{\"huge_mushroom_bits\":2}},\"red_mushroom_block:3\":{\"default\":{\"huge_mushroom_bits\":3}},\"red_mushroom_block:4\":{\"default\":{\"huge_mushroom_bits\":4}},\"red_mushroom_block:5\":{\"default\":{\"huge_mushroom_bits\":5}},\"red_mushroom_block:6\":{\"default\":{\"huge_mushroom_bits\":6}},\"red_mushroom_block:7\":{\"default\":{\"huge_mushroom_bits\":7}},\"red_mushroom_block:8\":{\"default\":{\"huge_mushroom_bits\":8}},\"red_mushroom_block:9\":{\"default\":{\"huge_mushroom_bits\":9}},\"red_mushroom_block:10\":{\"default\":{\"huge_mushroom_bits\":10}},\"red_mushroom_block:11\":{\"default\":{\"huge_mushroom_bits\":11}},\"red_mushroom_block:12\":{\"default\":{\"huge_mushroom_bits\":12}},\"red_mushroom_block:13\":{\"default\":{\"huge_mushroom_bits\":13}},\"red_mushroom_block:14\":{\"default\":{\"huge_mushroom_bits\":14}},\"red_mushroom_block:15\":{\"default\":{\"huge_mushroom_bits\":15}},\"vine:0\":{\"default\":{\"vine_direction_bits\":0}},\"vine:1\":{\"default\":{\"vine_direction_bits\":1}},\"vine:2\":{\"default\":{\"vine_direction_bits\":2}},\"vine:3\":{\"default\":{\"vine_direction_bits\":3}},\"vine:4\":{\"default\":{\"vine_direction_bits\":4}},\"vine:5\":{\"default\":{\"vine_direction_bits\":5}},\"vine:6\":{\"default\":{\"vine_direction_bits\":6}},\"vine:7\":{\"default\":{\"vine_direction_bits\":7}},\"vine:8\":{\"default\":{\"vine_direction_bits\":8}},\"vine:9\":{\"default\":{\"vine_direction_bits\":9}},\"vine:10\":{\"default\":{\"vine_direction_bits\":10}},\"vine:11\":{\"default\":{\"vine_direction_bits\":11}},\"vine:12\":{\"default\":{\"vine_direction_bits\":12}},\"vine:13\":{\"default\":{\"vine_direction_bits\":13}},\"vine:14\":{\"default\":{\"vine_direction_bits\":14}},\"vine:15\":{\"default\":{\"vine_direction_bits\":15}},\"fence_gate:0\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"fence_gate:1\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"fence_gate:2\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"fence_gate:3\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"fence_gate:4\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"fence_gate:5\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"fence_gate:6\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"fence_gate:7\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"fence_gate:8\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"fence_gate:9\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"fence_gate:10\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"fence_gate:11\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"fence_gate:12\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"fence_gate:13\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"fence_gate:14\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"fence_gate:15\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"brick_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"brick_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"brick_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"brick_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"brick_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"brick_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"brick_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"brick_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"stone_brick_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"stone_brick_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"stone_brick_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"stone_brick_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"stone_brick_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"stone_brick_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"stone_brick_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"stone_brick_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"nether_brick_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"nether_brick_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"nether_brick_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"nether_brick_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"nether_brick_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"nether_brick_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"nether_brick_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"nether_brick_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"end_portal:0\":[],\"end_portal_frame:0\":{\"default\":{\"direction\":0,\"end_portal_eye_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"end_portal_frame:1\":{\"default\":{\"direction\":1,\"end_portal_eye_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"end_portal_frame:2\":{\"default\":{\"direction\":2,\"end_portal_eye_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"end_portal_frame:3\":{\"default\":{\"direction\":3,\"end_portal_eye_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"end_portal_frame:4\":{\"default\":{\"direction\":0,\"end_portal_eye_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"end_portal_frame:5\":{\"default\":{\"direction\":1,\"end_portal_eye_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"end_portal_frame:6\":{\"default\":{\"direction\":2,\"end_portal_eye_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"end_portal_frame:7\":{\"default\":{\"direction\":3,\"end_portal_eye_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dropper:0\":{\"default\":{\"facing_direction\":0,\"triggered_bit\":false}},\"dropper:1\":{\"default\":{\"facing_direction\":1,\"triggered_bit\":false}},\"dropper:2\":{\"default\":{\"facing_direction\":2,\"triggered_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"dropper:3\":{\"default\":{\"facing_direction\":3,\"triggered_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"dropper:4\":{\"default\":{\"facing_direction\":4,\"triggered_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"dropper:5\":{\"default\":{\"facing_direction\":5,\"triggered_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"dropper:8\":{\"default\":{\"facing_direction\":0,\"triggered_bit\":false},\"90\":{\"triggered_bit\":true},\"180\":{\"triggered_bit\":true},\"270\":{\"triggered_bit\":true},\"x\":{\"triggered_bit\":true},\"z\":{\"triggered_bit\":true},\"xz\":{\"triggered_bit\":true}},\"dropper:9\":{\"default\":{\"facing_direction\":1,\"triggered_bit\":false},\"90\":{\"triggered_bit\":true},\"180\":{\"triggered_bit\":true},\"270\":{\"triggered_bit\":true},\"x\":{\"triggered_bit\":true},\"z\":{\"triggered_bit\":true},\"xz\":{\"triggered_bit\":true}},\"dropper:10\":{\"default\":{\"facing_direction\":2,\"triggered_bit\":false},\"90\":{\"facing_direction\":5,\"triggered_bit\":true},\"180\":{\"facing_direction\":3,\"triggered_bit\":true},\"270\":{\"facing_direction\":4,\"triggered_bit\":true},\"x\":{\"facing_direction\":3,\"triggered_bit\":true},\"z\":{\"triggered_bit\":true},\"xz\":{\"facing_direction\":3,\"triggered_bit\":true}},\"dropper:11\":{\"default\":{\"facing_direction\":3,\"triggered_bit\":false},\"90\":{\"facing_direction\":4,\"triggered_bit\":true},\"180\":{\"facing_direction\":2,\"triggered_bit\":true},\"270\":{\"facing_direction\":5,\"triggered_bit\":true},\"x\":{\"facing_direction\":2,\"triggered_bit\":true},\"z\":{\"triggered_bit\":true},\"xz\":{\"facing_direction\":2,\"triggered_bit\":true}},\"dropper:12\":{\"default\":{\"facing_direction\":4,\"triggered_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"dropper:13\":{\"default\":{\"facing_direction\":5,\"triggered_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"activator_rail:0\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},\"activator_rail:1\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},\"activator_rail:2\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":2},\"90\":{\"rail_direction\":5},\"180\":{\"rail_direction\":3},\"270\":{\"rail_direction\":4},\"z\":{\"rail_direction\":3},\"xz\":{\"rail_direction\":3}},\"activator_rail:3\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},\"activator_rail:4\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":4},\"90\":{\"rail_direction\":2},\"180\":{\"rail_direction\":5},\"270\":{\"rail_direction\":3},\"x\":{\"rail_direction\":5},\"xz\":{\"rail_direction\":5}},\"activator_rail:5\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":5},\"90\":{\"rail_direction\":3},\"180\":{\"rail_direction\":4},\"270\":{\"rail_direction\":2},\"x\":{\"rail_direction\":4},\"xz\":{\"rail_direction\":4}},\"activator_rail:8\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":0},\"90\":{\"rail_direction\":1},\"270\":{\"rail_direction\":1}},\"activator_rail:9\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":1},\"90\":{\"rail_direction\":0},\"270\":{\"rail_direction\":0}},\"activator_rail:10\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":2},\"90\":{\"rail_data_bit\":true,\"rail_direction\":5},\"180\":{\"rail_data_bit\":true,\"rail_direction\":3},\"270\":{\"rail_data_bit\":true,\"rail_direction\":4},\"x\":{\"rail_data_bit\":true},\"z\":{\"rail_data_bit\":true,\"rail_direction\":3},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":3}},\"activator_rail:11\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":3},\"90\":{\"rail_direction\":4},\"180\":{\"rail_direction\":2},\"270\":{\"rail_direction\":5},\"z\":{\"rail_direction\":2},\"xz\":{\"rail_direction\":2}},\"activator_rail:12\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":4},\"90\":{\"rail_data_bit\":true,\"rail_direction\":2},\"180\":{\"rail_data_bit\":true,\"rail_direction\":5},\"270\":{\"rail_data_bit\":true,\"rail_direction\":3},\"x\":{\"rail_data_bit\":true,\"rail_direction\":5},\"z\":{\"rail_data_bit\":true},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":5}},\"activator_rail:13\":{\"default\":{\"rail_data_bit\":false,\"rail_direction\":5},\"90\":{\"rail_data_bit\":true,\"rail_direction\":3},\"180\":{\"rail_data_bit\":true,\"rail_direction\":4},\"270\":{\"rail_data_bit\":true,\"rail_direction\":2},\"x\":{\"rail_data_bit\":true,\"rail_direction\":4},\"z\":{\"rail_data_bit\":true},\"xz\":{\"rail_data_bit\":true,\"rail_direction\":4}},\"cocoa:0\":[],\"cocoa:1\":[],\"cocoa:2\":[],\"cocoa:3\":[],\"cocoa:4\":[],\"cocoa:5\":[],\"cocoa:6\":[],\"cocoa:7\":[],\"cocoa:8\":[],\"cocoa:9\":[],\"cocoa:10\":[],\"cocoa:11\":[],\"sandstone_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"sandstone_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"sandstone_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"sandstone_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"sandstone_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"sandstone_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"sandstone_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"sandstone_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"ender_chest:0\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"ender_chest:1\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"ender_chest:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"ender_chest:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"ender_chest:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"ender_chest:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"tripwire_hook:0\":{\"default\":{\"attached_bit\":false,\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"tripwire_hook:1\":{\"default\":{\"attached_bit\":false,\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"tripwire_hook:2\":{\"default\":{\"attached_bit\":false,\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"tripwire_hook:3\":{\"default\":{\"attached_bit\":false,\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"tripwire_hook:4\":{\"default\":{\"attached_bit\":false,\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"tripwire_hook:5\":{\"default\":{\"attached_bit\":false,\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"tripwire_hook:6\":{\"default\":{\"attached_bit\":false,\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"tripwire_hook:7\":{\"default\":{\"attached_bit\":false,\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"tripwire_hook:8\":{\"default\":{\"attached_bit\":false,\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"tripwire_hook:9\":{\"default\":{\"attached_bit\":false,\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"tripwire_hook:10\":{\"default\":{\"attached_bit\":false,\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"tripwire_hook:11\":{\"default\":{\"attached_bit\":false,\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"tripwire_hook:12\":{\"default\":{\"attached_bit\":false,\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"tripwire_hook:13\":{\"default\":{\"attached_bit\":false,\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"tripwire_hook:14\":{\"default\":{\"attached_bit\":false,\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"tripwire_hook:15\":{\"default\":{\"attached_bit\":false,\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"spruce_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"spruce_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"spruce_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"spruce_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"spruce_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"spruce_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"spruce_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"spruce_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"birch_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"birch_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"birch_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"birch_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"birch_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"birch_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"birch_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"birch_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"jungle_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"jungle_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"jungle_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"jungle_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"jungle_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"jungle_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"jungle_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"jungle_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"command_block:0\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":0}},\"command_block:1\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":1}},\"command_block:2\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"command_block:3\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"command_block:4\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"command_block:5\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"command_block:8\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":0},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},\"command_block:9\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":1},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},\"command_block:10\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":2},\"90\":{\"conditional_bit\":false,\"facing_direction\":5},\"180\":{\"conditional_bit\":false,\"facing_direction\":3},\"270\":{\"conditional_bit\":false,\"facing_direction\":4},\"x\":{\"conditional_bit\":false,\"facing_direction\":3},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":3}},\"command_block:11\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":3},\"90\":{\"conditional_bit\":false,\"facing_direction\":4},\"180\":{\"conditional_bit\":false,\"facing_direction\":2},\"270\":{\"conditional_bit\":false,\"facing_direction\":5},\"x\":{\"conditional_bit\":false,\"facing_direction\":2},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":2}},\"command_block:12\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":4},\"90\":{\"conditional_bit\":false,\"facing_direction\":2},\"180\":{\"conditional_bit\":false,\"facing_direction\":5},\"270\":{\"conditional_bit\":false,\"facing_direction\":3},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":5},\"xz\":{\"conditional_bit\":false,\"facing_direction\":5}},\"command_block:13\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":5},\"90\":{\"conditional_bit\":false,\"facing_direction\":3},\"180\":{\"conditional_bit\":false,\"facing_direction\":4},\"270\":{\"conditional_bit\":false,\"facing_direction\":2},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":4},\"xz\":{\"conditional_bit\":false,\"facing_direction\":4}},\"wooden_button:0\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":0}},\"wooden_button:1\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":1}},\"wooden_button:2\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"wooden_button:3\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"wooden_button:4\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"wooden_button:5\":{\"default\":{\"button_pressed_bit\":false,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"wooden_button:8\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":0}},\"wooden_button:9\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":1}},\"wooden_button:10\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"wooden_button:11\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"wooden_button:12\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"wooden_button:13\":{\"default\":{\"button_pressed_bit\":true,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"skull:0\":{\"default\":{\"facing_direction\":0,\"no_drop_bit\":false}},\"skull:1\":{\"default\":{\"facing_direction\":1,\"no_drop_bit\":false}},\"skull:2\":{\"default\":{\"facing_direction\":2,\"no_drop_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"skull:3\":{\"default\":{\"facing_direction\":3,\"no_drop_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"skull:4\":{\"default\":{\"facing_direction\":4,\"no_drop_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"skull:5\":{\"default\":{\"facing_direction\":5,\"no_drop_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"skull:8\":{\"default\":{\"facing_direction\":0,\"no_drop_bit\":true}},\"skull:9\":{\"default\":{\"facing_direction\":1,\"no_drop_bit\":true}},\"skull:10\":{\"default\":{\"facing_direction\":2,\"no_drop_bit\":true},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"skull:11\":{\"default\":{\"facing_direction\":3,\"no_drop_bit\":true},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"skull:12\":{\"default\":{\"facing_direction\":4,\"no_drop_bit\":true},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"skull:13\":{\"default\":{\"facing_direction\":5,\"no_drop_bit\":true},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"anvil:0\":{\"default\":{\"damage\":\"undamaged\",\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"anvil:1\":{\"default\":{\"damage\":\"undamaged\",\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"anvil:2\":{\"default\":{\"damage\":\"undamaged\",\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"anvil:3\":{\"default\":{\"damage\":\"undamaged\",\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"anvil:4\":{\"default\":{\"damage\":\"slightly_damaged\",\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"anvil:5\":{\"default\":{\"damage\":\"slightly_damaged\",\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"anvil:6\":{\"default\":{\"damage\":\"slightly_damaged\",\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"anvil:7\":{\"default\":{\"damage\":\"slightly_damaged\",\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"anvil:8\":{\"default\":{\"damage\":\"very_damaged\",\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"anvil:9\":{\"default\":{\"damage\":\"very_damaged\",\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"anvil:10\":{\"default\":{\"damage\":\"very_damaged\",\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"anvil:11\":{\"default\":{\"damage\":\"very_damaged\",\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"anvil:12\":{\"default\":{\"damage\":\"broken\",\"direction\":0},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"anvil:13\":{\"default\":{\"damage\":\"broken\",\"direction\":1},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"anvil:14\":{\"default\":{\"damage\":\"broken\",\"direction\":2},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"anvil:15\":{\"default\":{\"damage\":\"broken\",\"direction\":3},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"trapped_chest:0\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"trapped_chest:1\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"trapped_chest:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"trapped_chest:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"trapped_chest:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"trapped_chest:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"unpowered_comparator:0\":{\"default\":{\"direction\":0,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"unpowered_comparator:1\":{\"default\":{\"direction\":1,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"unpowered_comparator:2\":{\"default\":{\"direction\":2,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"unpowered_comparator:3\":{\"default\":{\"direction\":3,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"unpowered_comparator:4\":{\"default\":{\"direction\":0,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"unpowered_comparator:5\":{\"default\":{\"direction\":1,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"unpowered_comparator:6\":{\"default\":{\"direction\":2,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"unpowered_comparator:7\":{\"default\":{\"direction\":3,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"unpowered_comparator:8\":{\"default\":{\"direction\":0,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"unpowered_comparator:9\":{\"default\":{\"direction\":1,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"unpowered_comparator:10\":{\"default\":{\"direction\":2,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"unpowered_comparator:11\":{\"default\":{\"direction\":3,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"unpowered_comparator:12\":{\"default\":{\"direction\":0,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"unpowered_comparator:13\":{\"default\":{\"direction\":1,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"unpowered_comparator:14\":{\"default\":{\"direction\":2,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"unpowered_comparator:15\":{\"default\":{\"direction\":3,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"powered_comparator:0\":{\"default\":{\"direction\":0,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"powered_comparator:1\":{\"default\":{\"direction\":1,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"powered_comparator:2\":{\"default\":{\"direction\":2,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"powered_comparator:3\":{\"default\":{\"direction\":3,\"output_lit_bit\":false,\"output_subtract_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"powered_comparator:4\":{\"default\":{\"direction\":0,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"powered_comparator:5\":{\"default\":{\"direction\":1,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"powered_comparator:6\":{\"default\":{\"direction\":2,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"powered_comparator:7\":{\"default\":{\"direction\":3,\"output_lit_bit\":false,\"output_subtract_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"powered_comparator:8\":{\"default\":{\"direction\":0,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"powered_comparator:9\":{\"default\":{\"direction\":1,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"powered_comparator:10\":{\"default\":{\"direction\":2,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"powered_comparator:11\":{\"default\":{\"direction\":3,\"output_lit_bit\":true,\"output_subtract_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"powered_comparator:12\":{\"default\":{\"direction\":0,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"powered_comparator:13\":{\"default\":{\"direction\":1,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"powered_comparator:14\":{\"default\":{\"direction\":2,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"powered_comparator:15\":{\"default\":{\"direction\":3,\"output_lit_bit\":true,\"output_subtract_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"hopper:0\":{\"default\":{\"facing_direction\":0,\"toggle_bit\":false}},\"hopper:1\":{\"default\":{\"facing_direction\":1,\"toggle_bit\":false}},\"hopper:2\":{\"default\":{\"facing_direction\":2,\"toggle_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"hopper:3\":{\"default\":{\"facing_direction\":3,\"toggle_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"hopper:4\":{\"default\":{\"facing_direction\":4,\"toggle_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"hopper:5\":{\"default\":{\"facing_direction\":5,\"toggle_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"hopper:8\":{\"default\":{\"facing_direction\":0,\"toggle_bit\":false}},\"hopper:9\":{\"default\":{\"facing_direction\":1,\"toggle_bit\":false}},\"hopper:10\":{\"default\":{\"facing_direction\":2,\"toggle_bit\":false},\"90\":{\"facing_direction\":5,\"toggle_bit\":true},\"180\":{\"facing_direction\":3,\"toggle_bit\":true},\"270\":{\"facing_direction\":4,\"toggle_bit\":true},\"x\":{\"facing_direction\":3,\"toggle_bit\":true},\"z\":{\"toggle_bit\":true},\"xz\":{\"facing_direction\":3,\"toggle_bit\":true}},\"hopper:11\":{\"default\":{\"facing_direction\":3,\"toggle_bit\":false},\"90\":{\"facing_direction\":4,\"toggle_bit\":true},\"180\":{\"facing_direction\":2,\"toggle_bit\":true},\"270\":{\"facing_direction\":5,\"toggle_bit\":true},\"x\":{\"facing_direction\":2,\"toggle_bit\":true},\"z\":{\"toggle_bit\":true},\"xz\":{\"facing_direction\":2,\"toggle_bit\":true}},\"hopper:12\":{\"default\":{\"facing_direction\":4,\"toggle_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"hopper:13\":{\"default\":{\"facing_direction\":5,\"toggle_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"quartz_block:0\":{\"default\":{\"chisel_type\":\"default\",\"pillar_axis\":\"y\"}},\"quartz_block:1\":{\"default\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"y\"}},\"quartz_block:2\":{\"default\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"y\"}},\"quartz_block:3\":{\"default\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"y\"}},\"quartz_block:4\":{\"default\":{\"chisel_type\":\"default\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"quartz_block:5\":{\"default\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"quartz_block:6\":{\"default\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"quartz_block:7\":{\"default\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"quartz_block:8\":{\"default\":{\"chisel_type\":\"default\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"quartz_block:9\":{\"default\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"quartz_block:10\":{\"default\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"quartz_block:11\":{\"default\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"quartz_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"quartz_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"quartz_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"quartz_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"quartz_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"quartz_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"quartz_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"quartz_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"acacia_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"acacia_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"acacia_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"acacia_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"acacia_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"acacia_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"acacia_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"acacia_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"dark_oak_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"dark_oak_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"dark_oak_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"dark_oak_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"dark_oak_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"dark_oak_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"dark_oak_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"dark_oak_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"iron_trapdoor:0\":{\"default\":{\"direction\":0,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"iron_trapdoor:1\":{\"default\":{\"direction\":1,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"iron_trapdoor:2\":{\"default\":{\"direction\":2,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"iron_trapdoor:3\":{\"default\":{\"direction\":3,\"open_bit\":false,\"upside_down_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"iron_trapdoor:4\":{\"default\":{\"direction\":0,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"iron_trapdoor:5\":{\"default\":{\"direction\":1,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"iron_trapdoor:6\":{\"default\":{\"direction\":2,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"iron_trapdoor:7\":{\"default\":{\"direction\":3,\"open_bit\":false,\"upside_down_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"iron_trapdoor:8\":{\"default\":{\"direction\":0,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"iron_trapdoor:9\":{\"default\":{\"direction\":1,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"iron_trapdoor:10\":{\"default\":{\"direction\":2,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"iron_trapdoor:11\":{\"default\":{\"direction\":3,\"open_bit\":true,\"upside_down_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"iron_trapdoor:12\":{\"default\":{\"direction\":0,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"iron_trapdoor:13\":{\"default\":{\"direction\":1,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"iron_trapdoor:14\":{\"default\":{\"direction\":2,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"iron_trapdoor:15\":{\"default\":{\"direction\":3,\"open_bit\":true,\"upside_down_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"hay_block:0\":{\"default\":{\"deprecated\":0,\"pillar_axis\":\"y\"}},\"hay_block:1\":{\"default\":{\"deprecated\":1,\"pillar_axis\":\"y\"}},\"hay_block:2\":{\"default\":{\"deprecated\":2,\"pillar_axis\":\"y\"}},\"hay_block:3\":{\"default\":{\"deprecated\":3,\"pillar_axis\":\"y\"}},\"hay_block:4\":{\"default\":{\"deprecated\":0,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"hay_block:5\":{\"default\":{\"deprecated\":1,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"hay_block:6\":{\"default\":{\"deprecated\":2,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"hay_block:7\":{\"default\":{\"deprecated\":3,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"hay_block:8\":{\"default\":{\"deprecated\":0,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"hay_block:9\":{\"default\":{\"deprecated\":1,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"hay_block:10\":{\"default\":{\"deprecated\":2,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"hay_block:11\":{\"default\":{\"deprecated\":3,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"standing_banner:0\":{\"default\":{\"ground_sign_direction\":0},\"90\":{\"ground_sign_direction\":4},\"180\":{\"ground_sign_direction\":8},\"270\":{\"ground_sign_direction\":12},\"x\":{\"ground_sign_direction\":8},\"xz\":{\"ground_sign_direction\":8}},\"standing_banner:1\":{\"default\":{\"ground_sign_direction\":1},\"90\":{\"ground_sign_direction\":5},\"180\":{\"ground_sign_direction\":9},\"270\":{\"ground_sign_direction\":13},\"x\":{\"ground_sign_direction\":7},\"z\":{\"ground_sign_direction\":15},\"xz\":{\"ground_sign_direction\":9}},\"standing_banner:2\":{\"default\":{\"ground_sign_direction\":2},\"90\":{\"ground_sign_direction\":6},\"180\":{\"ground_sign_direction\":10},\"270\":{\"ground_sign_direction\":14},\"x\":{\"ground_sign_direction\":6},\"z\":{\"ground_sign_direction\":14},\"xz\":{\"ground_sign_direction\":10}},\"standing_banner:3\":{\"default\":{\"ground_sign_direction\":3},\"90\":{\"ground_sign_direction\":7},\"180\":{\"ground_sign_direction\":11},\"270\":{\"ground_sign_direction\":15},\"x\":{\"ground_sign_direction\":5},\"z\":{\"ground_sign_direction\":13},\"xz\":{\"ground_sign_direction\":11}},\"standing_banner:4\":{\"default\":{\"ground_sign_direction\":4},\"90\":{\"ground_sign_direction\":8},\"180\":{\"ground_sign_direction\":12},\"270\":{\"ground_sign_direction\":0},\"z\":{\"ground_sign_direction\":12},\"xz\":{\"ground_sign_direction\":12}},\"standing_banner:5\":{\"default\":{\"ground_sign_direction\":5},\"90\":{\"ground_sign_direction\":9},\"180\":{\"ground_sign_direction\":13},\"270\":{\"ground_sign_direction\":1},\"x\":{\"ground_sign_direction\":3},\"z\":{\"ground_sign_direction\":11},\"xz\":{\"ground_sign_direction\":13}},\"standing_banner:6\":{\"default\":{\"ground_sign_direction\":6},\"90\":{\"ground_sign_direction\":10},\"180\":{\"ground_sign_direction\":14},\"270\":{\"ground_sign_direction\":2},\"x\":{\"ground_sign_direction\":2},\"z\":{\"ground_sign_direction\":10},\"xz\":{\"ground_sign_direction\":14}},\"standing_banner:7\":{\"default\":{\"ground_sign_direction\":7},\"90\":{\"ground_sign_direction\":11},\"180\":{\"ground_sign_direction\":15},\"270\":{\"ground_sign_direction\":3},\"x\":{\"ground_sign_direction\":1},\"z\":{\"ground_sign_direction\":9},\"xz\":{\"ground_sign_direction\":15}},\"standing_banner:8\":{\"default\":{\"ground_sign_direction\":8},\"90\":{\"ground_sign_direction\":12},\"180\":{\"ground_sign_direction\":0},\"270\":{\"ground_sign_direction\":4},\"x\":{\"ground_sign_direction\":0},\"xz\":{\"ground_sign_direction\":0}},\"standing_banner:9\":{\"default\":{\"ground_sign_direction\":9},\"90\":{\"ground_sign_direction\":13},\"180\":{\"ground_sign_direction\":1},\"270\":{\"ground_sign_direction\":5},\"x\":{\"ground_sign_direction\":15},\"z\":{\"ground_sign_direction\":7},\"xz\":{\"ground_sign_direction\":1}},\"standing_banner:10\":{\"default\":{\"ground_sign_direction\":10},\"90\":{\"ground_sign_direction\":14},\"180\":{\"ground_sign_direction\":2},\"270\":{\"ground_sign_direction\":6},\"x\":{\"ground_sign_direction\":14},\"z\":{\"ground_sign_direction\":6},\"xz\":{\"ground_sign_direction\":2}},\"standing_banner:11\":{\"default\":{\"ground_sign_direction\":11},\"90\":{\"ground_sign_direction\":15},\"180\":{\"ground_sign_direction\":3},\"270\":{\"ground_sign_direction\":7},\"x\":{\"ground_sign_direction\":13},\"z\":{\"ground_sign_direction\":5},\"xz\":{\"ground_sign_direction\":3}},\"standing_banner:12\":{\"default\":{\"ground_sign_direction\":12},\"90\":{\"ground_sign_direction\":0},\"180\":{\"ground_sign_direction\":4},\"270\":{\"ground_sign_direction\":8},\"z\":{\"ground_sign_direction\":4},\"xz\":{\"ground_sign_direction\":4}},\"standing_banner:13\":{\"default\":{\"ground_sign_direction\":13},\"90\":{\"ground_sign_direction\":1},\"180\":{\"ground_sign_direction\":5},\"270\":{\"ground_sign_direction\":9},\"x\":{\"ground_sign_direction\":11},\"z\":{\"ground_sign_direction\":3},\"xz\":{\"ground_sign_direction\":5}},\"standing_banner:14\":{\"default\":{\"ground_sign_direction\":14},\"90\":{\"ground_sign_direction\":2},\"180\":{\"ground_sign_direction\":6},\"270\":{\"ground_sign_direction\":10},\"x\":{\"ground_sign_direction\":10},\"z\":{\"ground_sign_direction\":2},\"xz\":{\"ground_sign_direction\":6}},\"standing_banner:15\":{\"default\":{\"ground_sign_direction\":15},\"90\":{\"ground_sign_direction\":3},\"180\":{\"ground_sign_direction\":7},\"270\":{\"ground_sign_direction\":11},\"x\":{\"ground_sign_direction\":9},\"z\":{\"ground_sign_direction\":1},\"xz\":{\"ground_sign_direction\":7}},\"wall_banner:0\":[],\"wall_banner:1\":[],\"wall_banner:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"wall_banner:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"wall_banner:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"wall_banner:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"red_sandstone_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"red_sandstone_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"red_sandstone_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"red_sandstone_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"red_sandstone_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"red_sandstone_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"red_sandstone_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"red_sandstone_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"spruce_fence_gate:0\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"spruce_fence_gate:1\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"spruce_fence_gate:2\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"spruce_fence_gate:3\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"spruce_fence_gate:4\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"spruce_fence_gate:5\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"spruce_fence_gate:6\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"spruce_fence_gate:7\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"spruce_fence_gate:8\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"spruce_fence_gate:9\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"spruce_fence_gate:10\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"spruce_fence_gate:11\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"spruce_fence_gate:12\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"spruce_fence_gate:13\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"spruce_fence_gate:14\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"spruce_fence_gate:15\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"birch_fence_gate:0\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"birch_fence_gate:1\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"birch_fence_gate:2\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"birch_fence_gate:3\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"birch_fence_gate:4\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"birch_fence_gate:5\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"birch_fence_gate:6\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"birch_fence_gate:7\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"birch_fence_gate:8\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"birch_fence_gate:9\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"birch_fence_gate:10\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"birch_fence_gate:11\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"birch_fence_gate:12\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"birch_fence_gate:13\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"birch_fence_gate:14\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"birch_fence_gate:15\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"jungle_fence_gate:0\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"jungle_fence_gate:1\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"jungle_fence_gate:2\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"jungle_fence_gate:3\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"jungle_fence_gate:4\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"jungle_fence_gate:5\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"jungle_fence_gate:6\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"jungle_fence_gate:7\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"jungle_fence_gate:8\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"jungle_fence_gate:9\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"jungle_fence_gate:10\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"jungle_fence_gate:11\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"jungle_fence_gate:12\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"jungle_fence_gate:13\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"jungle_fence_gate:14\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"jungle_fence_gate:15\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dark_oak_fence_gate:0\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"dark_oak_fence_gate:1\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"dark_oak_fence_gate:2\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"dark_oak_fence_gate:3\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dark_oak_fence_gate:4\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"dark_oak_fence_gate:5\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"dark_oak_fence_gate:6\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"dark_oak_fence_gate:7\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dark_oak_fence_gate:8\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"dark_oak_fence_gate:9\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"dark_oak_fence_gate:10\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"dark_oak_fence_gate:11\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dark_oak_fence_gate:12\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"dark_oak_fence_gate:13\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"dark_oak_fence_gate:14\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"dark_oak_fence_gate:15\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"acacia_fence_gate:0\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"acacia_fence_gate:1\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"acacia_fence_gate:2\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"acacia_fence_gate:3\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"acacia_fence_gate:4\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"acacia_fence_gate:5\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"acacia_fence_gate:6\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"acacia_fence_gate:7\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"acacia_fence_gate:8\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"acacia_fence_gate:9\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"acacia_fence_gate:10\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"acacia_fence_gate:11\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"acacia_fence_gate:12\":{\"default\":{\"direction\":0,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":2},\"270\":{\"direction\":3},\"x\":{\"direction\":2},\"xz\":{\"direction\":2}},\"acacia_fence_gate:13\":{\"default\":{\"direction\":1,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"z\":{\"direction\":3},\"xz\":{\"direction\":3}},\"acacia_fence_gate:14\":{\"default\":{\"direction\":2,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":1},\"x\":{\"direction\":0},\"xz\":{\"direction\":0}},\"acacia_fence_gate:15\":{\"default\":{\"direction\":3,\"in_wall_bit\":false,\"open_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"repeating_command_block:0\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":0}},\"repeating_command_block:1\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":1}},\"repeating_command_block:2\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"repeating_command_block:3\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"repeating_command_block:4\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"repeating_command_block:5\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"repeating_command_block:8\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":0},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},\"repeating_command_block:9\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":1},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},\"repeating_command_block:10\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":2},\"90\":{\"conditional_bit\":false,\"facing_direction\":5},\"180\":{\"conditional_bit\":false,\"facing_direction\":3},\"270\":{\"conditional_bit\":false,\"facing_direction\":4},\"x\":{\"conditional_bit\":false,\"facing_direction\":3},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":3}},\"repeating_command_block:11\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":3},\"90\":{\"conditional_bit\":false,\"facing_direction\":4},\"180\":{\"conditional_bit\":false,\"facing_direction\":2},\"270\":{\"conditional_bit\":false,\"facing_direction\":5},\"x\":{\"conditional_bit\":false,\"facing_direction\":2},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":2}},\"repeating_command_block:12\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":4},\"90\":{\"conditional_bit\":false,\"facing_direction\":2},\"180\":{\"conditional_bit\":false,\"facing_direction\":5},\"270\":{\"conditional_bit\":false,\"facing_direction\":3},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":5},\"xz\":{\"conditional_bit\":false,\"facing_direction\":5}},\"repeating_command_block:13\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":5},\"90\":{\"conditional_bit\":false,\"facing_direction\":3},\"180\":{\"conditional_bit\":false,\"facing_direction\":4},\"270\":{\"conditional_bit\":false,\"facing_direction\":2},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":4},\"xz\":{\"conditional_bit\":false,\"facing_direction\":4}},\"chain_command_block:0\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":0}},\"chain_command_block:1\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":1}},\"chain_command_block:2\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"chain_command_block:3\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"chain_command_block:4\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"chain_command_block:5\":{\"default\":{\"conditional_bit\":false,\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"chain_command_block:8\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":0},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},\"chain_command_block:9\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":1},\"90\":{\"conditional_bit\":false},\"180\":{\"conditional_bit\":false},\"270\":{\"conditional_bit\":false},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false}},\"chain_command_block:10\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":2},\"90\":{\"conditional_bit\":false,\"facing_direction\":5},\"180\":{\"conditional_bit\":false,\"facing_direction\":3},\"270\":{\"conditional_bit\":false,\"facing_direction\":4},\"x\":{\"conditional_bit\":false,\"facing_direction\":3},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":3}},\"chain_command_block:11\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":3},\"90\":{\"conditional_bit\":false,\"facing_direction\":4},\"180\":{\"conditional_bit\":false,\"facing_direction\":2},\"270\":{\"conditional_bit\":false,\"facing_direction\":5},\"x\":{\"conditional_bit\":false,\"facing_direction\":2},\"z\":{\"conditional_bit\":false},\"xz\":{\"conditional_bit\":false,\"facing_direction\":2}},\"chain_command_block:12\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":4},\"90\":{\"conditional_bit\":false,\"facing_direction\":2},\"180\":{\"conditional_bit\":false,\"facing_direction\":5},\"270\":{\"conditional_bit\":false,\"facing_direction\":3},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":5},\"xz\":{\"conditional_bit\":false,\"facing_direction\":5}},\"chain_command_block:13\":{\"default\":{\"conditional_bit\":true,\"facing_direction\":5},\"90\":{\"conditional_bit\":false,\"facing_direction\":3},\"180\":{\"conditional_bit\":false,\"facing_direction\":4},\"270\":{\"conditional_bit\":false,\"facing_direction\":2},\"x\":{\"conditional_bit\":false},\"z\":{\"conditional_bit\":false,\"facing_direction\":4},\"xz\":{\"conditional_bit\":false,\"facing_direction\":4}},\"spruce_door:0\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"spruce_door:1\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"spruce_door:2\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"spruce_door:3\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"spruce_door:4\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"spruce_door:5\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"spruce_door:6\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"spruce_door:7\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"spruce_door:8\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"spruce_door:9\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"spruce_door:10\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"spruce_door:11\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"spruce_door:12\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"spruce_door:13\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"spruce_door:14\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"spruce_door:15\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"birch_door:0\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"birch_door:1\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"birch_door:2\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"birch_door:3\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"birch_door:4\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"birch_door:5\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"birch_door:6\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"birch_door:7\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"birch_door:8\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"birch_door:9\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"birch_door:10\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"birch_door:11\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"birch_door:12\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"birch_door:13\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"birch_door:14\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"birch_door:15\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"jungle_door:0\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"jungle_door:1\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"jungle_door:2\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"jungle_door:3\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"jungle_door:4\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"jungle_door:5\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"jungle_door:6\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"jungle_door:7\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"jungle_door:8\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"jungle_door:9\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"jungle_door:10\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"jungle_door:11\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"jungle_door:12\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"jungle_door:13\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"jungle_door:14\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"jungle_door:15\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"acacia_door:0\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"acacia_door:1\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"acacia_door:2\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"acacia_door:3\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"acacia_door:4\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"acacia_door:5\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"acacia_door:6\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"acacia_door:7\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"acacia_door:8\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"acacia_door:9\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"acacia_door:10\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"acacia_door:11\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"acacia_door:12\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"acacia_door:13\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"acacia_door:14\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"acacia_door:15\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dark_oak_door:0\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dark_oak_door:1\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"dark_oak_door:2\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"dark_oak_door:3\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"dark_oak_door:4\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dark_oak_door:5\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"dark_oak_door:6\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"dark_oak_door:7\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":false},\"90\":{\"direction\":0},\"180\":{\"direction\":2},\"270\":{\"direction\":1},\"x\":{\"direction\":2},\"z\":{\"direction\":3},\"xz\":{\"direction\":2}},\"dark_oak_door:8\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dark_oak_door:9\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"dark_oak_door:10\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"dark_oak_door:11\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":false,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dark_oak_door:12\":{\"default\":{\"direction\":0,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":2},\"180\":{\"direction\":1},\"270\":{\"direction\":3},\"x\":{\"direction\":0},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"dark_oak_door:13\":{\"default\":{\"direction\":1,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":3},\"180\":{\"direction\":0},\"270\":{\"direction\":2},\"x\":{\"direction\":1},\"z\":{\"direction\":0},\"xz\":{\"direction\":0}},\"dark_oak_door:14\":{\"default\":{\"direction\":2,\"door_hinge_bit\":false,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":1},\"180\":{\"direction\":3},\"270\":{\"direction\":0},\"x\":{\"direction\":3},\"z\":{\"direction\":2},\"xz\":{\"direction\":3}},\"dark_oak_door:15\":{\"default\":{\"direction\":3,\"door_hinge_bit\":true,\"open_bit\":true,\"upper_block_bit\":true},\"90\":{\"direction\":0},\"180\":{\"direction\":1},\"270\":{\"direction\":2},\"z\":{\"direction\":1},\"xz\":{\"direction\":1}},\"frame:0\":{\"default\":{\"facing_direction\":5,\"item_frame_map_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"frame:1\":{\"default\":{\"facing_direction\":4,\"item_frame_map_bit\":false},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"frame:2\":{\"default\":{\"facing_direction\":3,\"item_frame_map_bit\":false},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"frame:3\":{\"default\":{\"facing_direction\":2,\"item_frame_map_bit\":false},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"frame:4\":{\"default\":{\"facing_direction\":5,\"item_frame_map_bit\":true},\"90\":{\"facing_direction\":3,\"item_frame_map_bit\":false},\"180\":{\"facing_direction\":4,\"item_frame_map_bit\":false},\"270\":{\"facing_direction\":2,\"item_frame_map_bit\":false},\"x\":{\"item_frame_map_bit\":false},\"z\":{\"facing_direction\":4,\"item_frame_map_bit\":false},\"xz\":{\"facing_direction\":4,\"item_frame_map_bit\":false}},\"frame:5\":{\"default\":{\"facing_direction\":4,\"item_frame_map_bit\":true},\"90\":{\"facing_direction\":2,\"item_frame_map_bit\":false},\"180\":{\"facing_direction\":5,\"item_frame_map_bit\":false},\"270\":{\"facing_direction\":3,\"item_frame_map_bit\":false},\"x\":{\"item_frame_map_bit\":false},\"z\":{\"facing_direction\":5,\"item_frame_map_bit\":false},\"xz\":{\"facing_direction\":5,\"item_frame_map_bit\":false}},\"frame:6\":{\"default\":{\"facing_direction\":3,\"item_frame_map_bit\":true},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"frame:7\":{\"default\":{\"facing_direction\":2,\"item_frame_map_bit\":true},\"90\":{\"facing_direction\":5,\"item_frame_map_bit\":false},\"180\":{\"facing_direction\":3,\"item_frame_map_bit\":false},\"270\":{\"facing_direction\":4,\"item_frame_map_bit\":false},\"x\":{\"facing_direction\":3,\"item_frame_map_bit\":false},\"z\":{\"item_frame_map_bit\":false},\"xz\":{\"facing_direction\":3,\"item_frame_map_bit\":false}},\"purpur_block:0\":{\"default\":{\"chisel_type\":\"default\",\"pillar_axis\":\"y\"}},\"purpur_block:1\":{\"default\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"y\"}},\"purpur_block:2\":{\"default\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"y\"}},\"purpur_block:3\":{\"default\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"y\"}},\"purpur_block:4\":{\"default\":{\"chisel_type\":\"default\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"purpur_block:5\":{\"default\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"purpur_block:6\":{\"default\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"purpur_block:7\":{\"default\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"purpur_block:8\":{\"default\":{\"chisel_type\":\"default\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"purpur_block:9\":{\"default\":{\"chisel_type\":\"chiseled\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"purpur_block:10\":{\"default\":{\"chisel_type\":\"lines\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"purpur_block:11\":{\"default\":{\"chisel_type\":\"smooth\",\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"purpur_stairs:0\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"purpur_stairs:1\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"purpur_stairs:2\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"purpur_stairs:3\":{\"default\":{\"upside_down_bit\":false,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"purpur_stairs:4\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":0},\"90\":{\"weirdo_direction\":2},\"180\":{\"weirdo_direction\":1},\"270\":{\"weirdo_direction\":3},\"z\":{\"weirdo_direction\":1},\"xz\":{\"weirdo_direction\":1}},\"purpur_stairs:5\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":1},\"90\":{\"weirdo_direction\":3},\"180\":{\"weirdo_direction\":0},\"270\":{\"weirdo_direction\":2},\"z\":{\"weirdo_direction\":0},\"xz\":{\"weirdo_direction\":0}},\"purpur_stairs:6\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":2},\"90\":{\"weirdo_direction\":1},\"180\":{\"weirdo_direction\":3},\"270\":{\"weirdo_direction\":0},\"x\":{\"weirdo_direction\":3},\"xz\":{\"weirdo_direction\":3}},\"purpur_stairs:7\":{\"default\":{\"upside_down_bit\":true,\"weirdo_direction\":3},\"90\":{\"weirdo_direction\":0},\"180\":{\"weirdo_direction\":2},\"270\":{\"weirdo_direction\":1},\"x\":{\"weirdo_direction\":2},\"xz\":{\"weirdo_direction\":2}},\"end_rod:0\":{\"default\":{\"facing_direction\":0}},\"end_rod:1\":{\"default\":{\"facing_direction\":1}},\"end_rod:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"end_rod:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"end_rod:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"end_rod:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"bone_block:0\":{\"default\":{\"deprecated\":0,\"pillar_axis\":\"y\"}},\"bone_block:1\":{\"default\":{\"deprecated\":1,\"pillar_axis\":\"y\"}},\"bone_block:2\":{\"default\":{\"deprecated\":2,\"pillar_axis\":\"y\"}},\"bone_block:3\":{\"default\":{\"deprecated\":3,\"pillar_axis\":\"y\"}},\"bone_block:4\":{\"default\":{\"deprecated\":0,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"bone_block:5\":{\"default\":{\"deprecated\":1,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"bone_block:6\":{\"default\":{\"deprecated\":2,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"bone_block:7\":{\"default\":{\"deprecated\":3,\"pillar_axis\":\"x\"},\"90\":{\"pillar_axis\":\"z\"},\"270\":{\"pillar_axis\":\"z\"}},\"bone_block:8\":{\"default\":{\"deprecated\":0,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"bone_block:9\":{\"default\":{\"deprecated\":1,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"bone_block:10\":{\"default\":{\"deprecated\":2,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"bone_block:11\":{\"default\":{\"deprecated\":3,\"pillar_axis\":\"z\"},\"90\":{\"pillar_axis\":\"x\"},\"270\":{\"pillar_axis\":\"x\"}},\"purple_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"purple_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"purple_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"purple_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"purple_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"purple_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"white_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"white_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"white_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"white_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"white_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"white_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"orange_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"orange_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"orange_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"orange_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"orange_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"orange_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"magenta_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"magenta_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"magenta_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"magenta_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"magenta_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"magenta_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"light_blue_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"light_blue_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"light_blue_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"light_blue_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"light_blue_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"light_blue_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"yellow_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"yellow_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"yellow_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"yellow_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"yellow_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"yellow_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"lime_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"lime_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"lime_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"lime_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"lime_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"lime_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"pink_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"pink_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"pink_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"pink_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"pink_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"pink_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"gray_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"gray_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"gray_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"gray_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"gray_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"gray_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"silver_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"silver_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"silver_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"silver_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"silver_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"silver_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"cyan_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"cyan_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"cyan_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"cyan_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"cyan_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"cyan_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"blue_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"blue_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"blue_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"blue_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"blue_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"blue_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"brown_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"brown_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"brown_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"brown_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"brown_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"brown_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"green_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"green_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"green_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"green_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"green_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"green_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"red_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"red_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"red_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"red_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"red_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"red_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"black_glazed_terracotta:0\":{\"default\":{\"facing_direction\":0}},\"black_glazed_terracotta:1\":{\"default\":{\"facing_direction\":1}},\"black_glazed_terracotta:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"black_glazed_terracotta:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"black_glazed_terracotta:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"black_glazed_terracotta:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"observer:0\":{\"default\":{\"facing_direction\":0}},\"observer:1\":{\"default\":{\"facing_direction\":1}},\"observer:2\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"observer:3\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"observer:4\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"observer:5\":{\"default\":{\"facing_direction\":5},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}},\"observer:8\":{\"default\":{\"facing_direction\":0}},\"observer:9\":{\"default\":{\"facing_direction\":1}},\"observer:10\":{\"default\":{\"facing_direction\":2},\"90\":{\"facing_direction\":5},\"180\":{\"facing_direction\":3},\"270\":{\"facing_direction\":4},\"x\":{\"facing_direction\":3},\"xz\":{\"facing_direction\":3}},\"observer:11\":{\"default\":{\"facing_direction\":3},\"90\":{\"facing_direction\":4},\"180\":{\"facing_direction\":2},\"270\":{\"facing_direction\":5},\"x\":{\"facing_direction\":2},\"xz\":{\"facing_direction\":2}},\"observer:12\":{\"default\":{\"facing_direction\":4},\"90\":{\"facing_direction\":2},\"180\":{\"facing_direction\":5},\"270\":{\"facing_direction\":3},\"z\":{\"facing_direction\":5},\"xz\":{\"facing_direction\":5}},\"observer:13\":{\"default\":{\"facing_direction\":5,\"powered_bit\":false},\"90\":{\"facing_direction\":3},\"180\":{\"facing_direction\":4},\"270\":{\"facing_direction\":2},\"z\":{\"facing_direction\":4},\"xz\":{\"facing_direction\":4}}}"
  },
  {
    "path": "src/xenialdan/MagicWE2/API.php",
    "content": "<?php /** @noinspection PhpUnusedParameterInspection */\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2;\n\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockFactory;\nuse pocketmine\\block\\UnknownBlock;\nuse pocketmine\\math\\AxisAlignedBB;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\nbt\\tag\\CompoundTag;\nuse pocketmine\\player\\Player;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\world\\ChunkManager;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\Position;\nuse pocketmine\\world\\World;\nuse RuntimeException;\nuse xenialdan\\MagicWE2\\clipboard\\Clipboard;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\exception\\CalculationException;\nuse xenialdan\\MagicWE2\\exception\\InvalidBlockStateException;\nuse xenialdan\\MagicWE2\\exception\\LimitExceededException;\nuse xenialdan\\MagicWE2\\helper\\BlockStatesParser;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\selection\\shape\\Shape;\nuse xenialdan\\MagicWE2\\session\\Session;\nuse xenialdan\\MagicWE2\\session\\UserSession;\nuse xenialdan\\MagicWE2\\task\\action\\SetBiomeAction;\nuse xenialdan\\MagicWE2\\task\\action\\TaskAction;\nuse xenialdan\\MagicWE2\\task\\AsyncActionTask;\nuse xenialdan\\MagicWE2\\task\\AsyncCopyTask;\nuse xenialdan\\MagicWE2\\task\\AsyncCountTask;\nuse xenialdan\\MagicWE2\\task\\AsyncFillTask;\nuse xenialdan\\MagicWE2\\task\\AsyncPasteTask;\nuse xenialdan\\MagicWE2\\task\\AsyncReplaceTask;\nuse xenialdan\\MagicWE2\\tool\\Brush;\n\nclass API\n{\n\t// Base flag to modify on\n\tpublic const FLAG_BASE = 1;\n\t// Only replaces the air\n\tpublic const FLAG_KEEP_BLOCKS = 0x01; // -r\n\t// Only change non-air blocks\n\tpublic const FLAG_KEEP_AIR = 0x02; // -k\n\t// The -a flag makes it not paste air.\n\tpublic const FLAG_PASTE_WITHOUT_AIR = 0x03; // -a\n\t// Pastes or sets hollow\n\tpublic const FLAG_HOLLOW = 0x04; // -h\n\t// The -n flag makes it only consider naturally occurring blocks.\n\tpublic const FLAG_NATURAL = 0x05; // -n\n\t// Without the -p flag, the paste will appear centered at the target location.\n\t// With the flag, the paste will appear relative to where you had\n\t// stood, relative by the copied area when you copied it.\n\tpublic const FLAG_POSITION_RELATIVE = 0x06; // -p\n\t// Without the -v flag, block checks, selections and replacing will use and check the exact meta\n\t// of the blocks, with the flag it will check for similar variants\n\t// For example: Oak Logs with any rotation instead of a specific rotation\n\tpublic const FLAG_VARIANT = 0x07; // -v\n\t// With the -m flag the damage values / meta will be kept\n\t// For example: Replacing all wool blocks with concrete of the same color\n\tpublic const FLAG_KEEP_META = 0x08; // -m\n\t// Pastes or sets hollow but closes off the ends\n\tpublic const FLAG_HOLLOW_CLOSED = 0x09; // -hc//TODO\n\n\tpublic const TAG_MAGIC_WE = \"MagicWE\";\n\tpublic const TAG_MAGIC_WE_BRUSH = \"MagicWEBrush\";\n\n\t//TODO Split into separate Class (SchematicStorage?)\n\t/** @var Clipboard[] */\n\tprivate static $schematics = [];//TODO\n\n\t/**\n\t * @param Selection $selection\n\t * @param Session $session\n\t * @param Block[] $newblocks\n\t * @param int $flags\n\t * @return bool\n\t */\n\tpublic static function fillAsync(Selection $selection, Session $session, $newblocks = [], int $flags = self::FLAG_BASE): bool\n\t{\n\t\tif (empty($newblocks)) {\n\t\t\t$session->sendMessage(TF::RED . \"New blocks is empty!\");\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\t$limit = Loader::getInstance()->getConfig()->get(\"limit\", -1);\n\t\t\tif ($limit !== -1 && $selection->getShape()->getTotalCount() > $limit) {\n\t\t\t\tthrow new LimitExceededException($session->getLanguage()->translateString('error.limitexceeded'));\n\t\t\t}\n\t\t\tif ($session instanceof UserSession) {\n\t\t\t\t$player = $session->getPlayer();\n\t\t\t\t/** @var Player $player */\n\t\t\t\t$session->getBossBar()->showTo([$player]);\n\t\t\t}\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(new AsyncFillTask($session->getUUID(), $selection, $selection->getShape()->getTouchedChunks($selection->getWorld()), $newblocks, $flags));\n\t\t} catch (Exception $e) {\n\t\t\t$session->sendMessage($e->getMessage());\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param Selection $selection\n\t * @param Session $session\n\t * @param Block[] $oldBlocks\n\t * @param Block[] $newBlocks\n\t * @param int $flags\n\t * @return bool\n\t */\n\tpublic static function replaceAsync(Selection $selection, Session $session, $oldBlocks = [], $newBlocks = [], int $flags = self::FLAG_BASE): bool\n\t{\n\t\tif (empty($oldBlocks)) $session->sendMessage(TF::RED . \"Old blocks is empty!\");\n\t\tif (empty($newBlocks)) $session->sendMessage(TF::RED . \"New blocks is empty!\");\n\t\tif (empty($oldBlocks) || empty($newBlocks)) return false;\n\t\ttry {\n\t\t\t$limit = Loader::getInstance()->getConfig()->get(\"limit\", -1);\n\t\t\tif ($limit !== -1 && $selection->getShape()->getTotalCount() > $limit) {\n\t\t\t\tthrow new LimitExceededException($session->getLanguage()->translateString('error.limitexceeded'));\n\t\t\t}\n\t\t\tif ($session instanceof UserSession) {\n\t\t\t\t$player = $session->getPlayer();\n\t\t\t\t/** @var Player $player */\n\t\t\t\t$session->getBossBar()->showTo([$player]);\n\t\t\t}\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(new AsyncReplaceTask($session->getUUID(), $selection, $selection->getShape()->getTouchedChunks($selection->getWorld()), $oldBlocks, $newBlocks, $flags));\n\t\t} catch (Exception $e) {\n\t\t\t$session->sendMessage($e->getMessage());\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param Selection $selection\n\t * @param Session $session\n\t * @param int $flags\n\t * @return bool\n\t */\n\tpublic static function copyAsync(Selection $selection, Session $session, int $flags = self::FLAG_BASE): bool\n\t{\n\t\t#return false;\n\t\ttry {\n\t\t\t$limit = Loader::getInstance()->getConfig()->get(\"limit\", -1);\n\t\t\tif ($limit !== -1 && $selection->getShape()->getTotalCount() > $limit) {\n\t\t\t\tthrow new LimitExceededException($session->getLanguage()->translateString('error.limitexceeded'));\n\t\t\t}\n\t\t\t//TODO check/edit how relative position works\n\t\t\t$offset = new Vector3(0, 0, 0);\n\t\t\tif ($session instanceof UserSession) {\n\t\t\t\t/** @var Player $player */\n\t\t\t\t$player = $session->getPlayer();\n\t\t\t\t/*if (!self::hasFlag($flags, self::FLAG_POSITION_RELATIVE)*///TODO relative or not by flags\n\t\t\t\t$offset = $selection->getShape()->getMinVec3()->subtractVector($player->getPosition()->asVector3()->floor())->floor();//TODO figure out wrong offset\n\t\t\t\t$session->getBossBar()->showTo([$player]);\n\t\t\t}\n\t\t\t#var_dump($selection->getShape()->getMinVec3(), $session->getPlayer()->asVector3(), $selection->getShape()->getMinVec3()->subtract($session->getPlayer()), $offset);\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(new AsyncCopyTask($session->getUUID(), $selection, $offset, $selection->getShape()->getTouchedChunks($selection->getWorld()), $flags));\n\t\t} catch (Exception $e) {\n\t\t\t$session->sendMessage($e->getMessage());\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * TODO: flag parsing, Position to paste at\n\t * @param SingleClipboard $clipboard TODO should this be Clipboard?\n\t * @param Session $session\n\t * @param Position $target CURRENTLY SENDER POSITION\n\t * @param int $flags\n\t * @return bool\n\t * @throws AssumptionFailedError\n\t */\n\tpublic static function pasteAsync(SingleClipboard $clipboard, Session $session, Position $target, int $flags = self::FLAG_BASE): bool\n\t{\n\t\t#return false;\n\t\ttry {\n\t\t\t$limit = Loader::getInstance()->getConfig()->get(\"limit\", -1);\n\t\t\tif ($limit !== -1 && $clipboard->getTotalCount() > $limit) {\n\t\t\t\tthrow new LimitExceededException($session->getLanguage()->translateString('error.limitexceeded'));\n\t\t\t}\n\t\t\t#$c = $clipboard->getCenter();\n\t\t\t#$clipboard->setCenter($target->asVector3());//TODO check\n\t\t\tif ($session instanceof UserSession) {\n\t\t\t\t$player = $session->getPlayer();\n\t\t\t\t/** @var Player $player */\n\t\t\t\t$session->getBossBar()->showTo([$player]);\n\t\t\t}\n\t\t\t$start = clone $target->asVector3()->floor()->addVector($clipboard->position)->floor();//start pos of paste//TODO if using rotate, this fails\n\t\t\t$end = $start->addVector($clipboard->selection->getShape()->getMaxVec3()->subtractVector($clipboard->selection->getShape()->getMinVec3()));//add size\n\t\t\t$aabb = new AxisAlignedBB($start->getFloorX(), $start->getFloorY(), $start->getFloorZ(), $end->getFloorX(), $end->getFloorY(), $end->getFloorZ());//create paste aabb\n\t\t\t$shape = clone $clipboard->selection->getShape();//needed\n\t\t\t$shape->setPasteVector($target->asVector3()->floor());//needed\n\t\t\t$clipboard->selection->setShape($shape);//needed\n\t\t\t$touchedChunks = self::getAABBTouchedChunksTemp($target->getWorld(), $aabb);//TODO clean up or move somewhere else. Better not touch, it works.\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(new AsyncPasteTask($session->getUUID(), $clipboard->selection, $touchedChunks, $clipboard));\n\t\t} catch (Exception $e) {\n\t\t\t$session->sendMessage($e->getMessage());\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param ChunkManager $manager\n\t * @param AxisAlignedBB $aabb\n\t * @return string[]\n\t */\n\tprivate static function getAABBTouchedChunksTemp(ChunkManager $manager, AxisAlignedBB $aabb): array\n\t{\n\t\t$maxX = $aabb->maxX >> 4;\n\t\t$minX = $aabb->minX >> 4;\n\t\t$maxZ = $aabb->maxZ >> 4;\n\t\t$minZ = $aabb->minZ >> 4;\n\t\t$touchedChunks = [];\n\t\tfor ($x = $minX; $x <= $maxX; $x++) {\n\t\t\tfor ($z = $minZ; $z <= $maxZ; $z++) {\n\t\t\t\t$chunk = $manager->getChunk($x, $z);\n\t\t\t\tif ($chunk === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tprint __METHOD__ . \" Touched Chunk at: $x:$z\" . PHP_EOL;\n\t\t\t\t$touchedChunks[World::chunkHash($x, $z)] = FastChunkSerializer::serialize($chunk);\n\t\t\t}\n\t\t}\n\t\tprint  __METHOD__ . \" Touched chunks count: \" . count($touchedChunks) . PHP_EOL;\n\t\treturn $touchedChunks;\n\t}\n\n\t/**\n\t * @param Selection $selection\n\t * @param Session $session\n\t * @param Block[] $filterBlocks\n\t * @param int $flags\n\t * @return bool\n\t */\n\tpublic static function countAsync(Selection $selection, Session $session, array $filterBlocks, int $flags = self::FLAG_BASE): bool\n\t{\n\t\ttry {\n\t\t\t$limit = Loader::getInstance()->getConfig()->get(\"limit\", -1);\n\t\t\tif ($limit !== -1 && $selection->getShape()->getTotalCount() > $limit) {\n\t\t\t\tthrow new LimitExceededException(\"You are trying to count too many blocks at once. Reduce the selection or raise the limit\");\n\t\t\t}\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(new AsyncCountTask($session->getUUID(), $selection, $selection->getShape()->getTouchedChunks($selection->getWorld()), $filterBlocks, $flags));\n\t\t} catch (Exception $e) {\n\t\t\t$session->sendMessage($e->getMessage());\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param Selection $selection\n\t * @param Session $session\n\t * @param int $biomeId\n\t * @return bool\n\t */\n\tpublic static function setBiomeAsync(Selection $selection, Session $session, int $biomeId): bool\n\t{\n\t\ttry {\n\t\t\t$limit = Loader::getInstance()->getConfig()->get(\"limit\", -1);\n\t\t\tif ($limit !== -1 && $selection->getShape()->getTotalCount() > $limit) {\n\t\t\t\tthrow new LimitExceededException($session->getLanguage()->translateString('error.limitexceeded'));\n\t\t\t}\n\t\t\tif ($session instanceof UserSession) {\n\t\t\t\t$player = $session->getPlayer();\n\t\t\t\t/** @var Player $player */\n\t\t\t\t$session->getBossBar()->showTo([$player]);\n\t\t\t}\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(new AsyncActionTask($session->getUUID(), $selection, new SetBiomeAction($biomeId), $selection->getShape()->getTouchedChunks($selection->getWorld())));\n\t\t} catch (Exception $e) {\n\t\t\t$session->sendMessage($e->getMessage());\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Creates a brush at a specific location with the passed settings\n\t * @param Block $target\n\t * @param Brush $brush\n\t * @param Session $session\n\t * @throws InvalidArgumentException\n\t * @throws RuntimeException\n\t * @throws AssumptionFailedError\n\t * @throws Exception\n\t * @throws Exception\n\t * @throws Exception\n\t */\n\tpublic static function createBrush(Block $target, Brush $brush, Session $session): void\n\t{\n\t\t$shapeClass = $brush->properties->shape;\n\t\t/** @var Shape $shape */\n\t\t$shape = new $shapeClass($target->getPos()->asVector3(), ...array_values($brush->properties->shapeProperties));\n\t\t$selection = new Selection($session->getUUID(), $target->getPos()->getWorld());\n\t\t$selection->setShape($shape);\n\t\t$actionClass = $brush->properties->action;\n\t\t//TODO remove hack\n\t\tif ($actionClass === SetBiomeAction::class) $brush->properties->actionProperties[\"biomeId\"] = $brush->properties->biomeId;\n\t\t/** @var TaskAction $action */\n\t\t$action = new $actionClass(...array_values($brush->properties->actionProperties));\n\t\t$action->prefix = \"Brush\";\n\t\tServer::getInstance()->getAsyncPool()->submitTask(new AsyncActionTask($session->getUUID(), $selection, $action, $selection->getShape()->getTouchedChunks($selection->getWorld()), $brush->properties->blocks, $brush->properties->filter));\n\t}\n\n\t/**\n\t * @param Block $target\n\t * @param CompoundTag $settings\n\t * @param Session $session\n\t * @param int $flags\n\t * @return bool\n\t */\n\tpublic static function floodArea(Block $target, CompoundTag $settings, Session $session, int $flags = self::FLAG_BASE): bool\n\t{ //TODO\n\t\tif (!$settings instanceof CompoundTag) return false;\n\t\t$session->sendMessage(TF::RED . \"TEMPORARILY DISABLED!\");\n\t\treturn false;/*\n        $shape = ShapeRegistry::getShape($target->getWorld(), ShapeRegistry::TYPE_FLOOD, self::compoundToArray($settings));\n        $shape->setCenter($target->asVector3());//TODO fix the offset?: if you have a uneven number, the center actually is between 2 blocks\n        $messages = [];\n        $error = false;\n        return self::fillAsync($shape, $session, self::blockParser($shape->options['blocks'], $messages, $error), $flags);*/\n\t}\n\n\t/// SCHEMATIC RELATED API PART\n\n\t/**\n\t * @return Clipboard[]\n\t */\n\tpublic static function getSchematics(): array\n\t{\n\t\treturn self::$schematics;\n\t}\n\n\t/**\n\t * @param Clipboard[] $schematics\n\t */\n\tpublic static function setSchematics(array $schematics): void\n\t{\n\t\tself::$schematics = $schematics;\n\t}\n\n\t/* HELPER FUNCTIONS API PART */\n\n\t/**\n\t * Parses String representations of flags into an integer with flags applied\n\t * @param string[] $flags An array containing string representations of the flags\n\t * @return int\n\t * @throws RuntimeException\n\t */\n\tpublic static function flagParser(array $flags): int\n\t{\n\t\t$flagmeta = self::FLAG_BASE;\n\t\tforeach ($flags as $flag) {\n\t\t\tswitch ($flag) {\n\t\t\t\tcase \"-keepblocks\":\n\t\t\t\t\t$flagmeta ^= self::FLAG_BASE << self::FLAG_KEEP_BLOCKS;\n\t\t\t\t\tbreak;\n\t\t\t\tcase  \"-keepair\":\n\t\t\t\t\t$flagmeta ^= self::FLAG_BASE << self::FLAG_KEEP_AIR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase  \"-a\":\n\t\t\t\t\t$flagmeta ^= self::FLAG_BASE << self::FLAG_PASTE_WITHOUT_AIR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase  \"-h\":\n\t\t\t\t\t$flagmeta ^= self::FLAG_BASE << self::FLAG_HOLLOW;\n\t\t\t\t\tbreak;\n\t\t\t\tcase  \"-hc\":\n\t\t\t\t\t$flagmeta ^= self::FLAG_BASE << self::FLAG_HOLLOW_CLOSED;\n\t\t\t\t\tbreak;\n\t\t\t\tcase  \"-n\":\n\t\t\t\t\t$flagmeta ^= self::FLAG_BASE << self::FLAG_NATURAL;\n\t\t\t\t\tbreak;\n\t\t\t\tcase  \"-p\":\n\t\t\t\t\t$flagmeta ^= self::FLAG_BASE << self::FLAG_POSITION_RELATIVE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase  \"-v\":\n\t\t\t\t\t$flagmeta ^= self::FLAG_BASE << self::FLAG_VARIANT;\n\t\t\t\t\tbreak;\n\t\t\t\tcase  \"-m\":\n\t\t\t\t\t$flagmeta ^= self::FLAG_BASE << self::FLAG_KEEP_META;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tServer::getInstance()->getLogger()->warning(\"The flag $flag is unknown\");\n\t\t\t}\n\t\t}\n\t\treturn $flagmeta;\n\t}\n\n\t/**\n\t * Checks if $flags has the specified flag $check\n\t * @param int $flags The return value of flagParser\n\t * @param int $check The flag to check\n\t * @return bool\n\t */\n\tpublic static function hasFlag(int $flags, int $check): bool\n\t{\n\t\treturn ($flags & (self::FLAG_BASE << $check)) > 0;\n\t}\n\n\t/**\n\t * More fail proof method of parsing a string to a Block\n\t * @param string $fullstring\n\t * @param array $messages\n\t * @param bool $error\n\t * @return Block[]\n\t * @throws RuntimeException\n\t * @throws InvalidArgumentException\n\t * @throws InvalidBlockStateException\n\t */\n\tpublic static function blockParser(string $fullstring, array &$messages, bool &$error): array\n\t{\n\t\tBlockFactory::getInstance();\n\t\t$blocks = BlockStatesParser::getInstance()::fromString($fullstring, true);\n\t\tforeach ($blocks as $block) {\n\t\t\tif ($block instanceof UnknownBlock) {\n\t\t\t\t$messages[] = TF::GOLD . $block . \" is an unknown block\";\n\t\t\t}\n\t\t}\n\n\t\treturn $blocks;\n\t}\n\n\t/**\n\t * Evaluate mathematics in a string\n\t * https://stackoverflow.com/a/54684348/4532380\n\t * @param string $str\n\t * @return float|int\n\t * @throws CalculationException\n\t */\n\tpublic static function evalAsMath(string $str)\n\t{\n\t\t$error = false;\n\t\t$div_mul = false;\n\t\t$add_sub = false;\n\t\t$result = 0;\n\n\t\t$str = preg_replace('/[^\\d.+\\-*\\/]/', '', $str);\n\t\t$str = rtrim(trim($str, '/*+'), '-');\n\n\t\tif ((strpos($str, '/') !== false || strpos($str, '*') !== false)) {\n\t\t\t$div_mul = true;\n\t\t\t$operators = ['*', '/'];\n\t\t\twhile (!$error && !empty($operators)) {\n\t\t\t\t$operator = array_pop($operators);\n\t\t\t\twhile ($operator !== null && strpos($str, $operator) !== false) {\n\t\t\t\t\t$regex = '/([\\d\\.]+)\\\\' . $operator . '(\\-?[\\d\\.]+)/';\n\t\t\t\t\tpreg_match($regex, $str, $matches);\n\t\t\t\t\tif (isset($matches[1], $matches[2])) {\n\t\t\t\t\t\t//if ($operator === '+') $result = (float)$matches[1] + (float)$matches[2];\n\t\t\t\t\t\t//if ($operator === '-') $result = (float)$matches[1] - (float)$matches[2];\n\t\t\t\t\t\tif ($operator === '*') $result = (float)$matches[1] * (float)$matches[2];\n\t\t\t\t\t\tif ($operator === '/') {\n\t\t\t\t\t\t\tif ((float)$matches[2]) {\n\t\t\t\t\t\t\t\t$result = (float)$matches[1] / (float)$matches[2];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$error = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$str = preg_replace($regex, (string)$result, $str, 1);\n\t\t\t\t\t\t$str = str_replace(['++', '--', '-+', '+-'], ['+', '+', '-', '-'], $str);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$error = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!$error && (strpos($str, '+') !== false || strpos($str, '-') !== false)) {\n\t\t\t$add_sub = true;\n\t\t\tpreg_match_all('/([\\d.]+|[+\\-])/', $str, $matches);\n\t\t\tif (isset($matches[0])) {\n\t\t\t\t$result = 0;\n\t\t\t\t$operator = '+';\n\t\t\t\t$tokens = $matches[0];\n\t\t\t\tforeach ($tokens as $iValue) {\n\t\t\t\t\tif ($iValue === '+' || $iValue === '-') {\n\t\t\t\t\t\t$operator = $iValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$result = ($operator === '+') ? ($result + (float)$iValue) : ($result - (float)$iValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!$error && !$div_mul && !$add_sub) {\n\t\t\t$result = (float)$str;\n\t\t}\n\n\t\tif ($error) throw new CalculationException(\"Expression contains an error\");\n\n\t\treturn $result;\n\t}\n\n\t/**\n\t * Parses a CompoundTag into an array\n\t * @param CompoundTag $compoundTag\n\t * @return array\n\t */\n\tpublic static function compoundToArray(CompoundTag $compoundTag): array\n\t{\n\t\t$a = [];\n\t\tforeach ($compoundTag->getValue() as $key => $value) {\n\t\t\t$a[$key] = $value;\n\t\t}\n\t\treturn $a;\n\t\t#$nbt = new LittleEndianNbtSerializer();\n\t\t#$treeRoot = new TreeRoot($compoundTag);\n\t\t#$buffer = $nbt->write($treeRoot);\n\t\t#return $treeRoot->getTag()->getValue();//TODO TEST PM4\n\t}\n\n\t/**\n\t * This replicates the behaviour of Vector3::setComponents in PM3\n\t * @param Block $block\n\t * @param int $x\n\t * @param int $y\n\t * @param int $z\n\t * @return Block\n\t */\n\tpublic static function setComponents(Block $block, int $x, int $y, int $z): Block\n\t{\n\t\t[$block->getPos()->x, $block->getPos()->y, $block->getPos()->z] = [$x, $y, $z];\n\t\treturn $block;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/EventListener.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2;\n\nuse Error;\nuse Exception;\nuse InvalidArgumentException;\nuse InvalidStateException;\nuse JsonException;\nuse pocketmine\\entity\\InvalidSkinException;\nuse pocketmine\\event\\block\\BlockBreakEvent;\nuse pocketmine\\event\\Listener;\nuse pocketmine\\event\\player\\PlayerDropItemEvent;\nuse pocketmine\\event\\player\\PlayerInteractEvent;\nuse pocketmine\\event\\player\\PlayerItemUseEvent;\nuse pocketmine\\event\\player\\PlayerJoinEvent;\nuse pocketmine\\event\\player\\PlayerQuitEvent;\nuse pocketmine\\item\\ItemIds;\nuse pocketmine\\nbt\\UnexpectedTagTypeException;\nuse pocketmine\\player\\Player;\nuse pocketmine\\plugin\\Plugin;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\world\\Position;\nuse RuntimeException;\nuse xenialdan\\customui\\windows\\ModalForm;\nuse xenialdan\\MagicWE2\\event\\MWESelectionChangeEvent;\nuse xenialdan\\MagicWE2\\event\\MWESessionLoadEvent;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\session\\UserSession;\nuse xenialdan\\MagicWE2\\tool\\Brush;\n\nclass EventListener implements Listener\n{\n\t/** @var Plugin */\n\tpublic $owner;\n\n\tpublic function __construct(Plugin $plugin)\n\t{\n\t\t$this->owner = $plugin;\n\t}\n\n\t/**\n\t * @param PlayerJoinEvent $event\n\t * @throws AssumptionFailedError\n\t * @throws InvalidSkinException\n\t * @throws JsonException\n\t * @throws RuntimeException\n\t * @throws SessionException\n\t */\n\tpublic function onLogin(PlayerJoinEvent $event): void\n\t{\n\t\tif ($event->getPlayer()->hasPermission(\"we.session\")) {\n\t\t\tif (SessionHelper::hasSession($event->getPlayer()) && ($session = SessionHelper::getUserSession($event->getPlayer())) instanceof UserSession) {\n\t\t\t\tLoader::getInstance()->getLogger()->debug(\"Restored cached session for player {$session->getPlayer()->getName()}\");\n\t\t\t} else if (($session = SessionHelper::loadUserSession($event->getPlayer())) instanceof UserSession) {\n\t\t\t\tLoader::getInstance()->getLogger()->debug(\"Restored session from file for player {$session->getPlayer()->getName()}\");\n\t\t\t} else ($session = SessionHelper::createUserSession($event->getPlayer()));\n\t\t}\n\t}\n\n\tpublic function onSessionLoad(MWESessionLoadEvent $event): void\n\t{\n\t\tLoader::getInstance()->wailaBossBar->addPlayer($event->getPlayer());\n\t\tif (Loader::hasScoreboard()) {\n\t\t\ttry {\n\t\t\t\tif (($session = $event->getSession()) instanceof UserSession && $session->isSidebarEnabled())\n\t\t\t\t/** @var UserSession $session */\n\t\t\t\t$session->sidebar->handleScoreboard($session);\n\t\t\t} catch (InvalidArgumentException $e) {\n\t\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param PlayerQuitEvent $event\n\t * @throws SessionException\n\t * @throws JsonException\n\t */\n\tpublic function onLogout(PlayerQuitEvent $event): void\n\t{\n\t\tif (($session = SessionHelper::getUserSession($event->getPlayer())) instanceof UserSession) {\n\t\t\tSessionHelper::destroySession($session);\n\t\t\tunset($session);\n\t\t}\n\t}\n\n\t/**\n\t * @param PlayerInteractEvent $event\n\t * @throws AssumptionFailedError\n\t * @throws Error\n\t */\n\tpublic function onInteract(PlayerInteractEvent $event): void\n\t{\n\t\ttry {\n\t\t\tswitch ($event->getAction()) {\n\t\t\t\tcase PlayerInteractEvent::RIGHT_CLICK_BLOCK:\n\t\t\t\t{\n\t\t\t\t\t$this->onRightClickBlock($event);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase PlayerInteractEvent::LEFT_CLICK_BLOCK:\n\t\t\t\t{\n\t\t\t\t\t$this->onLeftClickBlock($event);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$event->getPlayer()->sendMessage(Loader::PREFIX . TF::RED . \"Interaction failed!\");\n\t\t\t$event->getPlayer()->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t}\n\t}\n\n\t/**\n\t * @param PlayerItemUseEvent $event\n\t * @throws AssumptionFailedError\n\t */\n\tpublic function onItemRightClick(PlayerItemUseEvent $event): void\n\t{\n\t\ttry {\n\t\t\t$this->onRightClickAir($event);\n\t\t} catch (Exception $error) {\n\t\t\t$event->getPlayer()->sendMessage(Loader::PREFIX . TF::RED . \"Interaction failed!\");\n\t\t\t$event->getPlayer()->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t}\n\t}\n\n\t/**\n\t * @param BlockBreakEvent $event\n\t * @throws AssumptionFailedError\n\t * @throws Error\n\t */\n\tpublic function onBreak(BlockBreakEvent $event): void\n\t{\n\t\tif (!is_null($event->getItem()->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE)) || !is_null($event->getItem()->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE_BRUSH))) {\n\t\t\t$event->cancel();\n\t\t\ttry {\n\t\t\t\t$this->onBreakBlock($event);\n\t\t\t} catch (Exception $error) {\n\t\t\t\t$event->getPlayer()->sendMessage(Loader::PREFIX . TF::RED . \"Interaction failed!\");\n\t\t\t\t$event->getPlayer()->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * TODO use tool classes\n\t * @param BlockBreakEvent $event\n\t * @throws Error\n\t * @throws SessionException\n\t * @throws InvalidArgumentException\n\t * @throws AssumptionFailedError\n\t */\n\tprivate function onBreakBlock(BlockBreakEvent $event): void\n\t{\n\t\t$session = SessionHelper::getUserSession($event->getPlayer());\n\t\tif (!$session instanceof UserSession) return;\n\t\tswitch ($event->getItem()->getId()) {\n\t\t\tcase ItemIds::WOODEN_AXE:\n\t\t\t{\n\t\t\t\tif (!$session->isWandEnabled()) {\n\t\t\t\t\t$session->sendMessage(TF::RED . $session->getLanguage()->translateString(\"tool.wand.disabled\"));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t$selection = $session->getLatestSelection() ?? $session->addSelection(new Selection($session->getUUID(), $event->getBlock()->getPos()->getWorld())); // TODO check if the selection inside of the session updates\n\t\t\t\tif (is_null($selection)) {\n\t\t\t\t\tthrow new Error(\"No selection created - Check the console for errors\");\n\t\t\t\t}\n\t\t\t\t$selection->setPos1(new Position($event->getBlock()->getPos()->x, $event->getBlock()->getPos()->y, $event->getBlock()->getPos()->z, $event->getBlock()->getPos()->getWorld()));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ItemIds::STICK:\n\t\t\t{\n\t\t\t\tif (!$session->isDebugToolEnabled()) {\n\t\t\t\t\t$session->sendMessage(TF::RED . $session->getLanguage()->translateString(\"tool.debug.disabled\"));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t$event->getPlayer()->sendMessage($event->getBlock()->__toString() . ', variant: ' . $event->getBlock()->getIdInfo()->getVariant());\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * TODO use tool classes\n\t * @param PlayerInteractEvent $event\n\t * @throws Error\n\t * @throws InvalidStateException\n\t * @throws SessionException\n\t * @throws InvalidArgumentException\n\t * @throws AssumptionFailedError\n\t */\n\tprivate function onRightClickBlock(PlayerInteractEvent $event): void\n\t{\n\t\tif (!is_null($event->getItem()->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE))) {\n\t\t\t$event->cancel();\n\t\t\t$session = SessionHelper::getUserSession($event->getPlayer());\n\t\t\tif (!$session instanceof UserSession) return;\n\t\t\tswitch ($event->getItem()->getId()) {\n\t\t\t\tcase ItemIds::WOODEN_AXE:\n\t\t\t\t{\n\t\t\t\t\tif (!$session->isWandEnabled()) {\n\t\t\t\t\t\t$session->sendMessage(TF::RED . $session->getLanguage()->translateString(\"tool.wand.disabled\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t$selection = $session->getLatestSelection() ?? $session->addSelection(new Selection($session->getUUID(), $event->getBlock()->getPos()->getWorld())); // TODO check if the selection inside of the session updates\n\t\t\t\t\tif (is_null($selection)) {\n\t\t\t\t\t\tthrow new Error(\"No selection created - Check the console for errors\");\n\t\t\t\t\t}\n\t\t\t\t\t$selection->setPos2(new Position($event->getBlock()->getPos()->x, $event->getBlock()->getPos()->y, $event->getBlock()->getPos()->z, $event->getBlock()->getPos()->getWorld()));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase ItemIds::STICK:\n\t\t\t\t{\n\t\t\t\t\tif (!$session->isDebugToolEnabled()) {\n\t\t\t\t\t\t$session->sendMessage(TF::RED . $session->getLanguage()->translateString(\"tool.debug.disabled\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t$event->getPlayer()->sendMessage($event->getBlock()->__toString() . ', variant: ' . $event->getBlock()->getIdInfo()->getVariant());\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase ItemIds::BUCKET:\n\t\t\t\t{\n\t\t\t\t\t#if (){// && has perms\n\t\t\t\t\tAPI::floodArea($event->getBlock()->getSide($event->getFace()), $event->getItem()->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE), $session);\n\t\t\t\t\t#}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param PlayerInteractEvent $event\n\t * @throws Error\n\t * @throws InvalidStateException\n\t * @throws SessionException\n\t * @throws InvalidArgumentException\n\t * @throws UnexpectedTagTypeException\n\t * @throws AssumptionFailedError\n\t */\n\tprivate function onLeftClickBlock(PlayerInteractEvent $event): void\n\t{\n\t\tif (!is_null($event->getItem()->getNamedTag()->getTag(API::TAG_MAGIC_WE))) {\n\t\t\t$event->cancel();\n\t\t\t$session = SessionHelper::getUserSession($event->getPlayer());\n\t\t\tif (!$session instanceof UserSession) return;\n\t\t\tswitch ($event->getItem()->getId()) {\n\t\t\t\tcase ItemIds::WOODEN_AXE:\n\t\t\t\t{\n\t\t\t\t\tif (!$session->isWandEnabled()) {\n\t\t\t\t\t\t$session->sendMessage(TF::RED . $session->getLanguage()->translateString(\"tool.wand.disabled\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t$selection = $session->getLatestSelection() ?? $session->addSelection(new Selection($session->getUUID(), $event->getBlock()->getPos()->getWorld())); // TODO check if the selection inside of the session updates\n\t\t\t\t\tif (is_null($selection)) {\n\t\t\t\t\t\tthrow new Error(\"No selection created - Check the console for errors\");\n\t\t\t\t\t}\n\t\t\t\t\t$selection->setPos1(new Position($event->getBlock()->getPos()->x, $event->getBlock()->getPos()->y, $event->getBlock()->getPos()->z, $event->getBlock()->getPos()->getWorld()));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase ItemIds::STICK:\n\t\t\t\t{\n\t\t\t\t\tif (!$session->isDebugToolEnabled()) {\n\t\t\t\t\t\t$session->sendMessage(TF::RED . $session->getLanguage()->translateString(\"tool.debug.disabled\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t$event->getPlayer()->sendMessage($event->getBlock()->__toString() . ', variant: ' . $event->getBlock()->getIdInfo()->getVariant());\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase ItemIds::BUCKET:\n\t\t\t\t{\n\t\t\t\t\t#if (){// && has perms\n\t\t\t\t\tAPI::floodArea($event->getBlock()->getSide($event->getFace()), $event->getItem()->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE), $session);\n\t\t\t\t\t#}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param PlayerItemUseEvent $event\n\t * @throws AssumptionFailedError\n\t * @throws InvalidArgumentException\n\t * @throws SessionException\n\t * @throws JsonException\n\t * @throws RuntimeException\n\t * @throws Exception\n\t */\n\tprivate function onRightClickAir(PlayerItemUseEvent $event): void\n\t{\n\t\tif (!is_null($event->getItem()->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE_BRUSH))) {\n\t\t\t$event->cancel();\n\t\t\t$session = SessionHelper::getUserSession($event->getPlayer());\n\t\t\tif (!$session instanceof UserSession) return;\n\t\t\t$target = $event->getPlayer()->getTargetBlock(Loader::getInstance()->getToolDistance());\n\t\t\t$brush = $session->getBrushFromItem($event->getItem());\n\t\t\tvar_dump(json_encode($brush, JSON_THROW_ON_ERROR));\n\t\t\tif ($brush instanceof Brush && !is_null($target)) {// && has perms\n\t\t\t\tAPI::createBrush($target, $brush, $session);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param PlayerDropItemEvent $event\n\t */\n\tpublic function onDropItem(PlayerDropItemEvent $event): void\n\t{\n\t\ttry {\n\t\t\tif (!is_null($event->getItem()->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE_BRUSH))) {\n\t\t\t\t$event->cancel();\n\t\t\t\t$session = SessionHelper::getUserSession($event->getPlayer());\n\t\t\t\tif (!$session instanceof UserSession) return;\n\t\t\t\t$brush = $session->getBrushFromItem($event->getItem());\n\t\t\t\tif ($brush instanceof Brush) {\n\t\t\t\t\t$form = new ModalForm(TF::BOLD . $brush->getName(), TF::RED .\n\t\t\t\t\t\t\"Delete\" . TF::WHITE . \" brush from session or \" . TF::GREEN . \"remove\" . TF::WHITE . \" from Inventory?\" . TF::EOL .\n\t\t\t\t\t\timplode(TF::EOL, $event->getItem()->getLore()), TF::BOLD . TF::DARK_RED . \"Delete\", TF::BOLD . TF::DARK_GREEN . \"Remove\");\n\t\t\t\t\t$form->setCallable(function (Player $player, $data) use ($session, $brush) {\n\t\t\t\t\t\t$session->removeBrush($brush, $data);\n\t\t\t\t\t});\n\t\t\t\t\t$event->getPlayer()->sendForm($form);\n\t\t\t\t}\n\t\t\t} else if (!is_null($event->getItem()->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE))) {\n\t\t\t\t$event->cancel();\n\t\t\t\t$event->getPlayer()->getInventory()->remove($event->getItem());\n\t\t\t}\n\t\t} catch (Exception $e) {\n\t\t}\n\t}\n\n\tpublic function onSelectionChange(MWESelectionChangeEvent $event): void\n\t{\n\t\tLoader::getInstance()->getLogger()->debug(\"Called \" . $event->getEventName());\n\t\tif (($session = $event->getSession()) instanceof UserSession && ($player = $event->getPlayer()) !== null) {\n\t\t\t/** @var UserSession $session */\n\t\t\t$session->sidebar->handleScoreboard($session);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/Loader.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2;\n\nuse InvalidArgumentException;\nuse jackmd\\scorefactory\\ScoreFactory;\nuse JsonException;\nuse muqsit\\invmenu\\InvMenuHandler;\nuse pocketmine\\block\\Block;\nuse pocketmine\\data\\bedrock\\EnchantmentIdMap;\nuse pocketmine\\item\\enchantment\\Enchantment;\nuse pocketmine\\item\\enchantment\\ItemFlags;\nuse pocketmine\\lang\\Language;\nuse pocketmine\\lang\\LanguageNotFoundException;\nuse pocketmine\\plugin\\PluginBase;\nuse pocketmine\\plugin\\PluginException;\nuse pocketmine\\scheduler\\ClosureTask;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse RuntimeException;\nuse xenialdan\\apibossbar\\DiverseBossBar;\nuse xenialdan\\customui\\API as CustomUIAPI;\nuse xenialdan\\MagicWE2\\commands\\biome\\BiomeInfoCommand;\nuse xenialdan\\MagicWE2\\commands\\biome\\BiomeListCommand;\nuse xenialdan\\MagicWE2\\commands\\biome\\SetBiomeCommand;\nuse xenialdan\\MagicWE2\\commands\\brush\\BrushCommand;\nuse xenialdan\\MagicWE2\\commands\\clipboard\\ClearClipboardCommand;\nuse xenialdan\\MagicWE2\\commands\\clipboard\\CopyCommand;\nuse xenialdan\\MagicWE2\\commands\\clipboard\\Cut2Command;\nuse xenialdan\\MagicWE2\\commands\\clipboard\\CutCommand;\nuse xenialdan\\MagicWE2\\commands\\clipboard\\FlipCommand;\nuse xenialdan\\MagicWE2\\commands\\clipboard\\PasteCommand;\nuse xenialdan\\MagicWE2\\commands\\clipboard\\RotateCommand;\nuse xenialdan\\MagicWE2\\commands\\debug\\PlaceAllBlockstatesCommand;\nuse xenialdan\\MagicWE2\\commands\\DonateCommand;\nuse xenialdan\\MagicWE2\\commands\\generation\\CylinderCommand;\nuse xenialdan\\MagicWE2\\commands\\HelpCommand;\nuse xenialdan\\MagicWE2\\commands\\history\\ClearhistoryCommand;\nuse xenialdan\\MagicWE2\\commands\\history\\RedoCommand;\nuse xenialdan\\MagicWE2\\commands\\history\\UndoCommand;\nuse xenialdan\\MagicWE2\\commands\\InfoCommand;\nuse xenialdan\\MagicWE2\\commands\\LanguageCommand;\nuse xenialdan\\MagicWE2\\commands\\LimitCommand;\nuse xenialdan\\MagicWE2\\commands\\region\\ReplaceCommand;\nuse xenialdan\\MagicWE2\\commands\\region\\SetCommand;\nuse xenialdan\\MagicWE2\\commands\\ReportCommand;\nuse xenialdan\\MagicWE2\\commands\\selection\\ChunkCommand;\nuse xenialdan\\MagicWE2\\commands\\selection\\HPos1Command;\nuse xenialdan\\MagicWE2\\commands\\selection\\HPos2Command;\nuse xenialdan\\MagicWE2\\commands\\selection\\info\\CountCommand;\nuse xenialdan\\MagicWE2\\commands\\selection\\info\\ListChunksCommand;\nuse xenialdan\\MagicWE2\\commands\\selection\\info\\SizeCommand;\nuse xenialdan\\MagicWE2\\commands\\selection\\Pos1Command;\nuse xenialdan\\MagicWE2\\commands\\selection\\Pos2Command;\nuse xenialdan\\MagicWE2\\commands\\SetRangeCommand;\nuse xenialdan\\MagicWE2\\commands\\TestCommand;\nuse xenialdan\\MagicWE2\\commands\\tool\\DebugCommand;\nuse xenialdan\\MagicWE2\\commands\\tool\\FloodCommand;\nuse xenialdan\\MagicWE2\\commands\\tool\\ToggledebugCommand;\nuse xenialdan\\MagicWE2\\commands\\tool\\TogglewandCommand;\nuse xenialdan\\MagicWE2\\commands\\tool\\WandCommand;\nuse xenialdan\\MagicWE2\\commands\\utility\\CalculateCommand;\nuse xenialdan\\MagicWE2\\commands\\utility\\ToggleWailaCommand;\nuse xenialdan\\MagicWE2\\commands\\VersionCommand;\nuse xenialdan\\MagicWE2\\exception\\ActionRegistryException;\nuse xenialdan\\MagicWE2\\exception\\ShapeRegistryException;\nuse xenialdan\\MagicWE2\\helper\\BlockStatesEntry;\nuse xenialdan\\MagicWE2\\helper\\BlockStatesParser;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\selection\\shape\\ShapeRegistry;\nuse xenialdan\\MagicWE2\\session\\UserSession;\nuse xenialdan\\MagicWE2\\task\\action\\ActionRegistry;\n\nclass Loader extends PluginBase\n{\n\tpublic const FAKE_ENCH_ID = 201;\n\tpublic const PREFIX = TF::BOLD . TF::GOLD . \"[MagicWE2]\" . TF::RESET . \" \";\n\t/** @var Loader|null */\n\tprivate static $instance;\n\t/** @var null|ShapeRegistry */\n\tpublic static $shapeRegistry;\n\t/** @var null|ActionRegistry */\n\tpublic static $actionRegistry;\n\t/** @var Enchantment */\n\tpublic static $ench;\n\t/** @var Language */\n\tprivate $baseLang;\n\t/** @var string[] Donator names */\n\tpublic $donators = [];\n\t/** @var string */\n\tpublic $donatorData = \"\";\n\t/** @var string */\n\tprivate static $rotPath;\n\t/** @var string */\n\tprivate static $doorRotPath;\n\t/** @var DiverseBossBar */#BossBar\n\tpublic $wailaBossBar;\n\t/** @var null|string */\n\tpublic static $scoreboardAPI;\n\n\t/**\n\t * Returns an instance of the plugin\n\t * @return Loader\n\t */\n\tpublic static function getInstance(): Loader\n\t{\n\t\treturn self::$instance;\n\t}\n\n\t/**\n\t * ShapeRegistry\n\t * @return ShapeRegistry\n\t * @throws ShapeRegistryException\n\t */\n\tpublic static function getShapeRegistry(): ShapeRegistry\n\t{\n\t\tif (self::$shapeRegistry) return self::$shapeRegistry;\n\t\tthrow new ShapeRegistryException(\"Shape registry is not initialized\");\n\t}\n\n\tpublic static function getRotFlipPath(): string\n\t{\n\t\treturn self::$rotPath;\n\t\t#return self::getInstance()->getFile() . \"resources\" . DIRECTORY_SEPARATOR . \"rotation_flip_data.json\";\n\t}\n\n\tpublic static function getDoorRotFlipPath(): string\n\t{\n\t\treturn self::$doorRotPath;\n\t\t#return self::getInstance()->getFile() . \"resources\" . DIRECTORY_SEPARATOR . \"door_data.json\";\n\t}\n\n\t/**\n\t * @return bool\n\t */\n\tpublic static function hasScoreboard(): bool\n\t{\n\t\treturn self::$scoreboardAPI !== null;\n\t}\n\n\t/**\n\t * @throws PluginException\n\t * @throws RuntimeException\n\t * @throws JsonException\n\t * @throws AssumptionFailedError\n\t */\n\tpublic function onLoad(): void\n\t{\n\t\tself::$instance = $this;\n\t\tself::$ench = new Enchantment(self::FAKE_ENCH_ID, \"\", 0, ItemFlags::AXE, ItemFlags::NONE, 1);\n\t\t/** @var EnchantmentIdMap $enchantmapinstance */\n\t\t$enchantmapinstance = EnchantmentIdMap::getInstance();\n\t\t$enchantmapinstance->register(self::FAKE_ENCH_ID, self::$ench);\n\t\tself::$shapeRegistry = new ShapeRegistry();\n\t\tself::$actionRegistry = new ActionRegistry();\n\t\tSessionHelper::init();\n\t\t#$this->saveResource(\"rotation_flip_data.json\", true);\n\t\t$this->saveResource(\"blockstate_alias_map.json\", true);\n\n\t\tself::$rotPath = $this->getFile() . \"resources\" . DIRECTORY_SEPARATOR . \"rotation_flip_data.json\";\n\t\tself::$doorRotPath = $this->getFile() . \"resources\" . DIRECTORY_SEPARATOR . \"door_data.json\";\n\t\t/** @var BlockStatesParser $blockstateparserInstance */\n\t\t$blockstateparserInstance = BlockStatesParser::getInstance();\n\t\t$blockstateparserInstance::$rotPath = $this->getFile() . \"resources\" . DIRECTORY_SEPARATOR . \"rotation_flip_data.json\";\n\t\t$blockstateparserInstance::$doorRotPath = $this->getFile() . \"resources\" . DIRECTORY_SEPARATOR . \"door_data.json\";\n\n\t\t$fileGetContents = file_get_contents($this->getDataFolder() . \"blockstate_alias_map.json\");\n\t\tif ($fileGetContents === false) {\n\t\t\tthrow new PluginException(\"blockstate_alias_map.json could not be loaded! Blockstate support has been disabled!\");\n\t\t}\n\n\t\t$blockstateparserInstance->setAliasMap(json_decode($fileGetContents, true, 512, JSON_THROW_ON_ERROR));\n\t\t#StructureStore::getInstance();\n\t}\n\n\t/**\n\t * ActionRegistry\n\t * @return ActionRegistry\n\t * @throws ActionRegistryException\n\t */\n\tpublic static function getActionRegistry(): ActionRegistry\n\t{\n\t\tif (self::$actionRegistry) return self::$actionRegistry;\n\t\tthrow new ActionRegistryException(\"Action registry is not initialized\");\n\t}\n\n\t/**\n\t * @throws InvalidArgumentException\n\t * @throws PluginException\n\t * @throws LanguageNotFoundException\n\t * @throws RuntimeException\n\t */\n\tpublic function onEnable(): void\n\t{\n\t\t$lang = $this->getConfig()->get(\"language\", Language::FALLBACK_LANGUAGE);\n\t\t$this->baseLang = new Language((string)$lang, $this->getFile() . \"resources\" . DIRECTORY_SEPARATOR . \"lang\" . DIRECTORY_SEPARATOR);\n\t\tif ($this->getConfig()->get(\"show-startup-icon\", false)) $this->showStartupIcon();\n\t\t//$this->loadDonator();\n\t\t$this->getLogger()->warning(\"WARNING! Commands and their permissions changed! Make sure to update your permission sets!\");\n\t\tif (!InvMenuHandler::isRegistered()) InvMenuHandler::register($this);\n\t\t//PacketListener::register($this);//TODO currently this just doubles the debug spam\n\t\t$this->getServer()->getPluginManager()->registerEvents(new EventListener($this), $this);\n\t\t$this->getServer()->getCommandMap()->registerAll(\"MagicWE2\", [\n\t\t\t/* -- selection -- */\n\t\t\tnew Pos1Command($this, \"/pos1\", \"Set position 1\", [\"/1\"]),\n\t\t\tnew Pos2Command($this, \"/pos2\", \"Set position 2\", [\"/2\"]),\n\t\t\tnew HPos1Command($this, \"/hpos1\", \"Set position 1 to targeted block\", [\"/h1\"]),\n\t\t\tnew HPos2Command($this, \"/hpos2\", \"Set position 2 to targeted block\", [\"/h2\"]),\n\t\t\tnew ChunkCommand($this, \"/chunk\", \"Set the selection to your current chunk\"),\n\t\t\t/* -- tool -- */\n\t\t\tnew WandCommand($this, \"/wand\", \"Gives you the selection wand\"),\n\t\t\tnew TogglewandCommand($this, \"/togglewand\", \"Toggle the wand tool on/off\", [\"/toggleeditwand\"]),\n\t\t\tnew DebugCommand($this, \"/debug\", \"Gives you the debug stick, which gives information about the clicked block\"),\n\t\t\tnew ToggledebugCommand($this, \"/toggledebug\", \"Toggle the debug stick on/off\"),\n\t\t\t/* -- selection modify -- */\n\t\t\t//new ContractCommand($this,\"/contract\", \"Contract the selection area\"),\n\t\t\t//new ShiftCommand($this,\"/shift\", \"Shift the selection area\"),\n\t\t\t//new OutsetCommand($this,\"/outset\", \"Outset the selection area\"),\n\t\t\t//new InsetCommand($this,\"/inset\", \"Inset the selection area\"),\n\t\t\t/* -- selection info -- */\n\t\t\tnew SizeCommand($this, \"/size\", \"Get information about the selection\"),\n\t\t\tnew CountCommand($this, \"/count\", \"Counts the number of blocks matching a mask in selection\", [\"/analyze\"]),\n\t\t\tnew ListChunksCommand($this, \"/listchunks\", \"List chunks that your selection includes\"),\n\t\t\t/* -- region -- */\n\t\t\tnew SetCommand($this, \"/set\", \"Fill a selection with the specified blocks\"),\n\t\t\t//new LineCommand($this,\"/line\", \"Draws a line segment between cuboid selection corners\"),\n\t\t\tnew ReplaceCommand($this, \"/replace\", \"Replace blocks in an area with other blocks\"),\n\t\t\t#new OverlayCommand($this,\"/overlay\", \"Set a block on top of blocks in the region\", [\"/cover\"]),\n\t\t\t//new CenterCommand($this,\"/center\", \"Set the center block(s)\",[\"/middle\"]),\n\t\t\t//new NaturalizeCommand($this,\"/naturalize\", \"3 layers of dirt on top then rock below\"),\n\t\t\t//new WallsCommand($this,\"/walls\", \"Build the four sides of the selection\"),\n\t\t\t//new FacesCommand($this,\"/faces\", \"Build the walls, ceiling, and floor of a selection\"),\n\t\t\t//new MoveCommand($this,\"/move\", \"Move the contents of the selection\"),\n\t\t\t//new StackCommand($this,\"/stack\", \"Repeat the contents of the selection\"),\n\t\t\t//new HollowCommand($this,\"/hollow\", \"Hollows out the object contained in this selection\"),\n\t\t\t/* -- cosmetic -- */\n\t\t\t//new ForestCommand($this,\"/forest\", \"Make a forest within the region\"),\n\t\t\t//new FloraCommand($this,\"/flora\", \"Make flora within the region\"),\n\t\t\t/* -- generation -- */\n\t\t\tnew CylinderCommand($this, \"/cylinder\", \"Create a cylinder\", [\"/cyl\"]),\n\t\t\t//new HollowCylinderCommand($this,\"/hcyl\", \"Generates a hollow cylinder\"),\n\t\t\t//new SphereCommand($this,\"/sphere\", \"Generates a filled sphere\"),\n\t\t\t//new HollowSphereCommand($this,\"/hsphere\", \"Generates a hollow sphere\"),\n\t\t\t//new PyramidCommand($this,\"/pyramid\", \"Generates a filled pyramid\"),\n\t\t\t//new HollowPyramidCommand($this,\"/hpyramid\", \"Generates a hollow pyramid\"),\n\t\t\t//new PumpkinsCommand($this,\"/pumpkins\", \"Generate pumpkin patches\"),\n\t\t\t/* -- clipboard -- */\n\t\t\tnew CopyCommand($this, \"/copy\", \"Copy the selection to the clipboard\"),\n\t\t\tnew PasteCommand($this, \"/paste\", \"Paste the clipboard’s contents\"),\n\t\t\tnew CutCommand($this, \"/cut\", \"Cut the selection to the clipboard\"),\n\t\t\tnew Cut2Command($this, \"/cut2\", \"Cut the selection to the clipboard - the new way\"),\n\t\t\tnew ClearClipboardCommand($this, \"/clearclipboard\", \"Clear your clipboard\"),\n\t\t\tnew FlipCommand($this, \"/flip\", \"Flip the contents of the clipboard across the origin\", [\"/mirror\"]),\n\t\t\tnew RotateCommand($this, \"/rotate\", \"Rotate the contents of the clipboard around the origin\"),\n\t\t\t/* -- history -- */\n\t\t\tnew UndoCommand($this, \"/undo\", \"Rolls back the last action\"),\n\t\t\tnew RedoCommand($this, \"/redo\", \"Applies the last undo action again\"),\n\t\t\tnew ClearhistoryCommand($this, \"/clearhistory\", \"Clear your history\"),\n\t\t\t/* -- schematic -- */\n\t\t\t//new SchematicCommand($this,\"/schematic\", \"Schematic commands for saving/loading areas\"),\n\t\t\t/* -- navigation -- */\n\t\t\t//new UnstuckCommand($this,\"/unstuck\", \"Switch between your position and pos1 for placement\"),\n\t\t\t//new AscendCommand($this,\"/ascend\", \"Switch between your position and pos1 for placement\", [\"/asc\"]),\n\t\t\t//new DescendCommand($this,\"/descend\", \"Switch between your position and pos1 for placement\", [\"/desc\"]),\n\t\t\t//new CeilCommand($this,\"/ceil\", \"Switch between your position and pos1 for placement\"),\n\t\t\t//new ThruCommand($this,\"/thru\", \"Switch between your position and pos1 for placement\"),\n\t\t\t//new UpCommand($this,\"/up\", \"Switch between your position and pos1 for placement\"),\n\t\t\t/* -- generic -- */\n\t\t\t//new TogglePlaceCommand($this,\"/toggleplace\", \"Switch between your position and pos1 for placement\"),\n\t\t\t//new SearchItemCommand($this,\"/searchitem\", \"Search for an item\"),\n\t\t\t//new RangeCommand($this,\"/range\", \"Set the brush range\"),\n\t\t\tnew TestCommand($this, \"/test\", \"test action\"),//TODO REMOVE\n\t\t\tnew SetRangeCommand($this, \"/setrange\", \"Set tool range\", [\"/toolrange\"]),\n\t\t\tnew LimitCommand($this, \"/limit\", \"Set the block change limit. Use -1 to disable\"),\n\t\t\tnew HelpCommand($this, \"/help\", \"MagicWE help command\", [\"/?\", \"/mwe\", \"/wehelp\"]),//Blame MCPE for client side /help shit! only the aliases work\n\t\t\tnew VersionCommand($this, \"/version\", \"MagicWE version\", [\"/ver\"]),\n\t\t\tnew InfoCommand($this, \"/info\", \"Information about MagicWE\"),\n\t\t\tnew ReportCommand($this, \"/report\", \"Report a bug to GitHub\", [\"/bug\", \"/github\"]),\n\t\t\tnew DonateCommand($this, \"/donate\", \"Donate to support development of MagicWE!\", [\"/support\", \"/paypal\"]),\n\t\t\tnew LanguageCommand($this, \"/language\", \"Set your language\", [\"/lang\"]),\n\t\t\tnew DonateCommand($this, \"/donate\", \"Support the development of MagicWE and get a cape!\", [\"/support\", \"/paypal\"]),\n\t\t\t/* -- biome -- */\n\t\t\tnew BiomeListCommand($this, \"/biomelist\", \"Gets all biomes available\", [\"/biomels\"]),\n\t\t\tnew BiomeInfoCommand($this, \"/biomeinfo\", \"Get the biome of the targeted block\"),\n\t\t\tnew SetBiomeCommand($this, \"/setbiome\", \"Sets the biome of your current block or region\"),\n\t\t\t/* -- utility -- */\n\t\t\t//new DrainCommand($this,\"/drain\", \"Drain a pool\"),\n\t\t\t//new FixLavaCommand($this,\"/fixlava\", \"Fix lava to be stationary\"),\n\t\t\t//new FixWaterCommand($this,\"/fixwater\", \"Fix water to be stationary\"),\n\t\t\t//new SnowCommand($this,\"/snow\", \"Creates a snow layer cover in the selection\"),\n\t\t\t//new ThawCommand($this,\"/thaw\", \"Thaws blocks in the selection\"),\n\t\t\tnew CalculateCommand($this, \"/calculate\", \"Evaluate a mathematical expression\", [\"/calc\", \"/eval\", \"/evaluate\", \"/solve\"]),\n\t\t\tnew ToggleWailaCommand($this, \"/togglewaila\", \"Toggle the What Am I Looking At utility\", [\"/waila\", \"/wyla\"]),\n\t\t\t/* -- debugging -- */\n\t\t\tnew PlaceAllBlockstatesCommand($this, \"/placeallblockstates\", \"Place all blockstates similar to Java debug worlds\"),\n\t\t]);\n\t\tif (class_exists(CustomUIAPI::class)) {\n\t\t\t$this->getLogger()->notice(\"CustomUI found, can use ui-based commands\");\n\t\t\t$this->getServer()->getCommandMap()->registerAll(\"MagicWE2\", [\n\t\t\t\t/* -- brush -- */\n\t\t\t\tnew BrushCommand($this, \"/brush\", \"Opens the brush tool menu\"),\n\t\t\t\t/* -- tool -- */\n\t\t\t\tnew FloodCommand($this, \"/flood\", \"Opens the flood fill tool menu\", [\"/floodfill\"]),\n\t\t\t]);\n\t\t} else {\n\t\t\t$this->getLogger()->notice(TF::RED . \"CustomUI NOT found, can NOT use ui-based commands\");\n\t\t}\n\t\tif (class_exists(ScoreFactory::class)) {\n\t\t\t$this->getLogger()->notice(\"Scoreboard API found, can use scoreboards\");\n\t\t\tself::$scoreboardAPI = ScoreFactory::class;\n\t\t} else {\n\t\t\t$this->getLogger()->notice(TF::RED . \"Scoreboard API NOT found, can NOT use scoreboards\");\n\t\t}\n//\t\t.mcstructure loading tests\n//\t\t$world = self::getInstance()->getServer()->getWorldManager()->getDefaultWorld();\n//\t\tif ($world !== null) {\n//\t\t\t$spawn = $world->getSafeSpawn()->asVector3();\n//\t\t\t$structureFiles = glob($this->getDataFolder() . 'structures' . DIRECTORY_SEPARATOR . \"*.mcstructure\");\n//\t\t\tif ($structureFiles !== false)\n//\t\t\t\tforeach ($structureFiles as $file) {\n//\t\t\t\t\t$this->getLogger()->debug(TF::GOLD . \"Loading \" . basename($file));\n//\t\t\t\t\ttry {\n//\t\t\t\t\t\t/** @var StructureStore $instance */\n//\t\t\t\t\t\t$instance = StructureStore::getInstance();\n//\t\t\t\t\t\t$structure = $instance->loadStructure(basename($file));\n//\t\t\t\t\t\t//this will dump wrong blocks for now\n//\t\t\t\t\t\tforeach ($structure->blocks() as $block) {\n//\t\t\t\t\t\t\t#$this->getLogger()->debug($block->getPos()->asVector3() . ' ' . BlockStatesParser::printStates(BlockStatesParser::getStateByBlock($block), false));\n//\t\t\t\t\t\t\t$world->setBlock(($at = $spawn->addVector($block->getPos()->asVector3())), $block);\n//\t\t\t\t\t\t\tif (($tile = $structure->translateBlockEntity(Position::fromObject($block->getPos()->asVector3(), $world), $at)) instanceof Tile) {\n//\t\t\t\t\t\t\t\t$tileAt = $world->getTileAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ());\n//\t\t\t\t\t\t\t\tif ($tileAt !== null) $world->removeTile($tileAt);\n//\t\t\t\t\t\t\t\t$world->addTile($tile);\n//\t\t\t\t\t\t\t}\n//\t\t\t\t\t\t}\n//\t\t\t\t\t} catch (Exception $e) {\n//\t\t\t\t\t\t$this->getLogger()->debug($e->getMessage());\n//\t\t\t\t\t}\n//\t\t\t\t}\n//\t\t}\n\n\t\t//register WAILA bar\n\t\t$this->wailaBossBar = new DiverseBossBar();\n\t\t$this->wailaBossBar->setPercentage(1.0);\n\t\t//WAILA updater\n\t\t$this->getScheduler()->scheduleDelayedRepeatingTask(new ClosureTask(function (): void {\n\t\t\t$players = Loader::getInstance()->wailaBossBar->getPlayers();\n\t\t\tforeach ($players as $player) {\n\t\t\t\tif (!$player->isOnline() || !SessionHelper::hasSession($player) || (($session = SessionHelper::getUserSession($player)) instanceof UserSession && !$session->isWailaEnabled())) {\n\t\t\t\t\tLoader::getInstance()->wailaBossBar->hideFrom([$player]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (($block = $player->getTargetBlock(10)) instanceof Block && $block->getId() !== 0) {\n\t\t\t\t\tLoader::getInstance()->wailaBossBar->showTo([$player]);\n\t\t\t\t\t$stateEntry = BlockStatesParser::getStateByBlock($block);\n\t\t\t\t\t$sub = $block->getName();\n\t\t\t\t\t$title = (string)$block;\n\t\t\t\t\tif ($stateEntry instanceof BlockStatesEntry) {\n\t\t\t\t\t\t$sub = implode(\",\" . TF::EOL, explode(\",\", BlockStatesParser::printStates($stateEntry, false)));\n\t\t\t\t\t}\n\t\t\t\t\t$distancePercentage = round(floor($block->getPos()->distance($player->getEyePos())) / 10, 1);\n\t\t\t\t\tLoader::getInstance()->wailaBossBar->setTitleFor([$player], $title)->setSubTitleFor([$player], $sub)->setPercentage($distancePercentage);\n\t\t\t\t} else\n\t\t\t\t\tLoader::getInstance()->wailaBossBar->hideFrom([$player]);\n\t\t\t}\n\t\t}), 60, 1);\n\t}\n\n\tpublic function onDisable(): void\n\t{\n\t\ttry {\n\t\t\tforeach (SessionHelper::getPluginSessions() as $session) {\n\t\t\t\tSessionHelper::destroySession($session, false);\n\t\t\t}\n\t\t\tforeach (SessionHelper::getUserSessions() as $session) {\n\t\t\t\tSessionHelper::destroySession($session);\n\t\t\t}\n\t\t} catch (JsonException $e) {\n\t\t\t$this->getLogger()->logException($e);\n\t\t}\n\t}\n\n\t/**\n\t * @return Language\n\t * @api\n\t */\n\tpublic function getLanguage(): Language\n\t{\n\t\treturn $this->baseLang;\n\t}\n\n\tpublic function getToolDistance(): int\n\t{\n\t\treturn (int)$this->getConfig()->get(\"tool-range\", 100);\n\t}\n\n\tpublic function getEditLimit(): int\n\t{\n\t\treturn (int)$this->getConfig()->get(\"limit\", -1);\n\t}\n\n\t/**\n\t * @return array\n\t * @throws RuntimeException\n\t */\n\tpublic static function getInfo(): array\n\t{\n\t\treturn [\n\t\t\t\"| \" . TF::GREEN . self::getInstance()->getFullName() . TF::RESET . \" | Information |\",\n\t\t\t\"| --- | --- |\",\n\t\t\t\"| Website | \" . self::getInstance()->getDescription()->getWebsite() . \" |\",\n\t\t\t\"| Version | \" . self::getInstance()->getDescription()->getVersion() . \" |\",\n\t\t\t\"| Plugin API Version | \" . implode(\", \", self::getInstance()->getDescription()->getCompatibleApis()) . \" |\",\n\t\t\t\"| Authors | \" . implode(\", \", self::getInstance()->getDescription()->getAuthors()) . \" |\",\n\t\t\t\"| Enabled | \" . (Server::getInstance()->getPluginManager()->isPluginEnabled(self::getInstance()) ? TF::GREEN . \"Yes\" : TF::RED . \"No\") . TF::RESET . \" |\",\n\t\t\t\"| Uses UI | \" . (class_exists(CustomUIAPI::class) ? TF::GREEN . \"Yes\" : TF::RED . \"No\") . TF::RESET . \" |\",\n\t\t\t\"| Uses ScoreFactory | \" . (class_exists(ScoreFactory::class) ? TF::GREEN . \"Yes\" : TF::RED . \"No\") . TF::RESET . \" |\",\n\t\t\t\"| Phar | \" . (strpos(self::getInstance()->getFile(), 'phar:') !== false ? TF::GREEN . \"Yes\" : TF::RED . \"No\") . TF::RESET . \" |\",\n\t\t\t\"| PMMP Protocol Version | \" . Server::getInstance()->getVersion() . \" |\",\n\t\t\t\"| PMMP Version | \" . Server::getInstance()->getPocketMineVersion() . \" |\",\n\t\t\t\"| PMMP API Version | \" . Server::getInstance()->getApiVersion() . \" |\",\n\t\t];\n\t}\n\n\tprivate function showStartupIcon(): void\n\t{\n\t\t$colorAxe = TF::BOLD . TF::DARK_PURPLE;\n\t\t$colorAxeStem = TF::LIGHT_PURPLE;\n\t\t$colorAxeSky = TF::LIGHT_PURPLE;\n\t\t$colorAxeFill = TF::GOLD;\n\t\t$axe = [\n\t\t\t\"              {$colorAxe}####{$colorAxeSky}      \",\n\t\t\t\"            {$colorAxe}##{$colorAxeFill}####{$colorAxe}##{$colorAxeSky}    \",\n\t\t\t\"          {$colorAxe}##{$colorAxeFill}######{$colorAxe}##{$colorAxeSky}    \",\n\t\t\t\"        {$colorAxe}##{$colorAxeFill}########{$colorAxe}####{$colorAxeSky}  \",\n\t\t\t\"        {$colorAxe}##{$colorAxeFill}######{$colorAxe}##{$colorAxeStem}##{$colorAxe}##{$colorAxeSky}  \",\n\t\t\t\"          {$colorAxe}######{$colorAxeStem}##{$colorAxe}##{$colorAxeFill}##{$colorAxe}##\",\n\t\t\t\"            {$colorAxe}##{$colorAxeStem}##{$colorAxe}##{$colorAxeFill}####{$colorAxe}##\",\n\t\t\t\"          {$colorAxe}##{$colorAxeStem}##{$colorAxe}##  {$colorAxe}####{$colorAxeSky}  \",\n\t\t\t\"        {$colorAxe}##{$colorAxeStem}##{$colorAxe}##{$colorAxeSky}          \",\n\t\t\t\"      {$colorAxe}##{$colorAxeStem}##{$colorAxe}##{$colorAxeSky}            \",\n\t\t\t\"    {$colorAxe}##{$colorAxeStem}##{$colorAxe}##{$colorAxeSky}              \",\n\t\t\t\"  {$colorAxe}##{$colorAxeStem}##{$colorAxe}##{$colorAxeSky}                \",\n\t\t\t\"{$colorAxe}##{$colorAxeStem}##{$colorAxe}##{$colorAxeSky}       MagicWE v.2\",\n\t\t\t\"{$colorAxe}####{$colorAxeSky}        by XenialDan\"];\n\t\tforeach (array_map(static function ($line) {\n\t\t\treturn preg_replace_callback(\n\t\t\t\t'/ +(?<![#§l5d6]] )(?= [#§l5d6]+)|(?<=[#§l5d6] ) +(?=\\s)/u',\n\t\t\t\t#'/ +(?<!# )(?= #+)|(?<=# ) +(?=\\s)/',\n\t\t\t\tstatic function ($v) {\n\t\t\t\t\treturn substr(str_shuffle(str_pad('+*~', strlen($v[0]))), 0, strlen($v[0]));\n\t\t\t\t},\n\t\t\t\tTF::LIGHT_PURPLE . $line\n\t\t\t);\n\t\t}, $axe) as $axeMsg)\n\t\t\t$this->getLogger()->info($axeMsg);\n\t}\n\n\t/**\n\t * Returns the path to the language files folder.\n\t *\n\t * @return string\n\t */\n\tpublic function getLanguageFolder(): string\n\t{\n\t\treturn $this->getFile() . \"resources\" . DIRECTORY_SEPARATOR . \"lang\" . DIRECTORY_SEPARATOR;\n\t}\n\n\t/**\n\t * Get a list of available languages\n\t * @return string[]\n\t * @phpstan-return array<string, string> code=>name\n\t * @throws LanguageNotFoundException\n\t */\n\tpublic function getLanguageList(): array\n\t{\n\t\treturn Language::getLanguageList($this->getLanguageFolder());\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/clipboard/Clipboard.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\clipboard;\n\nuse Exception;\nuse pocketmine\\Server;\nuse pocketmine\\world\\format\\Chunk;\nuse pocketmine\\world\\World;\nuse Serializable;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nabstract class Clipboard implements Serializable\n{\n\tpublic const DIRECTION_DEFAULT = 1;\n\n\tpublic const FLIP_X = 0x01;\n\tpublic const FLIP_WEST = 0x01;\n\tpublic const FLIP_EAST = 0x01;\n\tpublic const FLIP_Y = 0x02;\n\tpublic const FLIP_UP = 0x02;\n\tpublic const FLIP_DOWN = 0x02;\n\tpublic const FLIP_Z = 0x03;\n\tpublic const FLIP_NORTH = 0x03;\n\tpublic const FLIP_SOUTH = 0x03;\n\n\t/** @var int|null */\n\tpublic $worldId;\n\t/** @var string */\n\tpublic $customName = \"\";\n\n\t/**\n\t * Creates a chunk manager used for async editing\n\t * @param Chunk[] $chunks\n\t * @return AsyncChunkManager\n\t */\n\tpublic static function getChunkManager(array $chunks): AsyncChunkManager\n\t{\n\t\t$manager = new AsyncChunkManager();\n\t\tforeach ($chunks as $hash => $chunk) {\n\t\t\tWorld::getXZ($hash, $x, $z);\n\t\t\t$manager->setChunk($x, $z, $chunk);\n\t\t}\n\t\treturn $manager;\n\t}\n\n    /**\n     * @return World\n     * @throws Exception\n     */\n    public function getWorld(): World\n\t{\n\t\tif (is_null($this->worldId)) {\n\t\t\tthrow new SelectionException(\"World is not set!\");\n\t\t}\n\t\t$world = Server::getInstance()->getWorldManager()->getWorld($this->worldId);\n\t\tif (is_null($world)) {\n\t\t\tthrow new SelectionException(\"World is not found!\");\n\t\t}\n\t\treturn $world;\n\t}\n\n\t/**\n\t * @param World $world\n\t */\n\tpublic function setWorld(World $world): void\n\t{\n\t\t$this->worldId = $world->getId();\n\t}\n\n    /**\n     * @return int\n     */\n    public function getWorldId(): int\n    {\n\t\treturn $this->worldId;\n    }\n\n    /**\n     * @return string\n     */\n    public function getCustomName(): string\n    {\n        return $this->customName;\n    }\n\n    /**\n     * @param string $customName\n     */\n    public function setCustomName(string $customName): void\n    {\n        $this->customName = $customName;\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/clipboard/RevertClipboard.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\clipboard;\n\nuse pocketmine\\world\\format\\Chunk;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\n\nclass RevertClipboard extends Clipboard\n{\n\t/**\n\t * @var Chunk[]\n\t * @phpstan-var array<int, Chunk>\n\t */\n\tpublic $chunks = [];\n\t/**\n\t * @var array[]\n\t * @phpstan-var array<array{int, \\pocketmine\\world\\Position|null}>\n\t */\n\tpublic $blocksAfter;\n\n\t/**\n\t * RevertClipboard constructor.\n\t * @param int $worldId\n\t * @param Chunk[] $chunks\n\t * @param array[] $blocksAfter //CHANGED AS HACK\n\t * @phpstan-param array<array{int, \\pocketmine\\world\\Position|null}> $blocksAfter\n\t */\n\tpublic function __construct(int $worldId, array $chunks = [], array $blocksAfter = [])\n\t{\n\t\t$this->worldId = $worldId;\n\t\t$this->chunks = $chunks;\n\t\t$this->blocksAfter = $blocksAfter;\n\t}\n\n\t/**\n\t * String representation of object\n\t * @link http://php.net/manual/en/serializable.serialize.php\n\t * @return string the string representation of the object or null\n     * @since 5.1.0\n     */\n    public function serialize()\n    {\n\t\t$chunks = [];\n\t\tforeach ($this->chunks as $hash => $chunk) {\n\t\t\t$chunks[$hash] = FastChunkSerializer::serialize($chunk);\n\t\t}\n\t\treturn serialize([\n\t\t\t$this->worldId,\n\t\t\t$chunks,\n\t\t\t$this->blocksAfter\n\t\t]);\n\t}\n\n    /**\n\t * Constructs the object\n\t * @link http://php.net/manual/en/serializable.unserialize.php\n\t * @param string $serialized <p>\n\t * The string representation of the object.\n\t * </p>\n\t * @return void\n\t * @since 5.1.0\n\t * @noinspection PhpMissingParamTypeInspection\n\t */\n    public function unserialize($serialized)\n    {\n\t\t[\n\t\t\t$this->worldId,\n\t\t\t$chunks,\n\t\t\t$this->blocksAfter\n\t\t] = unserialize($serialized/*, ['allowed_classes' => [__CLASS__]]*/);//TODO test pm4\n\t\tforeach ($chunks as $hash => $chunk)\n\t\t\t$this->chunks[$hash] = FastChunkSerializer::deserialize($chunk);\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/clipboard/SingleClipboard.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\clipboard;\n\nuse Generator;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\helper\\BlockEntry;\nuse xenialdan\\MagicWE2\\selection\\Selection;\n\nclass SingleClipboard extends Clipboard\n{\n\t/** @var BlockEntry[] */\n\tprivate $entries = [];\n\t/** @var Selection */\n\tpublic $selection;\n\t/** @var Vector3 */\n\tpublic $position;\n\n\t/**\n\t * SingleClipboard constructor.\n\t * @param Vector3 $position\n\t */\n\tpublic function __construct(Vector3 $position)\n\t{\n\t\t$this->position = $position->asVector3()->floor();\n\t}\n\n\tpublic function addEntry(int $x, int $y, int $z, BlockEntry $entry): void\n\t{\n\t\t$this->entries[World::blockHash($x, $y, $z)] = $entry;\n\t}\n\n\tpublic function clear(): void\n\t{\n\t\t$this->entries = [];\n\t}\n\n\t/**\n\t * @param int|null $x\n\t * @param int|null $y\n\t * @param int|null $z\n\t * @return Generator|BlockEntry[]\n\t */\n\tpublic function iterateEntries(?int &$x, ?int &$y, ?int &$z): Generator\n\t{\n\t\tforeach ($this->entries as $hash => $entry) {\n\t\t\tWorld::getBlockXYZ($hash, $x, $y, $z);\n\t\t\tyield $entry;\n\t\t}\n\t}\n\n\tpublic function getTotalCount(): int\n\t{\n\t\treturn count($this->entries);\n    }\n\n    /**\n     * String representation of object\n     * @link https://php.net/manual/en/serializable.serialize.php\n     * @return string the string representation of the object or null\n     * @since 5.1\n     */\n    public function serialize()\n    {\n        // TODO: Implement serialize() method.\n        return serialize([\n            $this->entries,\n            $this->selection,\n            $this->position\n        ]);\n    }\n\n\t/**\n\t * Constructs the object\n\t * @link https://php.net/manual/en/serializable.unserialize.php\n\t * @param string $serialized <p>\n\t * The string representation of the object.\n\t * </p>\n\t * @return void\n\t * @since 5.1\n\t * @noinspection PhpMissingParamTypeInspection\n\t */\n    public function unserialize($serialized)\n    {\n        // TODO: Implement unserialize() method.\n        [\n\t\t\t$this->entries,\n\t\t\t$this->selection,\n\t\t\t$this->position\n\t\t] = unserialize($serialized/*, ['allowed_classes' => [BlockEntry::class, Selection::class, Vector3::class]]*/);\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/DonateCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass DonateCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.donate\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        try {\n            $name = TF::DARK_PURPLE . \"[\" . TF::GOLD . \"XenialDan\" . TF::DARK_PURPLE . \"] \";\n            $sender->sendMessage($name . \"Greetings! Would you like to buy me an energy drink to stay awake during coding sessions?\");\n            $sender->sendMessage($name . \"Donations are welcomed! Consider donating on \" . TF::DARK_AQUA . \"Pay\" . TF::AQUA . \"Pal:\");\n            $sender->sendMessage($name . TF::DARK_AQUA . \"https://www.paypal.me/xenialdan\");\n\t\t\t$sender->sendMessage($name . \"Thank you! With \" . TF::BOLD . TF::RED . \"<3\" . TF::RESET . TF::DARK_PURPLE . \" - MagicWE2 by https://github.com/thebigsmileXD\");\n\t\t\t$colorHeart = (random_int(0, 1) === 1 ? TF::DARK_RED : TF::DARK_PURPLE);\n\t\t\t$sender->sendMessage(\n\t\t\t\tTF::BOLD . $colorHeart . \"   ****     ****   \" . TF::EOL .\n\t\t\t\tTF::BOLD . $colorHeart . \" **    ** **    ** \" . TF::EOL .\n\t\t\t\tTF::BOLD . $colorHeart . \"**       *       **\" . TF::EOL .\n\t\t\t\tTF::BOLD . $colorHeart . \" **     \" . TF::GOLD . \"MWE\" . $colorHeart . \"     ** \" . TF::EOL .\n\t\t\t\tTF::BOLD . $colorHeart . \"  **           **  \" . TF::EOL .\n\t\t\t\tTF::BOLD . $colorHeart . \"    **       **    \" . TF::EOL .\n\t\t\t\tTF::BOLD . $colorHeart . \"      **   **      \" . TF::EOL .\n\t\t\t\tTF::BOLD . $colorHeart . \"        ***        \" . TF::EOL .\n\t\t\t\tTF::BOLD . $colorHeart . \"         *         \"\n\t\t\t);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/HelpCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands;\n\nuse CortexPE\\Commando\\args\\RawStringArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\Command;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass HelpCommand extends BaseCommand\n{\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new RawStringArgument(\"command\", true));\n\t\t$this->setPermission(\"we.command.help\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        try {\n            $cmds = [];\n            if (empty($args[\"command\"])) {\n\t\t\t\tforeach (array_filter(Loader::getInstance()->getServer()->getCommandMap()->getCommands(), static function (Command $command) use ($sender) {\n\t\t\t\t\treturn strpos($command->getName(), \"/\") !== false && $command->testPermissionSilent($sender);\n\t\t\t\t}) as $cmd) {\n\t\t\t\t\t/** @var Command $cmd */\n\t\t\t\t\t$cmds[$cmd->getName()] = $cmd;\n\t\t\t\t}\n\t\t\t} else if (($cmd = Loader::getInstance()->getServer()->getCommandMap()->getCommand(\"/\" . str_replace(\"/\", \"\", TF::clean((string)$args[\"command\"])))) instanceof Command) {\n\t\t\t\t/** @var Command $cmd */\n\t\t\t\t$cmds[$cmd->getName()] = $cmd;\n\t\t\t} else {\n\t\t\t\t$sender->sendMessage(TF::RED . str_replace(\"/\", \"//\", $lang->translateString(\"%commands.generic.notFound\")));\n\t\t\t\treturn;\n\t\t\t}\n            foreach ($cmds as $command) {\n                $message = TF::LIGHT_PURPLE . \"/\" . $command->getName();\n                if (!empty(($aliases = $command->getAliases()))) {\n                    foreach ($aliases as $i => $alias) {\n                        $aliases[$i] = \"/\" . $alias;\n                    }\n\t\t\t\t\t$message .= TF::DARK_PURPLE . \" [\" . implode(\",\", $aliases) . \"]\";\n\t\t\t\t}\n\t\t\t\t$message .= TF::AQUA . \" \" . $command->getDescription() . TF::EOL . \" - \" . $command->getUsage();\n\t\t\t\t$sender->sendMessage($message);\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/InfoCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass InfoCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.info\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        try {\n\t\t\t$sender->sendMessage(rtrim(Loader::PREFIX, \" \") . \" \" . $lang->translateString('command.info.title'));\n\t\t\tforeach (Loader::getInfo() as $i => $line) {\n\t\t\t\tif ($i <= 1) continue;\n\t\t\t\t$sender->sendMessage($line);\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/LanguageCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\customui\\elements\\Dropdown;\nuse xenialdan\\customui\\elements\\Label;\nuse xenialdan\\customui\\windows\\CustomForm;\nuse xenialdan\\MagicWE2\\commands\\args\\LanguageArgument;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass LanguageCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new LanguageArgument(\"language\", true));\n\t\t$this->setPermission(\"we.command.language\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            if (isset($args[\"language\"])) {\n\t\t\t\t$session->setLanguage((string)$args[\"language\"]);\n\t\t\t\treturn;\n\t\t\t}\n            $languages = Loader::getInstance()->getLanguageList();\n            $form = new CustomForm(Loader::PREFIX . TF::BOLD . TF::DARK_PURPLE . $lang->translateString('ui.language.title'));\n            $form->addElement(new Label($lang->translateString('ui.language.label')));\n            $dropdown = new Dropdown($lang->translateString('ui.language.dropdown'), array_values($languages));\n            $dropdown->setOptionAsDefault($session->getLanguage()->getName());\n            $form->addElement($dropdown);\n            $form->setCallable(function (Player $player, $data) use ($session, $languages) {\n\t\t\t\t$langShort = array_search($data[1], $languages, true);\n\t\t\t\tif (!is_string($langShort)) throw new InvalidArgumentException(\"Invalid data received\");\n\t\t\t\t$session->setLanguage($langShort);\n\t\t\t});\n\t\t\t$sender->sendForm($form);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/LimitCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands;\n\nuse CortexPE\\Commando\\args\\IntegerArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass LimitCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new IntegerArgument(\"limit\", true));\n\t\t$this->setPermission(\"we.command.limit\");\n\t\t$this->setUsage(\"//limit [limit: int|-1]\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        try {\n            if (empty($args[\"limit\"])) {\n                $limit = Loader::getInstance()->getConfig()->get(\"limit\", -1);\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GREEN . $lang->translateString('command.limit.current', [($limit < 0 ? ucfirst(Loader::getInstance()->getLanguage()->translateString('disabled')) : $limit)]));\n\t\t\t} else {\n\t\t\t\tLoader::getInstance()->getConfig()->set(\"limit\", (int)$args[\"limit\"]);\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GREEN . $lang->translateString('command.limit.set', [(int)$args[\"limit\"]]));\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/ReportCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands;\n\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\command\\ConsoleCommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass ReportCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new TextArgument(\"title\", true));\n\t\t$this->setPermission(\"we.command.report\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        try {\n\t\t\t$url = \"Please report your bug with this link (link also in console)\" . TF::EOL;\n\t\t\t$url .= \"https://github.com/thebigsmileXD/MagicWE2/issues/new?labels=Bug&body=\";\n\t\t\t$url .= urlencode(\n\t\t\t\t\"### Description\" . TF::EOL . \"<!-- DESCRIPTION OF YOUR ISSUE -->\" .\n\t\t\t\tTF::EOL .\n\t\t\t\tTF::EOL . \"<!-- DO NOT CHANGE MANUALLY -->\" .\n\t\t\t\tTF::EOL . \"---\" .\n\t\t\t\tTF::EOL . TF::clean(implode(TF::EOL, Loader::getInfo())));\n\t\t\t$url .= \"&title=\" . urlencode(TF::clean(\"[\" . Loader::getInstance()->getDescription()->getVersion() . \"] \" . ((string)($args[\"title\"] ?? \"\"))));\n\n\t\t\tif (!$sender instanceof ConsoleCommandSender) $sender->sendMessage(Loader::PREFIX . $url);\n\t\t\tLoader::getInstance()->getLogger()->alert($url);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/SetRangeCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands;\n\nuse CortexPE\\Commando\\args\\IntegerArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass SetRangeCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new IntegerArgument(\"range\", true));\n\t\t$this->setPermission(\"we.command.setrange\");\n\t\t$this->setUsage(\"//setrange [range: int]\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        try {\n            if (empty($args[\"range\"])) {\n                $range = Loader::getInstance()->getToolDistance();\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GREEN . $lang->translateString('command.setrange.current', [$range]));\n\t\t\t} else {\n\t\t\t\tLoader::getInstance()->getConfig()->set(\"tool-range\", (int)$args[\"range\"]);\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GREEN . $lang->translateString('command.setrange.set', [(int)$args[\"range\"]]));\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/TestCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\task\\action\\TestAction;\nuse xenialdan\\MagicWE2\\task\\AsyncActionTask;\n\nclass TestCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.test\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n\tpublic function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n\t{\n\t\t$lang = Loader::getInstance()->getLanguage();\n\t\tif ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n\t\t\ttry {\n\t\t\t\t$lang = SessionHelper::getUserSession($sender)->getLanguage();\n\t\t\t} catch (SessionException $e) {\n\t\t\t}\n\t\t}\n\t\ttry {\n            //TODO REMOVE DEBUG\n            $pluginSession = SessionHelper::createPluginSession(Loader::getInstance());\n\t\t\t$selection = new Selection($pluginSession->getUUID(), Server::getInstance()->getWorldManager()->getDefaultWorld(), 0, 0, 0, 0, 0, 0);\n\t\t\t$pluginSession->addSelection($selection);\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(\n\t\t\t\tnew AsyncActionTask(\n\t\t\t\t\t$pluginSession->getUUID(),\n\t\t\t\t\t$selection,\n\t\t\t\t\tnew TestAction(),\n\t\t\t\t\t$selection->getShape()->getTouchedChunks($selection->getWorld()),\n\t\t\t\t\t\"minecraft:snow_block\",\n\t\t\t\t\t\"minecraft:tnt\"\n\t\t\t\t)\n\t\t\t);\n\t\t\t$selection = new Selection($pluginSession->getUUID(), Server::getInstance()->getWorldManager()->getDefaultWorld(), 0, 0, 0, 1, 1, 1);\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(\n\t\t\t\tnew AsyncActionTask(\n\t\t\t\t\t$pluginSession->getUUID(),\n\t\t\t\t\t$selection,\n\t\t\t\t\tnew TestAction(),\n\t\t\t\t\t$selection->getShape()->getTouchedChunks($selection->getWorld()),\n\t\t\t\t\t\"minecraft:snow_block\",\n\t\t\t\t\t\"minecraft:tnt\"\n\t\t\t\t)\n\t\t\t);\n\t\t\t$selection = new Selection($pluginSession->getUUID(), Server::getInstance()->getWorldManager()->getDefaultWorld(), 0, 0, 0, 2, 2, 2);\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(\n\t\t\t\tnew AsyncActionTask(\n\t\t\t\t\t$pluginSession->getUUID(),\n\t\t\t\t\t$selection,\n\t\t\t\t\tnew TestAction(),\n\t\t\t\t\t$selection->getShape()->getTouchedChunks($selection->getWorld()),\n\t\t\t\t\t\"minecraft:snow_block\",\n\t\t\t\t\t\"minecraft:tnt\"\n\t\t\t\t)\n\t\t\t);\n\t\t\t$selection = new Selection($pluginSession->getUUID(), Server::getInstance()->getWorldManager()->getDefaultWorld(), 0, 0, 0, 1, 2, 3);\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(\n\t\t\t\tnew AsyncActionTask(\n\t\t\t\t\t$pluginSession->getUUID(),\n\t\t\t\t\t$selection,\n\t\t\t\t\tnew TestAction(),\n\t\t\t\t\t$selection->getShape()->getTouchedChunks($selection->getWorld()),\n\t\t\t\t\t\"minecraft:snow_block\",\n\t\t\t\t\t\"minecraft:tnt\"\n\t\t\t\t)\n\t\t\t);\n\t\t} catch (Exception $error) {\n\t\t\tLoader::getInstance()->getLogger()->logException($error);\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/VersionCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass VersionCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.version\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n\t\t\t} catch (SessionException $e) {\n\t\t\t}\n\t\t}\n\t\ttry {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GREEN . Loader::getInstance()->getDescription()->getVersion());\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/args/LanguageArgument.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\args;\n\nuse CortexPE\\Commando\\args\\StringEnumArgument;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\lang\\LanguageNotFoundException;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass LanguageArgument extends StringEnumArgument\n{\n\tpublic function getTypeName(): string\n\t{\n\t\treturn \"string\";\n\t}\n\n\t/**\n\t * @param string $argument\n\t * @param CommandSender $sender\n\t * @return string\n\t * @throws LanguageNotFoundException\n\t */\n\tpublic function parse(string $argument, CommandSender $sender)\n\t{\n\t\treturn (string)array_search($argument, Loader::getInstance()->getLanguageList(), true);\n\t}\n\n\tpublic function getEnumValues(): array\n\t{\n\t\treturn array_values(Loader::getInstance()->getLanguageList());\n\t}\n\n    public function getEnumName(): string\n    {\n        return \"language\";\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/args/MirrorAxisArgument.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\args;\n\nuse CortexPE\\Commando\\args\\StringEnumArgument;\nuse pocketmine\\command\\CommandSender;\n\nclass MirrorAxisArgument extends StringEnumArgument\n{\n    protected const VALUES = [\"x\" => \"x\", \"z\" => \"z\", \"y\" => \"y\", \"xz\" => \"xz\"];\n\n\tpublic function getTypeName(): string\n\t{\n\t\treturn \"string\";\n\t}\n\n\tpublic function getEnumName(): string\n\t{\n\t\treturn \"axis\";\n\t}\n\n\t/**\n\t * @param string $argument\n\t * @param CommandSender $sender\n\t * @return string //TODO consider changing to Axis\n\t */\n\tpublic function parse(string $argument, CommandSender $sender)\n\t{\n\t\treturn (string)$this->getValue($argument);\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/args/RotateAngleArgument.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\args;\n\nuse CortexPE\\Commando\\args\\StringEnumArgument;\nuse pocketmine\\command\\CommandSender;\n\nclass RotateAngleArgument extends StringEnumArgument\n{\n    /** @var array */\n    protected const VALUES = [\"90\" => 90, \"180\" => 180, \"270\" => 270];\n\n\tpublic function getTypeName(): string\n\t{\n\t\treturn \"int\";\n\t}\n\n\tpublic function getEnumName(): string\n\t{\n\t\treturn \"angle\";\n\t}\n\n\t/**\n\t * @param string $argument\n\t * @param CommandSender $sender\n\t * @return int\n\t */\n\tpublic function parse(string $argument, CommandSender $sender)\n\t{\n\t\treturn (int)$this->getValue($argument);\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/biome/BiomeInfoCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\biome;\n\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Error;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\world\\biome\\Biome;\nuse pocketmine\\world\\biome\\BiomeRegistry;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse ReflectionClass;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass BiomeInfoCommand extends BaseCommand\n{\n\tpublic const FLAG_T = \"t\";\n\tpublic const FLAG_P = \"p\";\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new TextArgument(\"flags\", true));\n\t\t$this->setPermission(\"we.command.biome.info\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $biomeNames = (new ReflectionClass(Biome::class))->getConstants();\n            $biomeNames = array_flip($biomeNames);\n            unset($biomeNames[Biome::MAX_BIOMES]);\n\t\t\tarray_walk($biomeNames, static function (&$value, $key) {\n\t\t\t\t$value = BiomeRegistry::getInstance()->getBiome($key)->getName();\n\t\t\t});\n\t\t\tif (!empty(($flags = ltrim((string)($args[\"flags\"] ?? \"\"), \"-\")))) {\n\t\t\t\t$flagArray = str_split($flags);\n\t\t\t\tif (in_array(self::FLAG_T, $flagArray, true)) {\n\t\t\t\t\t$target = $sender->getTargetBlock(Loader::getInstance()->getToolDistance());\n\t\t\t\t\tif ($target === null) {\n\t\t\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.notarget'));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t$biomeId = $target->getPos()->getWorld()->getOrLoadChunkAtPosition($target->getPos())->getBiomeId($target->getPos()->getX() % 16, $target->getPos()->getZ() % 16);\n\t\t\t\t\t$session->sendMessage(TF::DARK_AQUA . $lang->translateString('command.biomeinfo.attarget'));\n\t\t\t\t\t$session->sendMessage(TF::AQUA . \"ID: $biomeId Name: \" . $biomeNames[$biomeId]);\n\t\t\t\t}\n\t\t\t\tif (in_array(self::FLAG_P, $flagArray, true)) {\n\t\t\t\t\t$biomeId = $sender->getWorld()->getOrLoadChunkAtPosition($sender->getPosition())->getBiomeId($sender->getPosition()->getX() % 16, $sender->getPosition()->getZ() % 16);\n\t\t\t\t\t$session->sendMessage(TF::DARK_AQUA . $lang->translateString('command.biomeinfo.atposition'));\n\t\t\t\t\t$session->sendMessage(TF::AQUA . \"ID: $biomeId Name: \" . $biomeNames[$biomeId]);\n\t\t\t\t}\n                return;\n            }\n            $selection = $session->getLatestSelection();\n            if (is_null($selection)) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n            }\n            if (!$selection->isValid()) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n            }\n            if ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GOLD . $lang->translateString('warning.differentworld'));\n            }\n            $touchedChunks = $selection->getShape()->getTouchedChunks($selection->getWorld());\n            $biomes = [];\n            foreach ($touchedChunks as $touchedChunk) {\n                for ($x = 0; $x < 16; $x++)\n                    for ($z = 0; $z < 16; $z++)\n\t\t\t\t\t\t$biomes[] = (FastChunkSerializer::deserialize($touchedChunk)->getBiomeId($x, $z));\n            }\n            $biomes = array_unique($biomes);\n            $session->sendMessage(TF::DARK_AQUA . $lang->translateString('command.biomeinfo.result', [count($biomes)]));\n            foreach ($biomes as $biomeId) {\n                $session->sendMessage(TF::AQUA . $lang->translateString('command.biomeinfo.result.line', [$biomeId, $biomeNames[$biomeId]]));\n            }\n        } catch (Exception $error) {\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n            $sender->sendMessage($this->getUsage());\n        } catch (Error $error) {\n            Loader::getInstance()->getLogger()->logException($error);\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/biome/BiomeListCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\biome;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\world\\biome\\Biome;\nuse pocketmine\\world\\biome\\BiomeRegistry;\nuse ReflectionClass;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass BiomeListCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.biome.list\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n                /** @var Player $sender */\n                $session = SessionHelper::getUserSession($sender);\n                if (is_null($session)) {\n\t\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n                }\n                $session->sendMessage(TF::DARK_AQUA . $lang->translateString('command.biomelist.title'));\n                foreach ((new ReflectionClass(Biome::class))->getConstants() as $name => $value) {\n\t\t\t\t\tif ($value === Biome::MAX_BIOMES) continue;\n\t\t\t\t\t$name = BiomeRegistry::getInstance()->getBiome($value)->getName();\n\t\t\t\t\t$session->sendMessage(TF::AQUA . $lang->translateString('command.biomelist.result.line', [$value, $name]));\n\t\t\t\t}\n\t\t\t} catch (SessionException $e) {\n\t\t\t} catch (Exception $error) {\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t\t$sender->sendMessage($this->getUsage());\n\t\t\t}\n\t\t}\n    }\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/biome/SetBiomeCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\biome;\n\nuse CortexPE\\Commando\\args\\IntegerArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass SetBiomeCommand extends BaseCommand\n{\n\tpublic const FLAG_P = \"p\";\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new IntegerArgument(\"biome\", false));//TODO add BiomeArgument\n\t\t//TODO flags\n\t\t$this->setPermission(\"we.command.biome.set\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n\t\t\t$selection = $session->getLatestSelection();\n\t\t\tif (is_null($selection)) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n\t\t\t}\n\t\t\tif (!$selection->isValid()) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n\t\t\t}\n\t\t\tif ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GOLD . $lang->translateString('warning.differentworld'));\n\t\t\t}\n\t\t\t$biomeId = (int)$args[\"biome\"];\n\t\t\tAPI::setBiomeAsync($selection, $session, $biomeId);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/brush/BrushCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\brush;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse muqsit\\invmenu\\InvMenu;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\customui\\elements\\Button;\nuse xenialdan\\customui\\elements\\Label;\nuse xenialdan\\customui\\elements\\Toggle;\nuse xenialdan\\customui\\elements\\UIElement;\nuse xenialdan\\customui\\windows\\SimpleForm;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\session\\UserSession;\nuse xenialdan\\MagicWE2\\tool\\Brush;\nuse xenialdan\\MagicWE2\\tool\\BrushProperties;\n\nclass BrushCommand extends BaseCommand\n{\n    /**\n     * This is where all the arguments, permissions, sub-commands, etc would be registered\n     * @throws InvalidArgumentException\n     */\n    protected function prepare(): void\n    {\n        $this->registerSubCommand(new BrushNameCommand(\"name\", \"Get name or rename a brush\"));\n\t\t$this->setPermission(\"we.command.brush\");\n    }\n\n    /**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (!$session instanceof UserSession) {\n                throw new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $form = new SimpleForm(Loader::PREFIX . TF::BOLD . TF::DARK_PURPLE . $lang->translateString('ui.brush.title'), $lang->translateString('ui.brush.content'));\n            $form->addButton(new Button($lang->translateString('ui.brush.create')));\n            $form->addButton(new Button($lang->translateString('ui.brush.getsession')));\n            $form->addButton(new Button($lang->translateString('ui.brush.edithand')));\n            $form->setCallable(function (Player $player, $data) use ($lang, $session) {\n                try {\n                    switch ($data) {\n                        case $lang->translateString('ui.brush.create'):\n                        {\n                            $brush = new Brush(new BrushProperties());\n                            if ($brush instanceof Brush) {\n                                $player->sendForm($brush->getForm());\n                            }\n                            break;\n                        }\n                        case $lang->translateString('ui.brush.getsession'):\n                        {\n                            $menu = InvMenu::create(InvMenu::TYPE_DOUBLE_CHEST);\n                            foreach ($session->getBrushes() as $brush) {\n                                $menu->getInventory()->addItem($brush->toItem());\n                            }\n                            $menu->send($player, \"Session brushes\");\n                            break;\n                        }\n                        case $lang->translateString('ui.brush.edithand'):\n                        {\n                            $brush = $session->getBrushFromItem($player->getInventory()->getItemInHand());\n                            if ($brush instanceof Brush) {\n                                $player->sendForm($brush->getForm(false));\n                            }\n                            break;\n                        }\n                    }\n                    return null;\n                } catch (Exception $error) {\n\t\t\t\t\t$session->sendMessage(TF::RED . $lang->translateString('error'));\n\t\t\t\t\t$session->sendMessage(TF::RED . $error->getMessage());\n\t\t\t\t}\n\t\t\t});\n\t\t\t$sender->sendForm($form);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n\n\t/**\n\t * @param UIElement[] $elements\n\t * @param array $data\n\t * @return array\n\t */\n\tpublic static function generateLore(array $elements, array $data): array\n\t{\n\t\t$return = [];\n\t\tforeach ($elements as $i => $element) {\n\t\t\tif ($element instanceof Label) continue;\n\t\t\tif ($element instanceof Toggle) {\n\t\t\t\t$return[] = ($element->getText() . \": \" . ($data[$i] ? \"Yes\" : \"No\"));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t$return[] = ($element->getText() . \": \" . $data[$i]);\n\t\t}\n\t\treturn $return;\n    }\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/brush/BrushNameCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\brush;\n\nuse CortexPE\\Commando\\args\\RawStringArgument;\nuse CortexPE\\Commando\\BaseSubCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse TypeError;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\session\\UserSession;\nuse xenialdan\\MagicWE2\\tool\\Brush;\n\nclass BrushNameCommand extends BaseSubCommand\n{\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new RawStringArgument(\"name\", true));\n\t\t$this->setPermission(\"we.command.brush.name\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n\tpublic function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n\t{\n\t\t$lang = Loader::getInstance()->getLanguage();\n\t\tif ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n\t\t\ttry {\n\t\t\t\t$lang = SessionHelper::getUserSession($sender)->getLanguage();\n\t\t\t} catch (SessionException $e) {\n\t\t\t}\n\t\t}\n\t\tif (!$sender instanceof Player) {\n\t\t\t$sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n\t\t\treturn;\n\t\t}\n\t\t/** @var Player $sender */\n\t\ttry {\n\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\tif (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$brush = $session->getBrushFromItem($sender->getInventory()->getItemInHand());\n\t\t\tif ($brush instanceof Brush) {\n\t\t\t\tif (empty($args[\"name\"])) {\n\t\t\t\t\t$sender->sendMessage($brush->getName());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t$brush->properties->setCustomName((string)$args[\"name\"]);\n\t\t\t\t$session->sendMessage(TF::GREEN . $lang->translateString('command.brushname.set', [$brush->getName()]));\n\t\t\t\t$session->replaceBrush($brush);\n\t\t\t}\n\t\t} catch (Exception | TypeError $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsageMessage());\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/clipboard/ClearClipboardCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\clipboard;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass ClearClipboardCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.clipboard.clear\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n\t\t\tif (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$session->clearClipboard();\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GREEN . $lang->translateString('command.clearclipboard.cleared'));\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/clipboard/CopyCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\clipboard;\n\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass CopyCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new TextArgument(\"flags\", true));//TODO add FlagArgument (parse returns array with flags)\n\t\t$this->setPermission(\"we.command.clipboard.copy\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $selection = $session->getLatestSelection();\n\t\t\tif (is_null($selection)) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n\t\t\t}\n\t\t\tif (!$selection->isValid()) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n\t\t\t}\n\t\t\tif ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GOLD . $lang->translateString('warning.differentworld'));\n\t\t\t}\n\t\t\t$hasFlags = isset($args[\"flags\"]);\n\t\t\tAPI::copyAsync($selection, $session, $hasFlags ? API::flagParser(explode(\" \", (string)$args[\"flags\"])) : API::FLAG_BASE);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/clipboard/Cut2Command.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\clipboard;\n\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\task\\action\\CutAction;\nuse xenialdan\\MagicWE2\\task\\AsyncActionTask;\n\nclass Cut2Command extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new TextArgument(\"flags\", true));\n\t\t$this->setPermission(\"we.command.clipboard.cut\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $selection = $session->getLatestSelection();\n            if (is_null($selection)) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n            }\n            if (!$selection->isValid()) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n            }\n            if ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GOLD . $lang->translateString('warning.differentworld'));\n            }\n            #$hasFlags = isset($args[\"flags\"]);\n            $action = new CutAction();\n\t\t\t$offset = $selection->getShape()->getMinVec3()->subtractVector($session->getPlayer()->getPosition()->asVector3()->floor())->floor();\n\t\t\t$action->setClipboardVector($offset);\n            Server::getInstance()->getAsyncPool()->submitTask(\n                new AsyncActionTask(\n                    $session->getUUID(),\n                    $selection,\n                    $action,\n\t\t\t\t\t$selection->getShape()->getTouchedChunks($selection->getWorld()),\n\t\t\t\t\t\"air\",//TODO option\n\t\t\t\t\t\"\"\n\t\t\t\t)\n\t\t\t);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/clipboard/CutCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\clipboard;\n\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\block\\BlockFactory;\nuse pocketmine\\block\\BlockLegacyIds;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass CutCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new TextArgument(\"flags\", true));\n\t\t$this->setPermission(\"we.command.clipboard.cut\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $selection = $session->getLatestSelection();\n            if (is_null($selection)) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n\t\t\t}\n\t\t\tif (!$selection->isValid()) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n\t\t\t}\n\t\t\tif ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GOLD . $lang->translateString('warning.differentworld'));\n\t\t\t}\n\t\t\t$hasFlags = isset($args[\"flags\"]);\n\t\t\t//TODO Temp hack - add cutAsync - Update 9th Feb. 2020 LEAVE THAT ALONE! IT WORKS, DO NOT TOUCH IT!\n\t\t\t$flags = $hasFlags ? API::flagParser(explode(\" \", (string)$args[\"flags\"])) : API::FLAG_BASE;\n\t\t\tAPI::copyAsync($selection, $session, $flags);\n\t\t\tAPI::fillAsync($selection, $session, [BlockFactory::getInstance()->get(BlockLegacyIds::AIR, 0)], $flags);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/clipboard/FlipCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\clipboard;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\commands\\args\\MirrorAxisArgument;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\task\\action\\FlipAction;\nuse xenialdan\\MagicWE2\\task\\AsyncClipboardActionTask;\n\nclass FlipCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new MirrorAxisArgument(\"axis\", false));\n\t\t$this->setPermission(\"we.command.clipboard.flip\");\n\t\t//$this->setUsage(\"//flip <axis: X|Z|XZ>\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t$axis = (string)$args[\"axis\"];//TODO change to Axis[]\n\t\t\t$sender->sendMessage(Loader::PREFIX . $lang->translateString('command.flip.try', [$axis]));\n\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\tif (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$clipboard = $session->getCurrentClipboard();\n\t\t\tif (!$clipboard instanceof SingleClipboard) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.noclipboard'));\n\t\t\t}\n\t\t\t$action = new FlipAction($axis);\n            #$offset = $selection->getShape()->getMinVec3()->subtract($session->getPlayer()->asVector3()->floor())->floor();\n            #$action->setClipboardVector($offset);\n            Server::getInstance()->getAsyncPool()->submitTask(\n                new AsyncClipboardActionTask(\n                    $session->getUUID(),\n\t\t\t\t\t$clipboard->selection,\n\t\t\t\t\t$action,\n\t\t\t\t\t$clipboard\n\t\t\t\t)\n\t\t\t);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/clipboard/PasteCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\clipboard;\n\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass PasteCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new TextArgument(\"flags\", true));\n\t\t$this->setPermission(\"we.command.clipboard.paste\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t * @throws AssumptionFailedError\n\t */\n\tpublic function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n\t{\n\t\t$lang = Loader::getInstance()->getLanguage();\n\t\tif ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n\t\t\ttry {\n\t\t\t\t$lang = SessionHelper::getUserSession($sender)->getLanguage();\n\t\t\t} catch (SessionException $e) {\n\t\t\t}\n\t\t}\n\t\tif (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $clipboard = $session->getCurrentClipboard();\n\t\t\tif (is_null($clipboard)) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.noclipboard'));\n\t\t\t}\n\t\t\tif (!$clipboard instanceof SingleClipboard) {//TODO check if i want to pass ANY clipboard instead\n\t\t\t\tthrow new SelectionException($lang->translateString('error.noclipboard'));\n\t\t\t}\n\t\t\t/*if (!API::hasFlag(API::flagParser(explode(\" \", strval($args[\"flags\"]))), API::FLAG_POSITION_RELATIVE)) {\n\t\t\t\t$clipboard->setOffset(new Vector3(0,0,0));//TODO fix? Move to API\n\t\t\t}*/\n\t\t\t$hasFlags = isset($args[\"flags\"]);\n\t\t\tAPI::pasteAsync($clipboard, $session, $sender->getPosition(), $hasFlags ? API::flagParser(explode(\" \", (string)$args[\"flags\"])) : API::FLAG_BASE);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/clipboard/RotateCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\clipboard;\n\nuse CortexPE\\Commando\\args\\BooleanArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\commands\\args\\RotateAngleArgument;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\task\\action\\RotateAction;\nuse xenialdan\\MagicWE2\\task\\AsyncClipboardActionTask;\n\nclass RotateCommand extends BaseCommand\n{\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new RotateAngleArgument(\"angle\", false));\n\t\t$this->registerArgument(1, new BooleanArgument(\"aroundOrigin\", true));\n\t\t$this->setPermission(\"we.command.clipboard.rotate\");\n\t\t//$this->setUsage(\"//rotate <degrees: 1|2|3|-1|-2|-3>\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $angle = (int)$args[\"angle\"];\n\t\t\t$aroundOrigin = $args[\"aroundOrigin\"] ?? true;\n            $sender->sendMessage(Loader::PREFIX . $lang->translateString('command.rotate.try', [$angle]));\n            $session = SessionHelper::getUserSession($sender);\n\t\t\tif (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$clipboard = $session->getCurrentClipboard();\n\t\t\tif (!$clipboard instanceof SingleClipboard) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.noclipboard'));\n\t\t\t}\n\t\t\t$action = new RotateAction($angle/*, $aroundOrigin*/);//TODO reenable origin support if error fixed: does not rotate. Let's see if PHPStan find it for me!\n\t\t\t#$offset = $selection->getShape()->getMinVec3()->subtract($session->getPlayer()->asVector3()->floor())->floor();\n\t\t\t#$action->setClipboardVector($offset);\n\t\t\tvar_dump($action);\n\t\t\tServer::getInstance()->getAsyncPool()->submitTask(\n\t\t\t\tnew AsyncClipboardActionTask(\n\t\t\t\t\t$session->getUUID(),\n\t\t\t\t\t$clipboard->selection,\n\t\t\t\t\t$action,\n\t\t\t\t\t$clipboard\n\t\t\t\t)\n\t\t\t);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/debug/PlaceAllBlockstatesCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\debug;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\BlockStatesParser;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass PlaceAllBlockstatesCommand extends BaseCommand\n{\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.test\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n\t\t\treturn;\n\t\t}\n\t\t/** @var Player $sender */\n\t\ttry {\n\t\t\tBlockStatesParser::placeAllBlockstates($sender->getPosition());\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/generation/CylinderCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\generation;\n\nuse CortexPE\\Commando\\args\\IntegerArgument;\nuse CortexPE\\Commando\\args\\RawStringArgument;\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\selection\\shape\\Cylinder;\n\nclass CylinderCommand extends BaseCommand\n{\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new RawStringArgument(\"blocks\", false));\n\t\t$this->registerArgument(1, new IntegerArgument(\"diameter\", false));\n\t\t$this->registerArgument(2, new IntegerArgument(\"height\", true));\n\t\t$this->registerArgument(3, new TextArgument(\"flags\", true));\n\t\t$this->setPermission(\"we.command.generation.cyl\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t * @throws AssumptionFailedError\n\t */\n\tpublic function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n\t{\n\t\t$lang = Loader::getInstance()->getLanguage();\n\t\tif ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n\t\t\ttry {\n\t\t\t\t$lang = SessionHelper::getUserSession($sender)->getLanguage();\n\t\t\t} catch (SessionException $e) {\n\t\t\t}\n\t\t}\n\t\tif (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t$messages = [];\n\t\t\t$error = false;\n\t\t\t$blocks = (string)$args[\"blocks\"];//TODO change to Palette\n\t\t\t$diameter = (int)$args[\"diameter\"];\n\t\t\t$height = (int)($args[\"height\"] ?? 1);\n\t\t\t$newblocks = API::blockParser($blocks, $messages, $error);\n\t\t\tforeach ($messages as $message) {\n\t\t\t\t$sender->sendMessage($message);\n\t\t\t}\n\t\t\tif (!$error) {\n\t\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\t\tif (is_null($session)) {\n\t\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t\t}\n\t\t\t\t$cyl = new Cylinder($sender->getPosition()->asVector3()->floor(), $height, $diameter);\n\t\t\t\t$cylSelection = new Selection($session->getUUID(), $sender->getWorld());\n\t\t\t\t$cylSelection->setShape($cyl);\n\t\t\t\t$hasFlags = isset($args[\"flags\"]);\n\t\t\t\tAPI::fillAsync($cylSelection, $session, $newblocks, $hasFlags ? API::flagParser(explode(\" \", (string)$args[\"flags\"])) : API::FLAG_BASE);\n\t\t\t} else {\n\t\t\t\tthrow new InvalidArgumentException(\"Could not fill with the selected blocks\");\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/history/ClearhistoryCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\history;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass ClearhistoryCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.history.clear\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n\t\t\tif (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$session->clearHistory();\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GREEN . $lang->translateString('command.history.cleared'));\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/history/RedoCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\history;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass RedoCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.history.redo\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\tif (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$session->redo();\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/history/UndoCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\history;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass UndoCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.history.undo\");\n\t}\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\tif (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$session->undo();\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/region/OverlayCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\region;\n\nuse CortexPE\\Commando\\args\\RawStringArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass OverlayCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new RawStringArgument(\"blocks\", false));\n\t\t$this->setPermission(\"we.command.region.overlay\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t$messages = [];\n\t\t\t$error = false;\n\t\t\t$blocks = API::blockParser((string)$args[\"blocks\"], $messages, $error);//TODO change to Palette\n\t\t\tforeach ($messages as $message) {\n\t\t\t\t$sender->sendMessage($message);\n\t\t\t}\n\t\t\t$return = !$error;\n\t\t\tif ($return) {\n\t\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\t\tif (is_null($session)) {\n\t\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t\t}\n\t\t\t\t$selection = $session->getLatestSelection();\n                if (is_null($selection)) {\n\t\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n                }\n                if (!$selection->isValid()) {\n\t\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n                }\n                if ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GOLD . $lang->translateString('warning.differentworld'));\n\t\t\t\t}\n\t\t\t\t#API::overlayReplaceAsync($selection, $session, [], $blocks, API::flagParser(explode(\" \", strval($args[\"flags\"]))));\n\t\t\t} else {\n\t\t\t\tthrow new InvalidArgumentException(\"Could not replace with the selected blocks\");\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/region/ReplaceCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\region;\n\nuse CortexPE\\Commando\\args\\RawStringArgument;\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass ReplaceCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new RawStringArgument(\"findblocks\", false));\n\t\t$this->registerArgument(1, new RawStringArgument(\"replaceblocks\", false));\n\t\t$this->registerArgument(2, new TextArgument(\"flags\", true));\n\t\t$this->setPermission(\"we.command.region.replace\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t$messages = [];\n\t\t\t$error = false;\n\t\t\t$findBlocks = API::blockParser((string)$args[\"findblocks\"], $messages, $error);//TODO change to Palette\n\t\t\t$replaceBlocks = API::blockParser((string)$args[\"replaceblocks\"], $messages, $error);//TODO change to Palette\n\t\t\tforeach ($messages as $message) {\n\t\t\t\t$sender->sendMessage($message);\n\t\t\t}\n\t\t\t$return = !$error;\n\t\t\tif ($return) {\n\t\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\t\tif (is_null($session)) {\n\t\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t\t}\n\t\t\t\t$selection = $session->getLatestSelection();\n\t\t\t\tif (is_null($selection)) {\n\t\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n\t\t\t\t}\n\t\t\t\tif (!$selection->isValid()) {\n\t\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n\t\t\t\t}\n\t\t\t\tif ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GOLD . $lang->translateString('warning.differentworld'));\n\t\t\t\t}\n\t\t\t\t$hasFlags = isset($args[\"flags\"]);\n\t\t\t\tAPI::replaceAsync($selection, $session, $findBlocks, $replaceBlocks, $hasFlags ? API::flagParser(explode(\" \", (string)$args[\"flags\"])) : API::FLAG_BASE);\n\t\t\t} else {\n\t\t\t\tthrow new InvalidArgumentException(\"Could not replace with the selected blocks\");\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/region/SetCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\region;\n\nuse CortexPE\\Commando\\args\\RawStringArgument;\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass SetCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new RawStringArgument(\"blocks\", false));\n\t\t$this->registerArgument(1, new TextArgument(\"flags\", true));\n\t\t$this->setPermission(\"we.command.region.set\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t$messages = [];\n\t\t\t$error = false;\n\t\t\t$replaceBlocks = API::blockParser((string)$args[\"blocks\"], $messages, $error);//TODO change to Palette\n\t\t\tforeach ($messages as $message) {\n\t\t\t\t$sender->sendMessage($message);\n\t\t\t}\n\t\t\tif (!$error) {\n\t\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\t\tif (is_null($session)) {\n\t\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t\t}\n\t\t\t\t$selection = $session->getLatestSelection();\n\t\t\t\tif (is_null($selection)) {\n\t\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n\t\t\t\t}\n\t\t\t\tif (!$selection->isValid()) {\n\t\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n\t\t\t\t}\n\t\t\t\tif ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GOLD . $lang->translateString('warning.differentworld'));\n\t\t\t\t}\n\t\t\t\t$hasFlags = isset($args[\"flags\"]);\n\t\t\t\tAPI::fillAsync($selection, $session, $replaceBlocks, $hasFlags ? API::flagParser(explode(\" \", (string)$args[\"flags\"])) : API::FLAG_BASE);\n\t\t\t} else {\n\t\t\t\tthrow new InvalidArgumentException(\"Could not fill with the selected blocks\");\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/selection/ChunkCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\selection;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Error;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\world\\Position;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass ChunkCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.selection.chunk\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n\tpublic function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n\t{\n\t\t$lang = Loader::getInstance()->getLanguage();\n\t\tif ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n\t\t\ttry {\n\t\t\t\t$lang = SessionHelper::getUserSession($sender)->getLanguage();\n\t\t\t} catch (SessionException $e) {\n\t\t\t}\n\t\t}\n\t\tif (!$sender instanceof Player) {\n\t\t\t$sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n\t\t\treturn;\n\t\t}\n\t\t/** @var Player $sender */\n\t\ttry {\n\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\tif (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$selection = $session->getLatestSelection() ?? $session->addSelection(new Selection($session->getUUID(), $sender->getWorld())); // TODO check if the selection inside of the session updates\n\t\t\tif (is_null($selection)) {\n\t\t\t\tthrow new Error(\"No selection created - Check the console for errors\");\n\t\t\t}\n\t\t\t$chunk = $sender->getWorld()->getOrLoadChunkAtPosition($sender->getPosition());\n\t\t\tif (is_null($chunk)) {\n\t\t\t\tthrow new Error(\"Could not find a chunk at your position\");\n\t\t\t}\n\t\t\t$x = $sender->getPosition()->x >> 4;\n\t\t\t$z = $sender->getPosition()->x >> 4;\n\t\t\t$selection->setPos1(Position::fromObject(new Vector3($x * 16, 0, $z * 16), $sender->getWorld()));\n\t\t\t$selection->setPos2(Position::fromObject(new Vector3($x * 16 + 15, World::Y_MAX, $z * 16 + 15), $sender->getWorld()));\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t} catch (Error $error) {\n\t\t\tLoader::getInstance()->getLogger()->logException($error);\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/selection/HPos1Command.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\selection;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Error;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass HPos1Command extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.selection.hpos\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $selection = $session->getLatestSelection() ?? $session->addSelection(new Selection($session->getUUID(), $sender->getWorld())); // TODO check if the selection inside of the session updates\n            if (is_null($selection)) {\n                throw new Error(\"No selection created - Check the console for errors\");\n            }\n            $target = $sender->getTargetBlock(Loader::getInstance()->getToolDistance());\n            if ($target === null) {\n                $sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.notarget'));\n                return;\n            }\n            $selection->setPos1($target->getPos());\n        } catch (Exception $error) {\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n            $sender->sendMessage($this->getUsage());\n        } catch (Error $error) {\n            Loader::getInstance()->getLogger()->logException($error);\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/selection/HPos2Command.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\selection;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Error;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass HPos2Command extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.selection.hpos\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $selection = $session->getLatestSelection() ?? $session->addSelection(new Selection($session->getUUID(), $sender->getWorld())); // TODO check if the selection inside of the session updates\n            if (is_null($selection)) {\n                throw new Error(\"No selection created - Check the console for errors\");\n            }\n            $target = $sender->getTargetBlock(Loader::getInstance()->getToolDistance());\n            if ($target === null) {\n                $sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.notarget'));\n                return;\n            }\n            $selection->setPos2($target->getPos());\n        } catch (Exception $error) {\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n            $sender->sendMessage($this->getUsage());\n        } catch (Error $error) {\n            Loader::getInstance()->getLogger()->logException($error);\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/selection/Pos1Command.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\selection;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Error;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass Pos1Command extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.selection.pos\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $selection = $session->getLatestSelection() ?? $session->addSelection(new Selection($session->getUUID(), $sender->getWorld())); // TODO check if the selection inside of the session updates\n            if (is_null($selection)) {\n                throw new Error(\"No selection created - Check the console for errors\");\n            }\n            $selection->setPos1($sender->getPosition());\n        } catch (Exception $error) {\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n            $sender->sendMessage($this->getUsage());\n        } catch (Error $error) {\n            Loader::getInstance()->getLogger()->logException($error);\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/selection/Pos2Command.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\selection;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Error;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass Pos2Command extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.selection.pos\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $selection = $session->getLatestSelection() ?? $session->addSelection(new Selection($session->getUUID(), $sender->getWorld())); // TODO check if the selection inside of the session updates\n            if (is_null($selection)) {\n                throw new Error(\"No selection created - Check the console for errors\");\n            }\n            $selection->setPos2($sender->getPosition());\n        } catch (Exception $error) {\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n            $sender->sendMessage($this->getUsage());\n        } catch (Error $error) {\n            Loader::getInstance()->getLogger()->logException($error);\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/selection/info/CountCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\selection\\info;\n\nuse CortexPE\\Commando\\args\\RawStringArgument;\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\task\\action\\CountAction;\nuse xenialdan\\MagicWE2\\task\\AsyncActionTask;\n\nclass CountCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new RawStringArgument(\"blocks\", true));\n\t\t$this->registerArgument(1, new TextArgument(\"flags\", true));\n\t\t$this->setPermission(\"we.command.selection.info.count\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $error = false;\n            if (!empty($args[\"blocks\"])) {\n\t\t\t\t$messages = [];\n\t\t\t\tAPI::blockParser(($filterBlocks = (string)$args[\"blocks\"]), $messages, $error);//TODO change to Palette\n\t\t\t\tforeach ($messages as $message) {\n\t\t\t\t\t$sender->sendMessage($message);\n\t\t\t\t}\n\t\t\t} else $filterBlocks = \"\";\n            if (!$error) {\n                $session = SessionHelper::getUserSession($sender);\n                if (is_null($session)) {\n\t\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n                }\n                $selection = $session->getLatestSelection();\n                if (is_null($selection)) {\n\t\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n                }\n                if (!$selection->isValid()) {\n\t\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n                }\n                if ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t\t$session->sendMessage(TF::GOLD . $lang->translateString('warning.differentworld'));\n                }\n                Server::getInstance()->getAsyncPool()->submitTask(\n                    new AsyncActionTask(\n                        $session->getUUID(),\n                        $selection,\n                        new CountAction(),\n                        $selection->getShape()->getTouchedChunks($selection->getWorld()),\n                        \"\",\n                        $filterBlocks\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthrow new InvalidArgumentException(\"Could not count the selected blocks\");\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/selection/info/ListChunksCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\selection\\info;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass ListChunksCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.selection.info.listchunks\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $selection = $session->getLatestSelection();\n            if (is_null($selection)) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n            }\n            if (!$selection->isValid()) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n            }\n            if ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GOLD . $lang->translateString('warning.differentworld'));\n            }\n            $touchedChunks = $selection->getShape()->getTouchedChunks($selection->getWorld());\n            $session->sendMessage(TF::DARK_AQUA . $lang->translateString('command.listchunks.found', [count($touchedChunks)]));\n            foreach ($touchedChunks as $chunkHash => $touchedChunk) {\n\t\t\t\t$chunk = FastChunkSerializer::deserialize($touchedChunk);\n\t\t\t\t$biomes = [];\n\t\t\t\tfor ($x = 0; $x < 16; $x++)\n\t\t\t\t\tfor ($z = 0; $z < 16; $z++)\n\t\t\t\t\t\t$biomes[] = (FastChunkSerializer::deserialize($touchedChunk)->getBiomeId($x, $z));\n\t\t\t\t$biomes = array_unique($biomes);\n\t\t\t\t$biomecount = count($biomes);\n\t\t\t\t$biomes = implode(\", \", $biomes);\n\t\t\t\tWorld::getXZ($chunkHash, $cx, $cz);\n\t\t\t\t$session->sendMessage(TF::AQUA . \"ID: {$chunkHash} | X: {$cx} Z: {$cz} | Subchunks: {$chunk->getHeight()} | Biomes: ($biomecount) $biomes\");\n\t\t\t}\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/selection/info/SizeCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\selection\\info;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass SizeCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.selection.info.size\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n            $session = SessionHelper::getUserSession($sender);\n            if (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $selection = $session->getLatestSelection();\n            if (is_null($selection)) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.noselection'));\n            }\n            if (!$selection->isValid()) {\n\t\t\t\tthrow new SelectionException($lang->translateString('error.selectioninvalid'));\n            }\n\t\t\tif ($selection->getWorld() !== $sender->getWorld()) {\n\t\t\t\t$sender->sendMessage(Loader::PREFIX . TF::GOLD . $lang->translateString('warning.differentworld'));\n\t\t\t}\n\t\t\t$session->sendMessage(TF::DARK_AQUA . $lang->translateString('command.size'));\n\t\t\t$session->sendMessage(TF::AQUA . \"Total: {$selection->getShape()->getTotalCount()} X: {$selection->getSizeX()} Y: {$selection->getSizeY()} Z: {$selection->getSizeZ()}\");\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/tool/DebugCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\tool;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Error;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\item\\enchantment\\EnchantmentInstance;\nuse pocketmine\\item\\ItemFactory;\nuse pocketmine\\item\\ItemIds;\nuse pocketmine\\nbt\\tag\\CompoundTag;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass DebugCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.tool.debug\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t$item = ItemFactory::getInstance()->get(ItemIds::STICK);\n\t\t\t$item->addEnchantment(new EnchantmentInstance(Loader::$ench));\n\t\t\t$item->setCustomName(Loader::PREFIX . TF::BOLD . TF::DARK_PURPLE . $lang->translateString('tool.debug'));\n\t\t\t$item->setLore([\n\t\t\t\t$lang->translateString('tool.debug.lore.1'),\n\t\t\t\t$lang->translateString('tool.debug.lore.2'),\n\t\t\t\t$lang->translateString('tool.debug.lore.3')\n\t\t\t]);\n\t\t\t$item->getNamedTag()->setTag(API::TAG_MAGIC_WE, CompoundTag::create());\n\t\t\t$sender->getInventory()->addItem($item);\n\t\t} catch (Exception $error) {\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n            $sender->sendMessage($this->getUsage());\n        } catch (Error $error) {\n            Loader::getInstance()->getLogger()->logException($error);\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/tool/FloodCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\tool;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\utils\\TextFormat as TF;\n\nclass FloodCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.tool.floodfill\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $sender->sendMessage(TF::RED . \"TEMPORARILY DISABLED!\");\n        /*\n        if (!$sender instanceof Player) return;\n        /** @var Player $sender * /\n        $lang = Loader::getInstance()->getLanguage();\n        try {\n            if ($sender instanceof Player) {\n                $form = new CustomForm(Loader::PREFIX . TF::BOLD . TF::DARK_PURPLE . $lang->translateString('ui.flood.title'));\n                $form->addElement(new Slider($lang->translateString('ui.flood.options.limit'), 0, 5000, 500.0));\n                $form->addElement(new Input($lang->translateString('ui.flood.options.blocks'), $lang->translateString('ui.flood.options.blocks.placeholder')));\n                $form->addElement(new Label($lang->translateString('ui.flood.options.label.infoapply')));\n                $form->setCallable(function (Player $player, $data) use ($form) {\n                    $item = ItemFactory::get(ItemIds::BUCKET, 1);\n                    $item->addEnchantment(new EnchantmentInstance(Enchantment::getEnchantment(Loader::FAKE_ENCH_ID)));\n                    $item->setCustomName(Loader::PREFIX . TF::BOLD . TF::DARK_PURPLE . 'Flood');\n                    $item->setLore(BrushCommand::generateLore($form->getContent(), $data));\n                    $item->setNamedTagEntry(new CompoundTag(API::TAG_MAGIC_WE, [\n                        new StringTag(\"blocks\", $data[1]),\n                        new FloatTag(\"limit\", $data[0]),\n                    ]));\n                    $player->getInventory()->addItem($item);\n                });\n                $sender->sendForm($form);\n            } else {\n                $sender->sendMessage(TF::RED . \"Console can not use this command.\");\n            }\n        } catch (\\Exception $error) {\n            $sender->sendMessage(Loader::PREFIX . TF::RED . Loader::getInstance()->getLanguage()->translateString('error.command-error'));\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n            $sender->sendMessage($this->getUsage());\n        } catch (\\ArgumentCountError $error) {\n            $sender->sendMessage(Loader::PREFIX . TF::RED . Loader::getInstance()->getLanguage()->translateString('error.command-error'));\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n            $sender->sendMessage($this->getUsage());\n        } catch (\\Error $error) {\n            Loader::getInstance()->getLogger()->logException($error);\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n        }*/\n    }\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/tool/ToggledebugCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\tool;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass ToggledebugCommand extends BaseCommand\n{\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.tool.toggledebug\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\tif (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$sender->sendMessage($session->setDebugToolEnabled(!$session->isDebugToolEnabled()));\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/tool/TogglewandCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\tool;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass TogglewandCommand extends BaseCommand\n{\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.tool.togglewand\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\tif (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$sender->sendMessage($session->setWandEnabled(!$session->isWandEnabled()));\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/tool/WandCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\tool;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Error;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\item\\Durable;\nuse pocketmine\\item\\enchantment\\EnchantmentInstance;\nuse pocketmine\\item\\ItemFactory;\nuse pocketmine\\item\\ItemIds;\nuse pocketmine\\nbt\\tag\\CompoundTag;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass WandCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.tool.wand\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n        if (!$sender instanceof Player) {\n            $sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n            return;\n        }\n        /** @var Player $sender */\n        try {\n\t\t\t/** @var Durable $item */\n\t\t\t$item = ItemFactory::getInstance()->get(ItemIds::WOODEN_AXE);\n\t\t\t$item->addEnchantment(new EnchantmentInstance(Loader::$ench));\n\t\t\t$item->setUnbreakable(true);\n\t\t\t$item->setCustomName(Loader::PREFIX . TF::BOLD . TF::DARK_PURPLE . $lang->translateString('tool.wand'));\n\t\t\t$item->setLore([\n\t\t\t\t$lang->translateString('tool.wand.lore.1'),\n\t\t\t\t$lang->translateString('tool.wand.lore.2'),\n\t\t\t\t$lang->translateString('tool.wand.lore.3')\n\t\t\t]);\n\t\t\t$item->getNamedTag()->setTag(API::TAG_MAGIC_WE, CompoundTag::create());\n\t\t\tif (!$sender->getInventory()->contains($item)) $sender->getInventory()->addItem($item);\n\t\t} catch (Exception $error) {\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n            $sender->sendMessage($this->getUsage());\n        } catch (Error $error) {\n            Loader::getInstance()->getLogger()->logException($error);\n            $sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n        }\n    }\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/utility/CalculateCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\utility;\n\nuse CortexPE\\Commando\\args\\TextArgument;\nuse CortexPE\\Commando\\BaseCommand;\nuse CortexPE\\Commando\\exception\\ArgumentOrderException;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\CalculationException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass CalculateCommand extends BaseCommand\n{\n\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws ArgumentOrderException\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->registerArgument(0, new TextArgument(\"expression\", false));\n\t\t$this->setPermission(\"we.command.utility.calculate\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n    public function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n    {\n        $lang = Loader::getInstance()->getLanguage();\n        if ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n            try {\n                $lang = SessionHelper::getUserSession($sender)->getLanguage();\n            } catch (SessionException $e) {\n            }\n        }\n\t\ttry {\n\t\t\t$sender->sendMessage((string)$args[\"expression\"] . \" = \" . API::evalAsMath((string)$args[\"expression\"]));\n\t\t} catch (CalculationException $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . (string)$args[\"expression\"]);\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/commands/utility/ToggleWailaCommand.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\commands\\utility;\n\nuse CortexPE\\Commando\\BaseCommand;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\command\\CommandSender;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass ToggleWailaCommand extends BaseCommand\n{\n\t/**\n\t * This is where all the arguments, permissions, sub-commands, etc would be registered\n\t * @throws InvalidArgumentException\n\t */\n\tprotected function prepare(): void\n\t{\n\t\t$this->setPermission(\"we.command.utility.togglewaila\");\n\t}\n\n\t/**\n\t * @param CommandSender $sender\n\t * @param string $aliasUsed\n\t * @param mixed[] $args\n\t */\n\tpublic function onRun(CommandSender $sender, string $aliasUsed, array $args): void\n\t{\n\t\t$lang = Loader::getInstance()->getLanguage();\n\t\tif ($sender instanceof Player && SessionHelper::hasSession($sender)) {\n\t\t\ttry {\n\t\t\t\t$lang = SessionHelper::getUserSession($sender)->getLanguage();\n\t\t\t} catch (SessionException $e) {\n\t\t\t}\n\t\t}\n\t\tif (!$sender instanceof Player) {\n\t\t\t$sender->sendMessage(TF::RED . $lang->translateString('error.runingame'));\n\t\t\treturn;\n\t\t}\n\t\t/** @var Player $sender */\n\t\ttry {\n\t\t\t$session = SessionHelper::getUserSession($sender);\n\t\t\tif (is_null($session)) {\n\t\t\t\tthrow new SessionException($lang->translateString('error.nosession', [Loader::getInstance()->getName()]));\n\t\t\t}\n\t\t\t$sender->sendMessage($session->setWailaEnabled(!$session->isWailaEnabled()));\n\t\t} catch (Exception $error) {\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $lang->translateString('error.command-error'));\n\t\t\t$sender->sendMessage(Loader::PREFIX . TF::RED . $error->getMessage());\n\t\t\t$sender->sendMessage($this->getUsage());\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "src/xenialdan/MagicWE2/event/MWEEditEvent.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\event;\n\nuse pocketmine\\block\\Block;\nuse pocketmine\\event\\Cancellable;\nuse pocketmine\\event\\CancellableTrait;\nuse pocketmine\\player\\Player;\nuse pocketmine\\plugin\\Plugin;\nuse xenialdan\\MagicWE2\\session\\Session;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass MWEEditEvent extends MWEEvent implements Cancellable\n{\n\tuse CancellableTrait;\n\n\t/** @var Block[] */\n\tprivate $oldBlocks;\n\t/** @var Block[] */\n\tprivate $newBlocks;\n\t/** @var null|Session */\n\tprivate $session;\n\n\t/**\n\t * MWEEditEvent constructor.\n\t * @param Plugin $plugin\n\t * @param Block[] $oldBlocks\n\t * @param Block[] $newBlocks\n\t * @param Session|null $session\n\t */\n\tpublic function __construct(Plugin $plugin, array $oldBlocks, array $newBlocks, ?Session $session)\n\t{\n        parent::__construct($plugin);\n        $this->oldBlocks = $oldBlocks;\n        $this->newBlocks = $newBlocks;\n        $this->session = $session;\n    }\n\n    /**\n     * @return null|Session\n     */\n    public function getSession(): ?Session\n    {\n        return $this->session;\n    }\n\n    /**\n     * @return null|Player\n     */\n    public function getPlayer(): ?Player\n    {\n        if (($session = $this->getSession()) instanceof UserSession)\n            /** @var UserSession $session */\n            $session->getPlayer();\n        return null;\n    }\n\n    /**\n     * @param null|Player $player\n     */\n    public function setPlayer(?Player $player): void\n    {\n        if (($session = $this->getSession()) instanceof UserSession)\n            /** @var UserSession $session */\n            $session->setPlayer($player);\n    }\n\n    /**\n     * @return Block[]\n     */\n    public function getOldBlocks(): array\n    {\n        return $this->oldBlocks;\n    }\n\n    /**\n     * @return Block[]\n     */\n    public function getNewBlocks(): array\n    {\n\t\treturn $this->newBlocks;\n\t}\n\n\t/**\n\t * @param Block[] $newBlocks\n\t */\n\tpublic function setNewBlocks(array $newBlocks): void\n\t{\n\t\t$this->newBlocks = $newBlocks;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/event/MWEEvent.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\event;\n\nuse pocketmine\\event\\plugin\\PluginEvent;\n\nclass MWEEvent extends PluginEvent\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/event/MWESelectionChangeEvent.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\event;\n\nuse pocketmine\\player\\Player;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\session\\Session;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass MWESelectionChangeEvent extends MWEEvent\n{\n\tpublic const TYPE_PLUGIN = 0;\n\tpublic const TYPE_POS1 = 1;\n\tpublic const TYPE_POS2 = 2;\n\tpublic const TYPE_WORLD = 3;\n\tpublic const TYPE_SHAPE = 4;\n\n\tprivate Selection $selection;\n\tprivate ?Session $session;\n\tprivate int $type;\n\n\tpublic function __construct(Selection $selection, int $type)\n\t{\n\t\tparent::__construct(Loader::getInstance());\n\t\t$this->selection = $selection;\n\t\t$this->type = $type;\n\t\ttry {\n\t\t\t$this->session = SessionHelper::getSessionByUUID($selection->sessionUUID);\n\t\t} catch (SessionException $e) {\n\t\t}\n\t}\n\n\t/**\n\t * @return Selection\n\t */\n\tpublic function getSelection(): Selection\n\t{\n\t\treturn $this->selection;\n\t}\n\n\t/**\n\t * @param Selection $selection\n\t */\n\tpublic function setSelection(Selection $selection): void\n\t{\n\t\t$this->selection = $selection;\n\t}\n\n    /**\n     * @return null|Session\n     */\n    public function getSession(): ?Session\n    {\n        return $this->session;\n    }\n\n    /**\n\t * @return null|Player\n\t */\n\tpublic function getPlayer(): ?Player\n\t{\n\t\tif (($session = $this->getSession()) instanceof UserSession)\n\t\t\t/** @var UserSession $session */\n\t\t\treturn $session->getPlayer();\n\t\treturn null;\n\t}\n\n\t/**\n\t * @return int\n\t */\n\tpublic function getType(): int\n\t{\n\t\treturn $this->type;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/event/MWESessionLoadEvent.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\event;\n\nuse pocketmine\\player\\Player;\nuse pocketmine\\plugin\\Plugin;\nuse xenialdan\\MagicWE2\\session\\Session;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass MWESessionLoadEvent extends MWEEvent\n{\n\t/** @var Session */\n\tprivate $session;\n\n\t/**\n\t * MWESessionLoadEvent constructor.\n\t * @param Plugin $plugin\n\t * @param Session $session\n\t */\n\tpublic function __construct(Plugin $plugin, Session $session)\n\t{\n\t\tparent::__construct($plugin);\n\t\t$this->session = $session;\n\t}\n\n\t/**\n\t * @return null|Session\n\t */\n\tpublic function getSession(): ?Session\n\t{\n\t\treturn $this->session;\n\t}\n\n\t/**\n\t * @return null|Player\n\t */\n\tpublic function getPlayer(): ?Player\n\t{\n\t\treturn $this->session instanceof UserSession ? $this->session->getPlayer() : null;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/event/MWESessionSettingChangeEvent.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\event;\n\nuse pocketmine\\player\\Player;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\session\\Session;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass MWESessionSettingChangeEvent extends MWEEvent\n{\n\tpublic const TYPE_PLUGIN = 0;\n\n\tprivate ?Session $session;\n\tprivate int $type;\n\n\tpublic function __construct(?Session $session, int $type = self::TYPE_PLUGIN)\n\t{\n\t\tparent::__construct(Loader::getInstance());\n\t\t$this->session = $session;\n\t\t$this->type = $type;//TODO use\n\t}\n\n\t/**\n\t * @return null|Session\n\t */\n\tpublic function getSession(): ?Session\n\t{\n\t\treturn $this->session;\n\t}\n\n\t/**\n\t * @return null|Player\n\t */\n\tpublic function getPlayer(): ?Player\n\t{\n\t\tif (($session = $this->getSession()) instanceof UserSession)\n\t\t\t/** @var UserSession $session */\n\t\t\treturn $session->getPlayer();\n\t\treturn null;\n\t}\n\n\t/**\n\t * @return int\n\t */\n\tpublic function getType(): int\n\t{\n\t\treturn $this->type;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/exception/ActionNotFoundException.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\exception;\n\nuse pocketmine\\plugin\\PluginException;\n\nclass ActionNotFoundException extends PluginException\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/exception/ActionRegistryException.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\exception;\n\nuse pocketmine\\plugin\\PluginException;\n\nclass ActionRegistryException extends PluginException\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/exception/BrushException.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\exception;\n\nuse pocketmine\\plugin\\PluginException;\n\nclass BrushException extends PluginException\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/exception/CalculationException.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\exception;\n\nuse pocketmine\\plugin\\PluginException;\n\nclass CalculationException extends PluginException\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/exception/InvalidBlockStateException.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\exception;\n\nuse InvalidArgumentException;\n\nclass InvalidBlockStateException extends InvalidArgumentException\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/exception/LimitExceededException.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\exception;\n\nuse pocketmine\\plugin\\PluginException;\n\nclass LimitExceededException extends PluginException\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/exception/SelectionException.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\exception;\n\nuse pocketmine\\plugin\\PluginException;\n\nclass SelectionException extends PluginException\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/exception/SessionException.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\exception;\n\nuse pocketmine\\plugin\\PluginException;\n\nclass SessionException extends PluginException\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/exception/ShapeNotFoundException.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\exception;\n\nuse pocketmine\\plugin\\PluginException;\n\nclass ShapeNotFoundException extends PluginException\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/exception/ShapeRegistryException.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\exception;\n\nuse pocketmine\\plugin\\PluginException;\n\nclass ShapeRegistryException extends PluginException\n{\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/helper/AsyncChunkManager.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\helper;\n\nuse pocketmine\\world\\format\\Chunk;\nuse pocketmine\\world\\SimpleChunkManager;\n\nclass AsyncChunkManager extends SimpleChunkManager\n{\n\n    public function getBlockArrayAt(int $x, int $y, int $z): array//TODO replace with getFullBlock\n\t{\n\t\treturn [$this->getBlockAt($x, $y, $z)->getId(), $this->getBlockAt($x, $y, $z)->getMeta()];\n\t}\n\n    /**\n     * @return Chunk[]\n     */\n    public function getChunks(): array\n    {\n        return $this->chunks;\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/helper/BlockEntry.php",
    "content": "<?php /** @noinspection PhpInternalEntityUsedInspection */\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\helper;\n\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockFactory;\nuse pocketmine\\block\\BlockLegacyIds;\nuse pocketmine\\nbt\\tag\\CompoundTag;\n\nclass BlockEntry\n{\n\t/** @var int BlockFullId */\n\tpublic $fullId;\n\t/** @var CompoundTag|null */\n\tpublic $nbt;\n\n\t/**\n\t * BlockEntry constructor.\n\t * @param int $fullId\n\t * @param CompoundTag|null $nbt\n\t */\n\tpublic function __construct(int $fullId, ?CompoundTag $nbt = null)\n\t{\n\t\t$this->fullId = $fullId;\n\t\t$this->nbt = $nbt;\n\t}\n\n\tpublic function validate(): bool\n\t{\n\t\t/** @var BlockFactory $instance */\n\t\t$instance = BlockFactory::getInstance();\n\t\t$block = $instance->fromFullBlock($this->fullId);\n\t\t[$id, $meta] = [$block->getId(), $block->getMeta()];\n\t\tif ($id === BlockLegacyIds::INFO_UPDATE) {\n\t\t\treturn false;\n\t\t}\n\t\tif ($this->nbt instanceof CompoundTag && !$this->nbt->valid()) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic function __toString()\n\t{\n\t\t/** @var BlockFactory $instance */\n\t\t$instance = BlockFactory::getInstance();\n\t\t$block = $instance->fromFullBlock($this->fullId);\n\t\t$str = __CLASS__ . \" \" . $this->fullId . \" [{$block->getId()}:{$block->getMeta()}]\";\n\t\tif ($this->nbt instanceof CompoundTag) {\n\t\t\t$str .= \" \" . str_replace(\"\\n\", \"\", $this->nbt->toString());\n\t\t}\n\t\treturn $str;\n\t}\n\n\tpublic function toBlock(): Block\n\t{\n\t\t/** @var BlockFactory $instance */\n\t\t$instance = BlockFactory::getInstance();\n\t\treturn $instance->fromFullBlock($this->fullId);\n\t}\n\n\tpublic static function fromBlock(Block $block): self\n\t{\n\t\tBlockFactory::getInstance();\n\t\treturn new BlockEntry($block->getFullId());\n\t}\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/helper/BlockPalette.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\helper;\n\nuse JsonException;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockFactory;\n\nabstract class BlockPalette\n{\n\t/**\n\t * @param Block[] $blocks\n\t * @return string\n\t * @throws JsonException\n\t */\n\tpublic static function encode(array $blocks): string\n\t{\n\t\t$e = [];\n\t\tforeach ($blocks as $block)\n\t\t\t/** @noinspection PhpInternalEntityUsedInspection */ $e[] = $block->getFullId();\n\t\treturn json_encode($e, JSON_THROW_ON_ERROR);\n\t}\n\n\t/**\n\t * @param string $blocks\n\t * @return array\n\t * @throws JsonException\n\t */\n\tpublic static function decode(string $blocks): array\n\t{\n\t\t$e = [];\n\t\tforeach (json_decode($blocks, true, 512, JSON_THROW_ON_ERROR) as $block)\n\t\t\t$e[] = BlockFactory::getInstance()->fromFullBlock($block);\n\t\treturn $e;\n\t}\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/helper/BlockStatesEntry.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\helper;\n\nuse GlobalLogger;\nuse InvalidArgumentException;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockFactory;\nuse pocketmine\\nbt\\tag\\ByteTag;\nuse pocketmine\\nbt\\tag\\CompoundTag;\nuse pocketmine\\nbt\\tag\\IntTag;\nuse pocketmine\\nbt\\tag\\StringTag;\nuse pocketmine\\utils\\TextFormat;\nuse RuntimeException;\nuse Throwable;\nuse xenialdan\\MagicWE2\\exception\\InvalidBlockStateException;\nuse xenialdan\\MagicWE2\\task\\action\\FlipAction;\n\nclass BlockStatesEntry\n{\n\t/** @var string */\n\tpublic $blockIdentifier;\n\t/** @var CompoundTag */\n\tpublic $blockStates;\n\t/** @var string */\n\tpublic $blockFull;\n\t/** @var Block|null */\n\tpublic $block;\n\n\t/**\n\t * BlockStatesEntry constructor.\n\t * @param string $blockIdentifier\n\t * @param CompoundTag $blockStates\n\t * @param Block|null $block\n\t */\n\tpublic function __construct(string $blockIdentifier, CompoundTag $blockStates, ?Block $block = null)\n\t{\n\t\t$this->blockIdentifier = $blockIdentifier;\n\t\t$this->blockStates = $blockStates;\n\t\t$this->block = $block;\n\t\ttry {\n\t\t\tif ($this->blockStates !== null)\n\t\t\t\t$this->blockFull = TextFormat::clean(BlockStatesParser::printStates($this, false));\n\t\t\telse\n\t\t\t\t$this->blockFull = $this->blockIdentifier;\n\t\t} catch (Throwable $e) {\n\t\t\tGlobalLogger::get()->logException($e);\n\t\t\t$this->blockFull = $this->blockIdentifier;\n\t\t}\n\t}\n\n\t/**\n\t * @return string\n\t */\n\tpublic function __toString()\n\t{\n\t\treturn $this->blockFull;\n\t}\n\n\t/**\n\t * TODO hacky AF. clean up\n\t * @return Block\n\t * @throws InvalidArgumentException\n\t * @throws RuntimeException\n\t * @throws InvalidBlockStateException\n\t */\n\tpublic function toBlock(): Block\n\t{\n\t\tif ($this->block instanceof Block) return $this->block;\n\t\tBlockFactory::getInstance();\n\t\t$blocks = BlockStatesParser::getInstance()::fromString($this->blockFull, false);\n\t\t$block = reset($blocks);\n\t\tif($block instanceof Block) $this->block = $block;\n\t\treturn $this->block;\n\t}\n\n\t/**\n\t * TODO Optimize (reduce getStateByBlock/fromString calls)\n\t * @param int $amount any of [90,180,270]\n\t * @return BlockStatesEntry\n\t * @throws InvalidArgumentException\n\t * @throws InvalidBlockStateException\n\t * @throws RuntimeException\n\t */\n\tpublic function rotate(int $amount): BlockStatesEntry\n\t{\n\t\t//TODO validate $amount\n\t\t$clone = clone $this;\n\t\t$block = $clone->toBlock();\n\t\t$idMapName = str_replace(\"minecraft:\", \"\", BlockStatesParser::getBlockIdMapName($block));\n\t\t$key = $idMapName . \":\" . $block->getMeta();\n\t\tif (strpos($idMapName, \"_door\") !== false) {\n\t\t\t$fromMap = BlockStatesParser::getDoorRotationFlipMap()[$block->getMeta()] ?? null;\n\t\t} else {\n\t\t\t$fromMap = BlockStatesParser::getRotationFlipMap()[$key] ?? null;\n\t\t}\n\t\tif ($fromMap === null) return $clone;\n\t\t$rotatedStates = $fromMap[$amount] ?? null;\n\t\tif ($rotatedStates === null) return $clone;\n\t\t//ugly hack to keep current ones\n\t\t//TODO use the states compound tag\n\t\t$bsCompound = $clone->blockStates;\n\t\t#$bsCompound->setName(\"minecraft:$key\");//TODO this might cause issues with the parser since it stays same //seems to work ¯\\_(ツ)_/¯\n\t\tforeach ($rotatedStates as $tagName => $v) {\n\t\t\t//TODO clean up.. new method?\n\t\t\t$tag = $bsCompound->getTag($tagName);\n\t\t\tif ($tag === null) {\n\t\t\t\tthrow new InvalidBlockStateException(\"Invalid state $tagName\");\n\t\t\t}\n\t\t\tif ($tag instanceof StringTag) {\n\t\t\t\t$bsCompound->setString($tagName, $v);\n\t\t\t} else if ($tag instanceof IntTag) {\n\t\t\t\t$bsCompound->setInt($tagName, (int)$v);\n\t\t\t} else if ($tag instanceof ByteTag) {\n\t\t\t\tif ($v === 1) $v = \"true\";\n\t\t\t\tif ($v === 0) $v = \"false\";\n\t\t\t\tif ($v !== \"true\" && $v !== \"false\") {\n\t\t\t\t\tthrow new InvalidBlockStateException(\"Invalid value $v for blockstate $tagName, must be \\\"true\\\" or \\\"false\\\"\");\n\t\t\t\t}\n\t\t\t\t$bsCompound->setByte($tagName, $v === \"true\" ? 1 : 0);\n\t\t\t} else {\n\t\t\t\tthrow new InvalidBlockStateException(\"Unknown tag of type \" . get_class($tag) . \" detected\");\n\t\t\t}\n\t\t}\n\t\t$clone->blockStates = $bsCompound;\n\t\t$clone->blockFull = TextFormat::clean(BlockStatesParser::printStates($clone, false));\n\t\tif (strpos($idMapName, \"_door\") !== false) {\n\t\t\t$clone->block = BlockStatesParser::fromString($clone->blockFull, false)[0];\n\t\t} else\n\t\t\t$clone->block = null;\n\t\treturn $clone;\n\t\t//TODO reduce useless calls. BSP::fromStates?\n\t\t#$blockFull = TextFormat::clean(BlockStatesParser::printStates($clone, false));\n\t\t#return BlockStatesParser::getStateByBlock(BlockStatesParser::fromString($blockFull)[0]);\n\t}\n\n\t/**\n\t * TODO Optimize (reduce getStateByBlock/fromString calls)\n\t * @param string $axis any of [\"x\",\"y\",\"z\",\"xz\"]\n\t * @return BlockStatesEntry\n\t * @throws InvalidArgumentException\n\t * @throws InvalidBlockStateException\n\t * @throws RuntimeException\n\t */\n\tpublic function mirror(string $axis): BlockStatesEntry\n\t{\n\t\t//TODO validate $axis\n\t\t$clone = clone $this;\n\t\t$block = $clone->toBlock();\n\t\t$idMapName = str_replace(\"minecraft:\", \"\", BlockStatesParser::getBlockIdMapName($block));\n\t\t$key = $idMapName . \":\" . $block->getMeta();\n\t\tif ($axis !== FlipAction::AXIS_Y) {//ugly hack for y flip\n\t\t\t$fromMap = BlockStatesParser::getRotationFlipMap()[$key] ?? null;\n\t\t\tif ($fromMap === null) {\n\t\t\t\t#var_dump(\"block not in mirror map\");\n\t\t\t\treturn $clone;\n\t\t\t}\n\t\t\t$flippedStates = $fromMap[$axis] ?? null;\n\t\t\tif ($flippedStates === null /*&& $axis !== FlipAction::AXIS_Y*/) {//ugly hack for y flip\n\t\t\t\t#var_dump(\"axis not in mirror map\");\n\t\t\t\treturn $clone;\n\t\t\t}\n\t\t}\n\t\t//ugly hack to keep current ones\n\t\t//TODO use the states compound tag\n\t\t$bsCompound = clone $clone->blockStates;//TODO check if clone is necessary\n\t\t#$bsCompound->setName(\"minecraft:$key\");//TODO this might cause issues with the parser since it stays same //seems to work ¯\\_(ツ)_/¯\n\t\tif ($axis === FlipAction::AXIS_Y && !(//TODO maybe add vine + mushroom block directions\n\t\t\t\t$bsCompound->hasTag(\"attachment\") ||\n\t\t\t\t$bsCompound->hasTag(\"facing_direction\") ||\n\t\t\t\t$bsCompound->hasTag(\"hanging\") ||\n\t\t\t\t$bsCompound->hasTag(\"lever_direction\") ||\n\t\t\t\t$bsCompound->hasTag(\"rail_direction\") ||\n\t\t\t\t$bsCompound->hasTag(\"top_slot_bit\") ||\n\t\t\t\t$bsCompound->hasTag(\"torch_facing_direction\") ||\n\t\t\t\t$bsCompound->hasTag(\"upper_block_bit\") ||\n\t\t\t\t$bsCompound->hasTag(\"upside_down_bit\")\n\t\t\t)) {//ugly hack for y flip\n\t\t\t#var_dump(\"nothing can be flipped around y axis\");\n\t\t\treturn $clone;\n\t\t}\n\t\tforeach ($bsCompound as $tagName => $tag) {\n\t\t\t//TODO clean up.. new method?\n\t\t\tif ($axis === FlipAction::AXIS_Y) {\n\t\t\t\t$value = $tag->getValue();\n\t\t\t\tswitch ($tagName) {//TODO clean up oh my god\n\t\t\t\t\tcase \"attachment\":\n\t\t\t\t\t{\n\t\t\t\t\t\tif ($value === \"standing\") $value = \"hanging\";\n\t\t\t\t\t\telse if ($value === \"hanging\") $value = \"standing\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"hanging\":\n\t\t\t\t\tcase \"upside_down_bit\":\n\t\t\t\t\tcase \"upper_block_bit\":\n\t\t\t\t\tcase \"top_slot_bit\":\n\t\t\t\t\tcase \"facing_direction\":\n\t\t\t\t\t{\n\t\t\t\t\t\tif ($value === 0) $value = 1;\n\t\t\t\t\t\telse if ($value === 1) $value = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"lever_direction\":\n\t\t\t\t\t{\n\t\t\t\t\t\tif ($value === \"down_east_west\") $value = \"up_east_west\";\n\t\t\t\t\t\telse if ($value === \"up_east_west\") $value = \"down_east_west\";\n\t\t\t\t\t\telse if ($value === \"down_north_south\") $value = \"up_north_south\";\n\t\t\t\t\t\telse if ($value === \"up_north_south\") $value = \"down_north_south\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"rail_direction\":\n\t\t\t\t\t{\n\t\t\t\t\t\t//TODO\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"torch_facing_direction\":\n\t\t\t\t\t{\n\t\t\t\t\t\tif ($value === \"unknown\") $value = \"top\";\n\t\t\t\t\t\telse if ($value === \"top\") $value = \"unknown\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}/*\n                    default:\n                    {\n                        $value = $flippedStates[$stateName];\n                    }*/\n\t\t\t\t}\n\t\t\t} else if (isset($flippedStates)) $value = $flippedStates[$tagName] ?? $tag->getValue(); else throw new InvalidArgumentException(\"flippedStates is not set. Error should never occur, please use //report and send a stack trace\");\n\t\t\tif ($tag instanceof StringTag) {\n\t\t\t\t$bsCompound->setString($tagName, $value);\n\t\t\t} else if ($tag instanceof IntTag) {\n\t\t\t\t$bsCompound->setInt($tagName, (int)$value);\n\t\t\t} else if ($tag instanceof ByteTag) {\n\t\t\t\tif ($value === 1) $value = \"true\";\n\t\t\t\tif ($value === 0) $value = \"false\";\n\t\t\t\tif ($value !== \"true\" && $value !== \"false\") {\n\t\t\t\t\tthrow new InvalidBlockStateException(\"Invalid value $value for blockstate $tagName, must be \\\"true\\\" or \\\"false\\\"\");\n\t\t\t\t}\n\t\t\t\t$bsCompound->setByte($tagName, $value === \"true\" ? 1 : 0);\n\t\t\t} else {\n\t\t\t\tthrow new InvalidBlockStateException(\"Unknown tag of type \" . get_class($tag) . \" detected\");\n\t\t\t}\n\t\t}\n\t\t$clone->blockStates = $bsCompound;\n\t\t$clone->block = null;\n\t\t$clone->blockFull = TextFormat::clean(BlockStatesParser::printStates($clone, false));\n\t\t#var_dump($clone->blockFull);\n\t\treturn $clone;\n\t\t//TODO reduce useless calls. BSP::fromStates?\n\t\t#$blockFull = TextFormat::clean(BlockStatesParser::printStates($clone, false));\n\t\t#return BlockStatesParser::getStateByBlock(BlockStatesParser::fromString($blockFull)[0]);\n\t}\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/helper/BlockStatesParser.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\helper;\n\nuse Closure;\nuse Exception;\nuse GlobalLogger;\nuse InvalidArgumentException;\nuse InvalidStateException;\nuse JsonException;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockFactory;\nuse pocketmine\\block\\BlockLegacyIds;\nuse pocketmine\\block\\Door;\nuse pocketmine\\block\\utils\\BlockDataSerializer;\nuse pocketmine\\data\\bedrock\\LegacyBlockIdToStringIdMap;\nuse pocketmine\\item\\LegacyStringToItemParser;\nuse pocketmine\\math\\Facing;\nuse pocketmine\\nbt\\tag\\ByteTag;\nuse pocketmine\\nbt\\tag\\CompoundTag;\nuse pocketmine\\nbt\\tag\\IntTag;\nuse pocketmine\\nbt\\tag\\StringTag;\nuse pocketmine\\network\\mcpe\\convert\\R12ToCurrentBlockMapEntry;\nuse pocketmine\\network\\mcpe\\protocol\\serializer\\NetworkNbtSerializer;\nuse pocketmine\\network\\mcpe\\protocol\\serializer\\PacketSerializer;\nuse pocketmine\\plugin\\PluginException;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\Config;\nuse pocketmine\\utils\\SingletonTrait;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\world\\Position;\nuse RuntimeException;\nuse xenialdan\\MagicWE2\\exception\\InvalidBlockStateException;\nuse xenialdan\\MagicWE2\\Loader;\nuse const pocketmine\\RESOURCE_PATH;\n\nfinal class BlockStatesParser\n{\n\tuse SingletonTrait;\n\n\t/** @var string */\n\tpublic static $rotPath;\n\t/** @var string */\n\tpublic static $doorRotPath;\n\n\t/** @var R12ToCurrentBlockMapEntry[][] *///TODO check type correct? phpstan!\n\tprivate static $legacyStateMap;\n\n\t/** @var array */\n\tprivate static $aliasMap = [];\n\t/** @var array */\n\tprivate static $rotationFlipMap = [];\n\t/** @var array */\n\tprivate static $doorRotationFlipMap = [];\n\n\tprivate function __construct()\n\t{\n//\t\t$this->loadRotationAndFlipData(Loader::getRotFlipPath());\n//\t\t$this->loadDoorRotationAndFlipData(Loader::getDoorRotFlipPath());\n\t\t$this->loadRotationAndFlipData(self::$rotPath);\n\t\t$this->loadDoorRotationAndFlipData(self::$doorRotPath);\n\t\t$this->loadLegacyMappings();\n\t}\n\n\tprivate function loadLegacyMappings(): void\n\t{\n\t\t/** @var R12ToCurrentBlockMapEntry[][] $legacyStateMap */\n\t\tself::$legacyStateMap = [];\n\t\t$contents = file_get_contents(RESOURCE_PATH . \"vanilla/r12_to_current_block_map.bin\");\n\t\tif ($contents === false) throw new PluginException(\"Can not get contents of r12_to_current_block_map\");\n\t\t$legacyStateMapReader = new PacketSerializer($contents);\n\t\t$nbtReader = new NetworkNbtSerializer();\n\t\twhile (!$legacyStateMapReader->feof()) {\n\t\t\t$id = $legacyStateMapReader->getString();\n\t\t\t$meta = $legacyStateMapReader->getLShort();\n\n\t\t\t$offset = $legacyStateMapReader->getOffset();\n\t\t\t$state = $nbtReader->read($legacyStateMapReader->getBuffer(), $offset)->mustGetCompoundTag();\n\t\t\t$legacyStateMapReader->setOffset($offset);\n\t\t\t$r12ToCurrentBlockMapEntry = new R12ToCurrentBlockMapEntry($id, $meta, $state);\n\t\t\tself::$legacyStateMap[$id][$meta] = $r12ToCurrentBlockMapEntry;\n\t\t}\n\t\tksort(self::$legacyStateMap, SORT_NUMERIC);\n\t}\n\n\t/**\n\t * @param string|null $path\n\t * @throws JsonException\n\t * @throws PluginException\n\t */\n\tprotected function loadRotationAndFlipData(?string $path = null): void\n\t{\n\t\tif ($path !== null) {\n\t\t\t$fileGetContents = file_get_contents($path);\n\t\t\tif ($fileGetContents === false) {\n\t\t\t\tthrow new PluginException(\"rotation_flip_data.json could not be loaded! Rotation and flip support has been disabled!\");\n\t\t\t}\n\n\t\t\tself::$rotationFlipMap = json_decode($fileGetContents, true, 512, JSON_THROW_ON_ERROR);\n\t\t\tGlobalLogger::get()->debug(\"Successfully loaded rotation_flip_data.json\");\n\t\t}\n\t}\n\n\t/**\n\t * @param string|null $path\n\t * @throws JsonException\n\t * @throws PluginException\n\t */\n\tprotected function loadDoorRotationAndFlipData(?string $path = null): void\n\t{\n\t\tif ($path !== null) {\n\t\t\t$fileGetContents = file_get_contents($path);\n\t\t\tif ($fileGetContents === false) {\n\t\t\t\tthrow new PluginException(\"door_data.json could not be loaded! Door rotation and flip support has been disabled!\");\n\t\t\t}\n\n\t\t\tself::$doorRotationFlipMap = json_decode($fileGetContents, true, 512, JSON_THROW_ON_ERROR);\n\t\t\tGlobalLogger::get()->debug(\"Successfully loaded door_data.json\");\n\t\t}\n\t}\n\n\t/**\n\t * @return array\n\t */\n\tpublic static function getRotationFlipMap(): array\n\t{\n\t\treturn self::$rotationFlipMap;\n\t}\n\n\t/**\n\t * @return array\n\t */\n\tpublic static function getDoorRotationFlipMap(): array\n\t{\n\t\treturn self::$doorRotationFlipMap;\n\t}\n\n\t/**\n\t * @param string $namespacedSelectedBlockName\n\t * @param CompoundTag $states\n\t * @return Door\n\t * @throws InvalidArgumentException\n\t * @throws InvalidBlockStateException\n\t * @throws RuntimeException\n\t * @throws \\pocketmine\\block\\utils\\InvalidBlockStateException\n\t */\n\tprivate static function buildDoor(string $namespacedSelectedBlockName, CompoundTag $states): Door\n\t{\n\t\t/** @var Door $door */\n\t\t$door = self::fromString($namespacedSelectedBlockName)[0];\n\t\t$door->setOpen($states->getByte(\"open_bit\") === 1);\n\t\t$door->setTop($states->getByte(\"upper_block_bit\") === 1);\n\t\t$door->setHingeRight($states->getByte(\"door_hinge_bit\") === 1);\n\t\t$direction = $states->getInt(\"direction\");\n\t\t$door->setFacing(Facing::rotateY(BlockDataSerializer::readLegacyHorizontalFacing($direction & 0x03), false));\n\t\treturn $door;\n\t}\n\n\t/**\n\t * @param array $aliasMap\n\t */\n\tpublic function setAliasMap(array $aliasMap): void\n\t{\n\t\tself::$aliasMap = $aliasMap;\n\t}\n\n\t/**\n\t * @param Block $block\n\t * @return string|null\n\t */\n\tpublic static function getBlockIdMapName(Block $block): ?string\n\t{\n\t\treturn LegacyBlockIdToStringIdMap::getInstance()->legacyToString($block->getId());\n\t}\n\n\t/**\n\t * @param string $blockIdentifier\n\t * @return CompoundTag\n\t */\n\tprotected static function getDefaultStates(string $blockIdentifier): CompoundTag\n\t{\n\t\treturn self::$legacyStateMap[$blockIdentifier][0]->getBlockState()->getCompoundTag('states') ?? new CompoundTag();\n\t}\n\n\t/**\n\t * @param string $query\n\t * @param bool $multiple\n\t * @return Block[]\n\t * @throws InvalidArgumentException\n\t * @throws InvalidBlockStateException\n\t * @throws RuntimeException\n\t */\n\tpublic static function fromString(string $query, bool $multiple = false): array\n\t{\n\t\t#if (!BlockFactory::isInit()) BlockFactory::init();\n\t\t$blocks = [];\n\t\tif ($multiple) {\n\t\t\t$pregSplit = preg_split('/,(?![^\\[]*])/', trim($query), -1, PREG_SPLIT_NO_EMPTY);\n\t\t\tif (!is_array($pregSplit)) throw new InvalidArgumentException(\"Regex matching failed\");\n\t\t\tforeach ($pregSplit as $b) {\n\t\t\t\t/** @noinspection SlowArrayOperationsInLoopInspection */\n\t\t\t\t$blocks = array_merge($blocks, self::fromString($b, false));\n\t\t\t}\n\t\t\treturn $blocks;\n\t\t}\n\n\t\t$blockData = strtolower(str_replace(\"minecraft:\", \"\", $query));//TODO try to keep namespace \"minecraft:\" to support custom blocks\n\t\t$re = '/([\\w:]+)(?:\\[([\\w=,]*)\\])?/m';\n\t\tpreg_match_all($re, $blockData, $matches, PREG_SET_ORDER, 0);\n\t\tif (!isset($matches[0][1])) {\n\t\t\tthrow new InvalidArgumentException(\"Could not detect block id\");\n\t\t}\n\n\t\t$selectedBlockName = $matches[0][1];\n\t\t$namespacedSelectedBlockName = \"minecraft:\" . $selectedBlockName;//TODO try to keep namespace \"minecraft:\" to support custom blocks\n\t\t/** @var LegacyStringToItemParser $legacyStringToItemParser */\n\t\t$legacyStringToItemParser = LegacyStringToItemParser::getInstance();\n\t\t$block = $legacyStringToItemParser->parse($selectedBlockName)->getBlock();\n\t\tif (count($matches[0]) < 3) {\n\t\t\treturn [$block];\n\t\t}\n\t\t$defaultStatesNamedTag = self::getDefaultStates($namespacedSelectedBlockName);\n\t\tif (!$defaultStatesNamedTag instanceof CompoundTag) {\n\t\t\tthrow new InvalidArgumentException(\"Could not find default block states for $namespacedSelectedBlockName\");\n\t\t}\n\t\t$extraData = $matches[0][2] ?? \"\";\n\t\t$statesExploded = explode(\",\", $extraData);\n\t\t$finalStatesList = clone $defaultStatesNamedTag;\n\t\t#var_dump($statesExploded, $finalStatesList->toString());\n\t\t#$finalStatesList->setName(\"states\");\n\t\t$availableAliases = [];//TODO map in init()! No need to recreate every time! EDIT 2k20: uhm what? @ my past self, why can't you explain properly?!\n\t\tforeach ($finalStatesList as $stateName => $state) {\n\t\t\tif (array_key_exists($stateName, self::$aliasMap)) {\n\t\t\t\tforeach (self::$aliasMap[$stateName][\"alias\"] as $alias) {\n\t\t\t\t\t//todo maybe check for duplicated alias here? \"block state mapping invalid: duplicated alias detected\"\n\t\t\t\t\t$availableAliases[$alias] = $stateName;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tforeach ($statesExploded as $stateKeyValuePair) {\n\t\t\tif (strpos($stateKeyValuePair, \"=\") === false) continue;\n\t\t\t[$stateName, $value] = explode(\"=\", $stateKeyValuePair);\n\t\t\t$value = strtolower(trim((string)$value));\n\t\t\tif ($value === '') {\n\t\t\t\tthrow new InvalidBlockStateException(\"Empty value for state $stateName\");\n\t\t\t}\n\t\t\t//change blockstate alias to blockstate name\n\t\t\t$stateName = $availableAliases[$stateName] ?? $stateName;\n\t\t\t//TODO maybe validate wrong states here? i.e. stone[type=wrongtype] => Exception, \"wrongtype\" is invalid value\n\t\t\t$tag = $finalStatesList->getTag($stateName);\n\t\t\tif ($tag === null) {\n\t\t\t\tthrow new InvalidBlockStateException(\"Invalid state $stateName\");\n\t\t\t}\n\t\t\tif ($tag instanceof StringTag) {\n\t\t\t\t$finalStatesList->setString($stateName, $value);\n\t\t\t} else if ($tag instanceof IntTag) {\n\t\t\t\t$finalStatesList->setInt($stateName, (int)$value);\n\t\t\t} else if ($tag instanceof ByteTag) {\n\t\t\t\tif ($value === '1' || $value === 'true') $value = 'true';\n\t\t\t\tif ($value === '0' || $value === 'false') $value = 'false';\n\t\t\t\tif ($value !== \"true\" && $value !== \"false\") {\n\t\t\t\t\tthrow new InvalidBlockStateException(\"Invalid value $value for blockstate $stateName, must be \\\"true\\\" or \\\"false\\\"\");\n\t\t\t\t}\n\t\t\t\t$finalStatesList->setByte($stateName, $value === \"true\" ? 1 : 0);\n\t\t\t} else {\n\t\t\t\tthrow new InvalidBlockStateException(\"Unknown tag of type \" . get_class($tag) . \" detected\");\n\t\t\t}\n\t\t}\n\t\t#var_dump($finalStatesList->toString());\n\t\t//print final list\n\t\t//TODO remove. This crashes in AsyncTasks and is just for debug\n\t\t#Loader::getInstance()->getLogger()->notice(self::printStates(new BlockStatesEntry($namespacedSelectedBlockName,$finalStatesList), false));\n\t\t//return found block(s)\n\t\t$blocks = [];\n\t\t//doors.. special blocks annoying -.-\n\t\t$isDoor = strpos($namespacedSelectedBlockName, \"_door\") !== false;\n\t\tif ($isDoor) {\n\t\t\treturn [self::buildDoor($namespacedSelectedBlockName, $finalStatesList)];\n\t\t}\n\t\t#var_dump((string)$finalStatesList);\n\t\tforeach (self::$legacyStateMap[$namespacedSelectedBlockName] as $meta => $r12ToCurrentBlockMapEntry) {\n\t\t\t$clonedPrintedCompound = clone $r12ToCurrentBlockMapEntry->getBlockState()->getCompoundTag('states');\n\t\t\tif ($clonedPrintedCompound->equals($finalStatesList)) {\n\t\t\t\t#Server::getInstance()->getLogger()->notice(\"FOUND!\");\n\t\t\t\t/** @var BlockFactory $blockFactory */\n\t\t\t\t$blockFactory = BlockFactory::getInstance();\n\t\t\t\t$block = $blockFactory->get($block->getId(), $meta & 0xf);\n\t\t\t\t#var_dump($oldNameAndMeta,$block);\n\t\t\t\t#var_dump($block, $finalStatesList);\n\t\t\t\t$blocks[] = $block;\n\t\t\t\t#Server::getInstance()->getLogger()->debug(TF::GREEN . \"Found block: \" . TF::GOLD . $block);\n\t\t\t\t#Server::getInstance()->getLogger()->notice(self::printStates(new BlockStatesEntry($namespacedSelectedBlockName, $clonedPrintedCompound), true));//might cause loop lol\n\t\t\t}\n\t\t}\n\t\t#if (empty($blocks)) return [Block::get(0)];//no block found //TODO r12 map only has blocks up to id 255. On 4.0.0, return Item::fromString()?\n\t\tif (empty($blocks)) throw new InvalidArgumentException(\"No block $namespacedSelectedBlockName matching $query could be found\");//no block found //TODO r12 map only has blocks up to id 255. On 4.0.0, return Item::fromString()?\n\t\tif (count($blocks) === 1) return $blocks;\n\t\t//\"Hack\" to get just one block if multiple results have been found. Most times this results in the default one (meta:0)\n\t\t$smallestMeta = PHP_INT_MAX;\n\t\t$result = null;\n\t\tforeach ($blocks as $block) {\n\t\t\tif ($block->getMeta() < $smallestMeta) {\n\t\t\t\t$smallestMeta = $block->getMeta();\n\t\t\t\t$result = $block;\n\t\t\t}\n\t\t}\n\t\t#Loader::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . \"Final block: \" . TF::AQUA . $result);\n\t\t/** @var Block $result */\n\t\treturn [$result];\n\t}\n\n\tpublic static function getStateByBlock(Block $block): ?BlockStatesEntry\n\t{\n\t\t$name = self::getBlockIdMapName($block);\n\t\tif ($name === null) return null;\n\t\t$damage = $block->getMeta();\n\t\t$blockStates = clone self::$legacyStateMap[$name][$damage]->getBlockState()->getCompoundTag('states');\n\t\tif ($blockStates === null) return null;\n\t\treturn new BlockStatesEntry($name, $blockStates, $block);\n\t}\n\n\tpublic static function getStateByCompound(CompoundTag $compoundTag): ?BlockStatesEntry\n\t{\n\t\t$namespacedSelectedBlockName = $compoundTag->getString('name', \"\");\n\t\tif ($namespacedSelectedBlockName === \"\") return null;\n\t\t$states = $compoundTag->getCompoundTag('states') ?? self::getDefaultStates($namespacedSelectedBlockName);\n\t\tif (!$states instanceof CompoundTag) {\n\t\t\tthrow new InvalidArgumentException(\"Could not find default block states for $namespacedSelectedBlockName\");\n\t\t}\n\n\t\tif (strpos($namespacedSelectedBlockName, \"_door\") !== false) {\n\t\t\t$door = self::buildDoor($namespacedSelectedBlockName, $states);\n\t\t\t//return self::getStateByBlock($door);\n\t\t\treturn new BlockStatesEntry($namespacedSelectedBlockName, $states, $door);\n\t\t}\n\n\t\tforeach (self::$legacyStateMap[$namespacedSelectedBlockName] ?? [] as $meta => $r12ToCurrentBlockMapEntry) {//??[] is to avoid crashes on newer blocks like light block\n\t\t\t$clonedPrintedCompound = $r12ToCurrentBlockMapEntry->getBlockState()->getCompoundTag('states');\n\t\t\tif ($clonedPrintedCompound->equals($states)) {\n\t\t\t\t#Server::getInstance()->getLogger()->notice(self::printStates(new BlockStatesEntry($namespacedSelectedBlockName, $clonedPrintedCompound), true));//might cause loop lol//todo rem\n\t\t\t\treturn new BlockStatesEntry($namespacedSelectedBlockName, $clonedPrintedCompound);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * @param BlockStatesEntry $entry\n\t * @param bool $skipDefaults\n\t * @return string\n\t * @throws RuntimeException\n\t */\n\tpublic static function printStates(BlockStatesEntry $entry, bool $skipDefaults): string\n\t{\n\t\t$printedCompound = $entry->blockStates;\n\t\t$blockIdentifier = $entry->blockIdentifier;\n\t\t$s = [];\n\t\tforeach ($printedCompound as $statesTagEntryName => $statesTagEntry) {\n\t\t\t/** @var CompoundTag $defaultStatesNamedTag */\n\t\t\t$defaultStatesNamedTag = self::getDefaultStates($blockIdentifier);\n\t\t\t$namedTag = $defaultStatesNamedTag->getTag($statesTagEntryName);\n\t\t\tif (!$namedTag instanceof ByteTag && !$namedTag instanceof StringTag && !$namedTag instanceof IntTag) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t//skip defaults\n\t\t\t/** @var ByteTag|IntTag|StringTag $namedTag */\n\t\t\tif ($skipDefaults && $namedTag->equals($statesTagEntry)) continue;\n\t\t\t//prepare string\n\t\t\tif ($statesTagEntry instanceof ByteTag) {\n\t\t\t\t$s[] = TF::RED . $statesTagEntryName . \"=\" . ($statesTagEntry->getValue() ? TF::GREEN . \"true\" : TF::RED . \"false\") . TF::RESET;\n\t\t\t} else if ($statesTagEntry instanceof IntTag) {\n\t\t\t\t$s[] = TF::BLUE . $statesTagEntryName . \"=\" . TF::BLUE . $statesTagEntry->getValue() . TF::RESET;\n\t\t\t} else if ($statesTagEntry instanceof StringTag) {\n\t\t\t\t$s[] = TF::LIGHT_PURPLE . $statesTagEntryName . \"=\" . TF::LIGHT_PURPLE . $statesTagEntry->getValue() . TF::RESET;\n\t\t\t}\n\t\t}\n\t\tif (count($s) === 0) {\n\t\t\t#Server::getInstance()->getLogger()->debug($blockIdentifier);\n\t\t\treturn $blockIdentifier;\n\t\t}\n\n\t\t#Server::getInstance()->getLogger()->debug($blockIdentifier . \"[\" . implode(\",\", $s) . \"]\");\n\t\treturn $blockIdentifier . \"[\" . implode(\",\", $s) . \"]\";\n\t}\n\n\t/**\n\t * Prints all blocknames with states (without default states)\n\t * @throws RuntimeException\n\t */\n\tpublic static function printAllStates(): void\n\t{\n\t\tforeach (self::$legacyStateMap as $name => $v) {\n\t\t\tforeach ($v as $meta => $legacyMapEntry) {\n\t\t\t\t$currentoldName = $legacyMapEntry->getId();\n\t\t\t\t$printedCompound = $legacyMapEntry->getBlockState()->getCompoundTag('states');\n\t\t\t\t$bs = new BlockStatesEntry($currentoldName, $printedCompound);\n\t\t\t\ttry {\n\t\t\t\t\tServer::getInstance()->getLogger()->debug(self::printStates($bs, true));\n\t\t\t\t\tServer::getInstance()->getLogger()->debug((string)$bs);\n\t\t\t\t} catch (RuntimeException $e) {\n\t\t\t\t\tServer::getInstance()->getLogger()->logException($e);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic static function runTests(): void\n\t{\n\t\tvar_dump(\"Running tests\");\n\t\t//testing blockstate parser\n\t\t$tests = [\n\t\t\t\"minecraft:tnt\",\n\t\t\t#\"minecraft:wood\",\n\t\t\t#\"minecraft:log\",\n\t\t\t\"minecraft:wooden_slab\",\n\t\t\t\"minecraft:wooden_slab_wrongname\",\n\t\t\t\"minecraft:wooden_slab[foo=bar]\",\n\t\t\t\"minecraft:wooden_slab[top_slot_bit=]\",\n\t\t\t\"minecraft:wooden_slab[top_slot_bit=true]\",\n\t\t\t\"minecraft:wooden_slab[top_slot_bit=false]\",\n\t\t\t\"minecraft:wooden_slab[wood_type=oak]\",\n\t\t\t#\"minecraft:wooden_slab[wood_type=spruce]\",\n\t\t\t\"minecraft:wooden_slab[wood_type=spruce,top_slot_bit=false]\",\n\t\t\t\"minecraft:wooden_slab[wood_type=spruce,top_slot_bit=true]\",\n\t\t\t\"minecraft:end_rod[]\",\n\t\t\t\"minecraft:end_rod[facing_direction=1]\",\n\t\t\t\"minecraft:end_rod[block_light_level=14]\",\n\t\t\t\"minecraft:end_rod[block_light_level=13]\",\n\t\t\t\"minecraft:light_block[block_light_level=14]\",\n\t\t\t\"minecraft:stone[]\",\n\t\t\t\"minecraft:stone[stone_type=granite]\",\n\t\t\t\"minecraft:stone[stone_type=andesite]\",\n\t\t\t\"minecraft:stone[stone_type=wrongtag]\",//seems to just not find a block at all. neat!\n\t\t\t#//alias testing\n\t\t\t\"minecraft:wooden_slab[top=true]\",\n\t\t\t\"minecraft:wooden_slab[top=true,type=spruce]\",\n\t\t\t\"minecraft:stone[type=granite]\",\n\t\t\t\"minecraft:bedrock[burn=true]\",\n\t\t\t\"minecraft:lever[direction=1]\",\n\t\t\t\"minecraft:wheat[growth=3]\",\n\t\t\t\"minecraft:stone_button[direction=1,pressed=true]\",\n\t\t\t\"minecraft:stone_button[direction=0]\",\n\t\t\t\"minecraft:stone_brick_stairs[direction=0]\",\n\t\t\t\"minecraft:trapdoor[direction=0,open_bit=true,upside_down_bit=false]\",\n\t\t\t\"minecraft:birch_door\",\n\t\t\t\"minecraft:iron_door[direction=1]\",\n\t\t\t\"minecraft:birch_door[upper_block_bit=true]\",\n\t\t\t\"minecraft:birch_door[direction=1,door_hinge_bit=false,open_bit=false,upper_block_bit=true]\",\n\t\t\t\"minecraft:birch_door[door_hinge_bit=false,open_bit=true,upper_block_bit=true]\",\n\t\t\t\"minecraft:birch_door[direction=3,door_hinge_bit=false,open_bit=true,upper_block_bit=true]\",\n\t\t\t\"minecraft:campfire\",\n\t\t];\n\t\tforeach ($tests as $test) {\n\t\t\ttry {\n\t\t\t\tLoader::getInstance()->getLogger()->debug(TF::GOLD . \"Search query: \" . TF::LIGHT_PURPLE . $test);\n\t\t\t\tforeach (self::fromString($test) as $block) {\n\t\t\t\t\tassert($block instanceof Block);\n\t\t\t\t\t$blockStatesEntry = self::getStateByBlock($block);\n\t\t\t\t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . self::printStates($blockStatesEntry, true));\n\t\t\t\t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . self::printStates($blockStatesEntry, false));\n\t\t\t\t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . \"Final block: \" . TF::AQUA . $block);\n\t\t\t\t}\n\t\t\t} catch (Exception $e) {\n\t\t\t\tServer::getInstance()->getLogger()->debug($e->getMessage());\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\treturn;//TODO\n\t\t//test flip+rotation\n\t\t/** @noinspection PhpUnreachableStatementInspection */\n\t\t// $tests2 = [\n\t\t// \t#\"minecraft:wooden_slab[wood_type=oak]\",\n\t\t// \t#\"minecraft:wooden_slab[wood_type=spruce,top_slot_bit=true]\",\n\t\t// \t#\"minecraft:end_rod[]\",\n\t\t// \t#\"minecraft:end_rod[facing_direction=1]\",\n\t\t// \t#\"minecraft:end_rod[facing_direction=2]\",\n\t\t// \t#\"minecraft:stone_brick_stairs[direction=0]\",\n\t\t// \t#\"minecraft:stone_brick_stairs[direction=1]\",\n\t\t// \t#\"minecraft:stone_brick_stairs[direction=1,upside_down_bit=true]\",\n\t\t// \t#\"stone_brick_stairs[direction=1,upside_down_bit=true]\",\n\t\t// \t#\"minecraft:ladder[facing_direction=3]\",\n\t\t// \t#\"minecraft:magenta_glazed_terracotta[facing_direction=2]\",\n\t\t// \t#\"minecraft:trapdoor[direction=3,open_bit=true,upside_down_bit=false]\",\n\t\t// \t#\"minecraft:birch_door\",\n\t\t// \t#\"minecraft:birch_door[direction=1]\",\n\t\t// \t#\"minecraft:birch_door[direction=1,door_hinge_bit=false,open_bit=false,upper_block_bit=true]\",\n\t\t// \t#\"minecraft:birch_door[door_hinge_bit=false,open_bit=true,upper_block_bit=true]\",\n\t\t// \t\"minecraft:birch_door[direction=3,door_hinge_bit=false,open_bit=true,upper_block_bit=true]\",\n\t\t// ];\n\t\t// foreach ($tests2 as $test) {\n\t\t// \ttry {\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::GOLD . \"Rotation query: \" . TF::LIGHT_PURPLE . $test);\n\t\t// \t\t$block = self::fromString($test)[0];\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . \"From block: \" . TF::AQUA . $block);\n\t\t// \t\t$state = self::getStateByBlock($block)->rotate(90);\n\t\t// \t\tassert($state->toBlock() instanceof Block);\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . \"Rotated block: \" . TF::AQUA . $state->toBlock());\n\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::GOLD . \"Mirror query x: \" . TF::LIGHT_PURPLE . $test);\n\t\t// \t\t$state = self::getStateByBlock($block)->mirror(\"x\");\n\t\t// \t\tassert($state->toBlock() instanceof Block);\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . \"Flipped block x: \" . TF::AQUA . $state->toBlock());\n\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::GOLD . \"Mirror query y: \" . TF::LIGHT_PURPLE . $test);\n\t\t// \t\t$state = self::getStateByBlock($block)->mirror(\"y\");\n\t\t// \t\tassert($state->toBlock() instanceof Block);\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . \"Flipped block y: \" . TF::AQUA . $state->toBlock());\n\t\t// \t} catch (Exception $e) {\n\t\t// \t\tServer::getInstance()->getLogger()->debug($e->getMessage());\n\t\t// \t\tcontinue;\n\t\t// \t}\n\t\t// }\n\t\t// //test doors because WTF they are weird\n\t\t// try {\n\t\t// \tfor ($i = 0; $i < 15; $i++) {\n\t\t// \t\t$block = BlockFactory::getInstance()->get(BlockLegacyIds::IRON_DOOR_BLOCK, $i);\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . $block);\n\t\t// \t\t$entry = self::getStateByBlock($block);\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . $entry);\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . $entry->blockStates);\n\t\t// \t\tServer::getInstance()->getLogger()->debug(TF::LIGHT_PURPLE . self::printStates($entry, false));\n\t\t// \t}\n\t\t// } catch (Exception $e) {\n\t\t// \tServer::getInstance()->getLogger()->debug($e->getMessage());\n\t\t// }\n\t}\n\n\tpublic static function placeAllBlockstates(Position $position): void\n\t{\n\t\t$pasteY = $position->getFloorY();\n\t\t$pasteX = $position->getFloorX();\n\t\t$pasteZ = $position->getFloorZ();\n\t\t$world = $position->getWorld();\n\t\t$sorted = [];\n\t\tforeach (self::$legacyStateMap as $name => $v) {\n\t\t\tforeach ($v as $meta => $r12ToCurrentBlockMapEntry) {\n\t\t\t\ttry {\n\t\t\t\t\t$sorted[] = (new BlockStatesEntry($name, $r12ToCurrentBlockMapEntry->getBlockState()->getCompoundTag('states')))->toBlock();\n\t\t\t\t} catch (Exception $e) {\n\t\t\t\t\t//skip blocks that pm does not know about\n\t\t\t\t\t#$world->getServer()->broadcastMessage($e->getMessage());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t$i = 0;\n\t\t$limit = 50;\n\t\tforeach ($sorted as $blockStatesEntry) {\n\t\t\t/** @var BlockStatesEntry $blockStatesEntry */\n\t\t\t$x = ($i % $limit) * 2;\n\t\t\t$z = ($i - ($i % $limit)) / $limit * 2;\n\t\t\ttry {\n\t\t\t\t$block = $blockStatesEntry->toBlock();\n\t\t\t\t#if($block->getId() !== $id || $block->getMeta() !== $meta) var_dump(\"error, $id:$meta does not match {$block->getId()}:{$block->getMeta()}\");\n\t\t\t\t#$world->setBlock(new Vector3($pasteX + $x, $pasteY, $pasteZ + $z), $block);\n\t\t\t\t$world->setBlockAt($pasteX + $x, $pasteY, $pasteZ + $z, $block, false);\n\t\t\t} catch (Exception $e) {\n\t\t\t\t$i++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t$i++;\n\t\t}\n\t\tvar_dump(\"DONE\");\n\t}\n\n\t/** @noinspection PhpUnusedPrivateMethodInspection */\n\tprivate static function doorEquals(int $currentoldDamage, CompoundTag $defaultStatesNamedTag, CompoundTag $clonedPrintedCompound, CompoundTag $finalStatesList): bool\n\t{\n\t\tif (\n\t\t\t/*(\n\t\t\t\t$isUp &&\n\t\t\t\t$currentoldDamage === 8 &&\n\t\t\t\t$finalStatesList->getByte(\"door_hinge_bit\") === $defaultStatesNamedTag->getByte(\"door_hinge_bit\") &&\n\t\t\t\t$finalStatesList->getByte(\"open_bit\") === $defaultStatesNamedTag->getByte(\"open_bit\") &&\n\t\t\t\t$finalStatesList->getInt(\"direction\") === $defaultStatesNamedTag->getInt(\"direction\")\n\t\t\t)\n\t\t\txor*/\n\t\t(\n\t\t\t#$finalStatesList->getByte(\"door_hinge_bit\") === $clonedPrintedCompound->getByte(\"door_hinge_bit\") &&\n\t\t\t$finalStatesList->getByte(\"open_bit\") === $clonedPrintedCompound->getByte(\"open_bit\") &&\n\t\t\t$finalStatesList->getInt(\"direction\") === $clonedPrintedCompound->getInt(\"direction\")\n\t\t)\n\t\t) return true;\n\t\treturn false;\n\t}\n\n\t/**\n\t * Generates an alias map for blockstates\n\t * Only call from main thread!\n\t * @throws InvalidStateException\n\t * @throws AssumptionFailedError\n\t * @internal\n\t * @noinspection PhpUnusedPrivateMethodInspection\n\t */\n\tprivate static function generateBlockStateAliasMapJson(): void\n\t{\n\t\tLoader::getInstance()->saveResource(\"blockstate_alias_map.json\");\n\t\t$config = new Config(Loader::getInstance()->getDataFolder() . \"blockstate_alias_map.json\");\n\t\t$config->setAll([]);\n\t\t$config->save();\n\t\tforeach (self::$legacyStateMap as $blockName => $v) {\n\t\t\tforeach ($v as $meta => $legacyMapEntry) {\n\t\t\t\t$states = clone $legacyMapEntry->getBlockState()->getCompoundTag('states');\n\t\t\t\tforeach ($states as $stateName => $state) {\n\t\t\t\t\tif (!$config->exists($stateName)) {\n\t\t\t\t\t\t$alias = $stateName;\n\t\t\t\t\t\t$fullReplace = [\n\t\t\t\t\t\t\t\"top\" => \"top\",\n\t\t\t\t\t\t\t\"type\" => \"type\",\n\t\t\t\t\t\t\t\"_age\" => \"age\",\n\t\t\t\t\t\t\t\"age_\" => \"age\",\n\t\t\t\t\t\t\t\"directions\" => \"vine_b\",//hack for vine_directions => directions\n\t\t\t\t\t\t\t\"direction\" => \"direction\",\n\t\t\t\t\t\t\t\"vine_b\" => \"directions\",//hack for vine_directions => directions\n\t\t\t\t\t\t\t\"axis\" => \"axis\",\n\t\t\t\t\t\t\t\"delay\" => \"delay\",\n\t\t\t\t\t\t\t\"bite_counter\" => \"bites\",\n\t\t\t\t\t\t\t\"count\" => \"count\",\n\t\t\t\t\t\t\t\"pressed\" => \"pressed\",\n\t\t\t\t\t\t\t\"upper_block\" => \"top\",\n\t\t\t\t\t\t\t\"data\" => \"data\",\n\t\t\t\t\t\t\t\"extinguished\" => \"off\",\n\t\t\t\t\t\t\t\"color\" => \"color\",\n\t\t\t\t\t\t\t\"block_light\" => \"light\",\n\t\t\t\t\t\t\t#\"_lit\"=>\"lit\",\n\t\t\t\t\t\t\t#\"lit_\"=>\"lit\",\n\t\t\t\t\t\t\t\"liquid_depth\" => \"depth\",\n\t\t\t\t\t\t\t\"upside_down\" => \"flipped\",\n\t\t\t\t\t\t\t\"infiniburn\" => \"burn\",\n\t\t\t\t\t\t];\n\t\t\t\t\t\t$partReplace = [\n\t\t\t\t\t\t\t\"_bit\",\n\t\t\t\t\t\t\t\"piece\",\n\t\t\t\t\t\t\t\"output_\",\n\t\t\t\t\t\t\t\"level\",\n\t\t\t\t\t\t\t\"amount\",\n\t\t\t\t\t\t\t\"cauldron\",\n\t\t\t\t\t\t\t\"allow\",\n\t\t\t\t\t\t\t\"state\",\n\t\t\t\t\t\t\t\"door\",\n\t\t\t\t\t\t\t\"redstone\",\n\t\t\t\t\t\t\t\"bamboo\",\n\t\t\t\t\t\t\t#\"head\",\n\t\t\t\t\t\t\t\"brewing_stand\",\n\t\t\t\t\t\t\t\"item_frame\",\n\t\t\t\t\t\t\t\"mushrooms\",\n\t\t\t\t\t\t\t\"composter\",\n\t\t\t\t\t\t\t\"coral\",\n\t\t\t\t\t\t\t\"_2\",\n\t\t\t\t\t\t\t\"_3\",\n\t\t\t\t\t\t\t\"_4\",\n\t\t\t\t\t\t\t\"end_portal\",\n\t\t\t\t\t\t];\n\t\t\t\t\t\tforeach ($fullReplace as $stateAlias => $setTo)\n\t\t\t\t\t\t\tif (strpos($alias, $stateAlias) !== false) {\n\t\t\t\t\t\t\t\t$alias = $setTo;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\tforeach ($partReplace as $replace)\n\t\t\t\t\t\t\t$alias = trim(trim(str_replace($replace, \"\", $alias), \"_\"));\n\t\t\t\t\t\t$config->set($stateName, [\n\t\t\t\t\t\t\t\"alias\" => [$alias],\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t$all = $config->getAll();\n\t\t/** @var array<string, mixed> $all */\n\t\tksort($all);\n\t\t$config->setAll($all);\n\t\t$config->save();\n\t\tunset($config);\n\t}\n\n\t/**\n\t * Generates an alias map for blockstates\n\t * Only call from main thread!\n\t * @throws InvalidStateException\n\t * @internal\n\t */\n\tpublic static function generatePossibleStatesJson(): void\n\t{\n\t\t$config = new Config(Loader::getInstance()->getDataFolder() . \"possible_blockstates.json\");\n\t\t$config->setAll([]);\n\t\t$config->save();\n\t\t$all = [];\n\t\tforeach (self::$legacyStateMap as $blockName => $v) {\n\t\t\tforeach ($v as $meta => $legacyMapEntry) {\n\t\t\t\t$states = clone $legacyMapEntry->getBlockState()->getCompoundTag('states');\n\t\t\t\tforeach ($states as $stateName => $state) {\n\t\t\t\t\tif (!array_key_exists($stateName, $all)) {\n\t\t\t\t\t\t$all[(string)$stateName] = [];\n\t\t\t\t\t}\n\t\t\t\t\tif (!in_array($state->getValue(), $all[$stateName], true)) {\n\t\t\t\t\t\t$all[(string)$stateName][] = $state->getValue();\n\t\t\t\t\t\tif (strpos($stateName, \"_bit\") !== false) {\n\t\t\t\t\t\t\tvar_dump(\"_bit\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar_dump(\"no _bit\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tksort($all);\n\t\t$config->setAll($all);\n\t\t$config->save();\n\t\tunset($config);\n\t}\n\n\t/**\n\t * Reads a value of an object, regardless of access modifiers\n\t * @param object $object\n\t * @param string $property\n\t * @return mixed\n\t */\n\tpublic static function &readAnyValue(object $object, string $property)\n\t{\n\t\t$invoke = Closure::bind(function & () use ($property) {\n\t\t\treturn $this->$property;\n\t\t}, $object, $object)->__invoke();\n\t\t/** @noinspection PhpUnnecessaryLocalVariableInspection */\n\t\t$value = &$invoke;\n\n\t\treturn $value;\n\t}\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/helper/Progress.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\helper;\n\nclass Progress\n{\n\t/** @var float Percentage */\n\tpublic $progress = 0.0;\n\t/** @var string */\n\tpublic $string = \"\";\n\n\t/**\n\t * Progress constructor.\n\t * @param float $progress\n\t * @param string $info\n\t */\n\tpublic function __construct(float $progress, string $info)\n\t{\n\t\t$this->progress = $progress;\n\t\t$this->string = $info;\n    }\n\n    public function __toString()\n    {\n        return \"Progress: \" . $this->progress . \" String: \" . $this->string;\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/helper/Scoreboard.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\helper;\n\nuse BadFunctionCallException;\nuse jackmd\\scorefactory\\ScoreFactory;\nuse OutOfBoundsException;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\utils\\TextFormat as TF;\nuse ReflectionClass;\nuse ReflectionException;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass Scoreboard\n{\n\tpublic function handleScoreboard(UserSession $session): void\n\t{\n\t\t$player = $session->getPlayer();\n\t\tif ($session->isSidebarEnabled()) {\n\t\t\tScoreFactory::setScore($player, Loader::PREFIX . TF::BOLD . TF::LIGHT_PURPLE . \"Sidebar\");\n\t\t\ttry {\n\t\t\t\tif ($session->getLatestSelection() !== null) {\n\t\t\t\t\t$line = 0;\n\t\t\t\t\t$selection = $session->getLatestSelection();\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::GOLD . $session->getLanguage()->translateString(\"spacer\", [\"Selection\"]));\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"Position: \" . TF::RESET . \"{$this->vecToString($selection->getPos1()->asVector3())} » {$this->vecToString($selection->getPos2()->asVector3())}\");\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"World: \" . TF::RESET . $selection->getWorld()->getFolderName());\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"Shape: \" . TF::RESET . (new ReflectionClass($selection->shape))->getShortName());\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"Size: \" . TF::RESET . \"{$this->vecToString(new Vector3($selection->getSizeX(),$selection->getSizeY(),$selection->getSizeZ()))} ({$selection->getShape()->getTotalCount()})\");\n\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::GOLD . $session->getLanguage()->translateString(\"spacer\", [\"Settings\"]));\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"Tool Range: \" . TF::RESET . Loader::getInstance()->getToolDistance());\n\t\t\t\t\t$editLimit = Loader::getInstance()->getEditLimit();\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"Limit: \" . TF::RESET . ($editLimit === -1 ? $this->boolToString(false) : $editLimit));\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"Wand Tool: \" . TF::RESET . $this->boolToString($session->isWandEnabled()));\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"Debug Tool: \" . TF::RESET . $this->boolToString($session->isDebugToolEnabled()));\n\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"WAILA: \" . TF::RESET . $this->boolToString($session->isWailaEnabled()));\n\n\t\t\t\t\tif (($cb = $session->getCurrentClipboard()) instanceof SingleClipboard) {\n\t\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::GOLD . $session->getLanguage()->translateString(\"spacer\", [\"Clipboard\"]));\n\t\t\t\t\t\t/** @var SingleClipboard $cb */\n\t\t\t\t\t\tif ($cb->customName !== \"\")\n\t\t\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"Name: \" . TF::RESET . $cb->customName);\n\t\t\t\t\t\tif ($cb->selection instanceof Selection) {\n\t\t\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"Shape: \" . TF::RESET . (new ReflectionClass($cb->selection->shape))->getShortName());\n\t\t\t\t\t\t\tScoreFactory::setScoreLine($player, ++$line, TF::ITALIC . \"Size: \" . TF::RESET . \"{$this->vecToString(new Vector3($cb->selection->getSizeX(),$cb->selection->getSizeY(),$cb->selection->getSizeZ()))} ({$cb->getTotalCount()})\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t//todo current block palette, schematics, brushes\n\t\t\t\t}\n\t\t\t} catch (BadFunctionCallException | OutOfBoundsException | ReflectionException $e) {\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate function vecToString(Vector3 $v): string\n\t{\n\t\treturn TF::RESET . \"[\" . TF::RED . $v->getFloorX() . TF::RESET . \":\" . TF::GREEN . $v->getFloorY() . TF::RESET . \":\" . TF::BLUE . $v->getFloorZ() . TF::RESET . \"]\";\n\t}\n\n\tprivate function boolToString(bool $b): string\n\t{\n\t\treturn $b ? TF::RESET . TF::GREEN . \"On\" . TF::RESET : TF::RESET . TF::RED . \"Off\" . TF::RESET;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/helper/SessionHelper.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\helper;\n\nuse Ds\\Map;\nuse Exception;\nuse InvalidArgumentException;\nuse JsonException;\nuse pocketmine\\entity\\InvalidSkinException;\nuse pocketmine\\entity\\Skin;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\player\\Player;\nuse pocketmine\\plugin\\Plugin;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse RuntimeException;\nuse xenialdan\\MagicWE2\\event\\MWESessionLoadEvent;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\selection\\shape\\Cuboid;\nuse xenialdan\\MagicWE2\\session\\PluginSession;\nuse xenialdan\\MagicWE2\\session\\Session;\nuse xenialdan\\MagicWE2\\session\\UserSession;\nuse xenialdan\\MagicWE2\\tool\\Brush;\nuse xenialdan\\MagicWE2\\tool\\BrushProperties;\n\nclass SessionHelper\n{\n\t/** @var Map<UUID,UserSession> */\n\tprivate static $userSessions;\n\t/** @var Map<UUID,PluginSession> */\n\tprivate static $pluginSessions;\n\n\tpublic static function init(): void\n\t{\n\t\tif (!@mkdir($concurrentDirectory = Loader::getInstance()->getDataFolder() . \"sessions\") && !is_dir($concurrentDirectory)) {\n\t\t\tthrow new RuntimeException(sprintf('Directory \"%s\" was not created', $concurrentDirectory));\n\t\t}\n\t\tself::$userSessions = new Map();\n\t\tself::$pluginSessions = new Map();\n\t}\n\n\t/**\n\t * @param Session $session\n\t * @throws InvalidSkinException\n\t */\n\tpublic static function addSession(Session $session): void\n\t{\n\t\tif ($session instanceof UserSession) {\n\t\t\tself::$userSessions->put($session->getUUID(), $session);\n\t\t\tif (!empty(Loader::getInstance()->donatorData) && (($player = $session->getPlayer())->hasPermission(\"we.donator\") || in_array($player->getName(), Loader::getInstance()->donators))) {\n\t\t\t\t$oldSkin = $player->getSkin();\n\t\t\t\t$newSkin = new Skin($oldSkin->getSkinId(), $oldSkin->getSkinData(), Loader::getInstance()->donatorData, $oldSkin->getGeometryName(), $oldSkin->getGeometryData());\n\t\t\t\t$player->setSkin($newSkin);\n\t\t\t\t$player->sendSkin();\n\t\t\t}\n\t\t} else if ($session instanceof PluginSession) self::$pluginSessions->put($session->getUUID(), $session);\n\t}\n\n\t/**\n\t * Destroys a session and removes it from cache. Saves to file if $save is true\n\t * @param Session $session\n\t * @param bool $save\n\t * @throws JsonException\n\t */\n\tpublic static function destroySession(Session $session, bool $save = true): void\n\t{\n\t\tif ($session instanceof UserSession) {\n\t\t\t$session->cleanupInventory();\n\t\t\tself::$userSessions->remove($session->getUUID());\n\t\t} else if ($session instanceof PluginSession) self::$pluginSessions->remove($session->getUUID());\n\t\tif ($save && $session instanceof UserSession) {\n\t\t\t$session->save();\n\t\t}\n\t}\n\n\t/**\n\t * Creates an UserSession used to execute MagicWE2's functions\n\t * @param Player $player\n\t * @param bool $add If true, the session will be cached in SessionHelper\n\t * @return UserSession\n\t * @throws InvalidSkinException\n\t * @throws RuntimeException\n\t * @throws SessionException\n\t */\n\tpublic static function createUserSession(Player $player, bool $add = true): UserSession\n\t{\n\t\tif (!$player->hasPermission(\"we.session\")) throw new SessionException(TF::RED . \"You do not have the permission \\\"magicwe.session\\\"\");\n\t\t$session = new UserSession($player);\n\t\tif ($add) {\n\t\t\tself::addSession($session);\n\t\t\t(new MWESessionLoadEvent(Loader::getInstance(), $session))->call();\n\t\t}\n\t\treturn $session;\n\t}\n\n\t/**\n\t * Creates a PluginSession used to call API functions via a plugin\n\t * @param Plugin $plugin\n\t * @param bool $add If true, the session will be cached in SessionHelper\n\t * @return PluginSession\n\t * @throws InvalidSkinException\n\t */\n\tpublic static function createPluginSession(Plugin $plugin, bool $add = true): PluginSession\n\t{\n\t\t$session = new PluginSession($plugin);\n\t\tif ($add) self::addSession($session);\n\t\treturn $session;\n\t}\n\n\t/**\n\t * @param Player $player\n\t * @return bool\n\t */\n\tpublic static function hasSession(Player $player): bool\n\t{\n\t\ttry {\n\t\t\treturn self::getUserSession($player) instanceof UserSession;\n\t\t} catch (SessionException $exception) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * @param Player $player\n\t * @return null|UserSession\n\t * @throws SessionException\n\t */\n\tpublic static function getUserSession(Player $player): ?UserSession\n\t{\n\t\tif (self::$userSessions->isEmpty()) return null;\n\t\t$filtered = self::$userSessions->filter(function (UUID $uuid, Session $session) use ($player) {\n\t\t\treturn $session instanceof UserSession && $session->getPlayer() === $player;\n\t\t});\n\t\tif ($filtered->isEmpty()) return null;\n\t\tif (count($filtered) > 1) throw new SessionException(\"Multiple sessions found for player {$player->getName()}. This should never happen!\");\n\t\treturn $filtered->values()->first();\n\t}\n\n\t/**\n\t * TODO cleanup or optimize\n\t * @param UUID $uuid\n\t * @return null|Session\n\t * @throws SessionException\n\t */\n\tpublic static function getSessionByUUID(UUID $uuid): ?Session\n\t{\n\t\t$v = null;\n\t\tif (self::$userSessions->hasKey($uuid)) {\n\t\t\t$v = self::$userSessions->get($uuid, null);\n\t\t} else if (self::$pluginSessions->hasKey($uuid)) {\n\t\t\t$v = self::$pluginSessions->get($uuid, null);\n\t\t} else {\n\t\t\t/*\n\t\t\t * Sadly, this part is necessary. If you use UUID::fromString, the object \"id\" in the map does not match anymore\n\t\t\t */\n\t\t\t$userFiltered = self::$userSessions->filter(function (UUID $uuid2, Session $session) use ($uuid) {\n\t\t\t\treturn $uuid2->equals($uuid);\n\t\t\t});\n\t\t\tif (!$userFiltered->isEmpty()) $v = $userFiltered->values()->first();\n\t\t\telse {\n\t\t\t\t$pluginFiltered = self::$pluginSessions->filter(function (UUID $uuid2, Session $session) use ($uuid) {\n\t\t\t\t\treturn $uuid2->equals($uuid);\n\t\t\t\t});\n\t\t\t\tif (!$pluginFiltered->isEmpty()) $v = $pluginFiltered->values()->first();\n\t\t\t}\n\t\t}\n\t\tif (!$v instanceof Session) throw new SessionException(\"Session with uuid {$uuid->toString()} not found\");\n\t\treturn $v;\n\t}\n\n\t/**\n\t * @return array|UserSession[]\n\t */\n\tpublic static function getUserSessions(): array\n\t{\n\t\treturn self::$userSessions->values()->toArray();\n\t}\n\n\t/**\n\t * @return array|PluginSession[]\n\t */\n\tpublic static function getPluginSessions(): array\n\t{\n\t\treturn self::$pluginSessions->values()->toArray();\n\t}\n\n\t/**\n\t * @param Player $player\n\t * @return UserSession|null\n\t * @throws AssumptionFailedError\n\t * @throws InvalidSkinException\n\t * @throws JsonException\n\t * @throws RuntimeException\n\t */\n\tpublic static function loadUserSession(Player $player): ?UserSession\n\t{\n\t\t$path = Loader::getInstance()->getDataFolder() . \"sessions\" . DIRECTORY_SEPARATOR .\n\t\t\t$player->getName() . \".json\";\n\t\tif (!file_exists($path)) return null;\n\t\t$contents = file_get_contents($path);\n\t\tif ($contents === false) return null;\n\t\t$data = json_decode($contents, true, 512, JSON_THROW_ON_ERROR);\n\t\tif (is_null($data) || json_last_error() !== JSON_ERROR_NONE) {\n\t\t\tLoader::getInstance()->getLogger()->error(\"Could not load user session from json file {$path}: \" . json_last_error_msg());\n\t\t\t#unlink($path);//TODO make safe\n\t\t\treturn null;\n\t\t}\n\t\t$session = new UserSession($player);\n\t\ttry {\n\t\t\t$session->setUUID(UUID::fromString($data[\"uuid\"]));\n\t\t\t$session->setWandEnabled($data[\"wandEnabled\"]);\n\t\t\t$session->setDebugToolEnabled($data[\"debugToolEnabled\"]);\n\t\t\t$session->setWailaEnabled($data[\"wailaEnabled\"]);\n\t\t\t$session->setSidebarEnabled($data[\"sidebarEnabled\"]);\n\t\t\t$session->setLanguage($data[\"language\"]);\n\t\t\tforeach ($data[\"brushes\"] as $brushUUID => $brushJson) {\n\t\t\t\ttry {\n\t\t\t\t\t$properties = BrushProperties::fromJson($brushJson[\"properties\"]);\n\t\t\t\t\t$brush = new Brush($properties);\n\t\t\t\t\t$session->addBrush($brush);\n\t\t\t\t} catch (InvalidArgumentException $e) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!is_null(($latestSelection = $data[\"latestSelection\"] ?? null))) {\n\t\t\t\ttry {\n\t\t\t\t\t$world = Server::getInstance()->getWorldManager()->getWorld($latestSelection[\"worldId\"]);\n\t\t\t\t\tif (is_null($world)) {\n\t\t\t\t\t\t$session->sendMessage(TF::RED . \"The world of the saved sessions selection is not loaded, the last selection was not restored.\");//TODO translate better\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$shapeClass = $latestSelection[\"shapeClass\"] ?? Cuboid::class;\n\t\t\t\t\t\t$pasteVector = $latestSelection[\"shape\"][\"pasteVector\"];\n\t\t\t\t\t\tunset($latestSelection[\"shape\"][\"pasteVector\"]);\n\t\t\t\t\t\tif (!is_null($pasteVector)) {\n\t\t\t\t\t\t\t$pasteV = new Vector3(...array_values($pasteVector));\n\t\t\t\t\t\t\t$shape = new $shapeClass($pasteV, ...array_values($latestSelection[\"shape\"]));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$selection = new Selection(\n\t\t\t\t\t\t\t$session->getUUID(),\n\t\t\t\t\t\t\tServer::getInstance()->getWorldManager()->getWorld($latestSelection[\"worldId\"]),\n\t\t\t\t\t\t\t$latestSelection[\"pos1\"][\"x\"],\n\t\t\t\t\t\t\t$latestSelection[\"pos1\"][\"y\"],\n\t\t\t\t\t\t\t$latestSelection[\"pos1\"][\"z\"],\n\t\t\t\t\t\t\t$latestSelection[\"pos2\"][\"x\"],\n\t\t\t\t\t\t\t$latestSelection[\"pos2\"][\"y\"],\n\t\t\t\t\t\t\t$latestSelection[\"pos2\"][\"z\"],\n\t\t\t\t\t\t\t$shape ?? null\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ($selection instanceof Selection && $selection->isValid()) {\n\t\t\t\t\t\t\t$session->addSelection($selection);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (RuntimeException $e) {\n\t\t\t\t}\n\t\t\t}\n\t\t\t//TODO clipboard\n\t\t} catch (Exception $exception) {\n\t\t\treturn null;\n\t\t}\n\t\tself::addSession($session);\n\t\t(new MWESessionLoadEvent(Loader::getInstance(), $session))->call();\n\t\treturn $session;\n\t}\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/helper/StructureStore.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\helper;\n\nuse BlockHorizons\\libschematic\\Schematic;\nuse InvalidArgumentException;\nuse pocketmine\\utils\\SingletonTrait;\nuse xenialdan\\libstructure\\exception\\StructureFileException;\nuse xenialdan\\libstructure\\exception\\StructureFormatException;\nuse xenialdan\\libstructure\\format\\MCStructure;\nuse xenialdan\\MagicWE2\\Loader;\n\nfinal class StructureStore\n{\n\tuse SingletonTrait;\n\n\t/**\n\t * @var MCStructure[]\n\t */\n\tprivate $structures;\n\t/**\n\t * @var Schematic[]\n\t */\n\tprivate $schematics;\n\n\tpublic function __construct()\n\t{\n\t\t@mkdir(Loader::getInstance()->getDataFolder() . 'structures');\n\t\t@mkdir(Loader::getInstance()->getDataFolder() . 'schematics');\n\t}\n\n\t/**\n\t * @param string $filename Filename without folder. Can have .mcstructure extension in the name\n\t * @param bool $override Use this if you want to reload the file\n\t * @return MCStructure\n\t * @throws InvalidArgumentException\n\t * @throws StructureFileException\n\t * @throws StructureFormatException\n\t */\n\tpublic function loadStructure(string $filename, bool $override = true): MCStructure\n\t{\n\t\t$id = pathinfo($filename, PATHINFO_FILENAME);\n\t\tif (!$override && array_key_exists($id, $this->structures)) throw new InvalidArgumentException(\"Can not override $id\");\n\t\t$path = Loader::getInstance()->getDataFolder() . 'structures' . DIRECTORY_SEPARATOR . $id . '.mcstructure';//TODO redundant?\n\t\t$structure = new MCStructure();\n\n\t\t$structure->parse($path);\n\t\t$this->structures[$id] = $structure;\n\t\treturn $this->structures[$id];\n\t}\n\n\t/**\n\t * @param string $id\n\t * @return MCStructure\n\t * @throws InvalidArgumentException\n\t */\n\tpublic function getStructure(string $id): MCStructure\n\t{\n\t\t$structure = $this->structures[$id] ?? null;\n\t\tif ($structure === null) {\n\t\t\tthrow new InvalidArgumentException(\"Structure $id is not loaded\");\n\t\t}\n\t\treturn $structure;\n\t}\n\n\t/**\n\t * @param string $filename Filename without folder. Can have .schematic extension in the name\n\t * @param bool $override Use this if you want to reload the file\n\t * @return Schematic\n\t * @throws InvalidArgumentException\n\t */\n\tpublic function loadSchematic(string $filename, bool $override = true): Schematic\n\t{\n\t\t$id = pathinfo($filename, PATHINFO_FILENAME);\n\t\tif (!$override && array_key_exists($id, $this->schematics)) throw new InvalidArgumentException(\"Can not override $id\");\n\t\t$path = Loader::getInstance()->getDataFolder() . 'schematics' . DIRECTORY_SEPARATOR . $id . '.schematic';\n\t\t$schematic = new Schematic();\n\t\t$schematic->parse($path);\n\t\t$this->schematics[$id] = $schematic;\n\t\treturn $this->schematics[$id];\n\t}\n\n\t/**\n\t * @param string $id\n\t * @return Schematic\n\t * @throws InvalidArgumentException\n\t */\n\tpublic function getSchematic(string $id): Schematic\n\t{\n\t\t$schematic = $this->schematics[$id] ?? null;\n\t\tif ($schematic === null) {\n\t\t\tthrow new InvalidArgumentException(\"Structure $id is not loaded\");\n\t\t}\n\t\treturn $schematic;\n\t}\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/helper/blockstatesparsertest.log",
    "content": "2020-10-07 [20:44:07.359] [Server thread/DEBUG]: [MWE2] Search query: minecraft:tnt\n2020-10-07 [20:44:07.365] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:tnt\"\n  \"states\" => TAG_Compound: value={\n    \"allow_underwater_bit\" => TAG_Byte: value=0\n    \"explode_bit\" => TAG_Byte: value=0\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.365] [Server thread/DEBUG]: Final block: Block[TNT] (46:0)\n2020-10-07 [20:44:07.366] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab\n2020-10-07 [20:44:07.366] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:wooden_slab\"\n  \"states\" => TAG_Compound: value={\n    \"top_slot_bit\" => TAG_Byte: value=0\n    \"wood_type\" => TAG_String: value=\"oak\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.367] [Server thread/DEBUG]: Final block: Block[Oak Slab] (158:0)\n2020-10-07 [20:44:07.367] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab_wrongname\n2020-10-07 [20:44:07.368] [Server thread/DEBUG]: Unable to resolve \"wooden_slab_wrongname\" to a valid item\n2020-10-07 [20:44:07.368] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab[foo=bar]\n2020-10-07 [20:44:07.371] [Server thread/DEBUG]: Invalid state foo\n2020-10-07 [20:44:07.372] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab[top_slot_bit=]\n2020-10-07 [20:44:07.383] [Server thread/DEBUG]: Empty value for state top_slot_bit\n2020-10-07 [20:44:07.384] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab[top_slot_bit=true]\n2020-10-07 [20:44:07.513] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:wooden_slab\"\n  \"states\" => TAG_Compound: value={\n    \"top_slot_bit\" => TAG_Byte: value=1\n    \"wood_type\" => TAG_String: value=\"oak\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.513] [Server thread/DEBUG]: Final block: Block[Oak Slab] (158:8)\n2020-10-07 [20:44:07.513] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab[top_slot_bit=false]\n2020-10-07 [20:44:07.619] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:wooden_slab\"\n  \"states\" => TAG_Compound: value={\n    \"top_slot_bit\" => TAG_Byte: value=0\n    \"wood_type\" => TAG_String: value=\"oak\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.620] [Server thread/DEBUG]: Final block: Block[Oak Slab] (158:0)\n2020-10-07 [20:44:07.620] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab[wood_type=oak]\n2020-10-07 [20:44:07.638] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:wooden_slab\"\n  \"states\" => TAG_Compound: value={\n    \"top_slot_bit\" => TAG_Byte: value=0\n    \"wood_type\" => TAG_String: value=\"oak\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.639] [Server thread/DEBUG]: Final block: Block[Oak Slab] (158:0)\n2020-10-07 [20:44:07.639] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab[wood_type=spruce,top_slot_bit=false]\n2020-10-07 [20:44:07.650] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:wooden_slab\"\n  \"states\" => TAG_Compound: value={\n    \"top_slot_bit\" => TAG_Byte: value=0\n    \"wood_type\" => TAG_String: value=\"spruce\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.650] [Server thread/DEBUG]: Final block: Block[Spruce Slab] (158:1)\n2020-10-07 [20:44:07.650] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab[wood_type=spruce,top_slot_bit=true]\n2020-10-07 [20:44:07.656] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:wooden_slab\"\n  \"states\" => TAG_Compound: value={\n    \"top_slot_bit\" => TAG_Byte: value=1\n    \"wood_type\" => TAG_String: value=\"spruce\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.656] [Server thread/DEBUG]: Final block: Block[Spruce Slab] (158:9)\n2020-10-07 [20:44:07.657] [Server thread/DEBUG]: [MWE2] Search query: minecraft:end_rod[]\n2020-10-07 [20:44:07.666] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:end_rod\"\n  \"states\" => TAG_Compound: value={\n    \"facing_direction\" => TAG_Int: value=0\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.666] [Server thread/DEBUG]: Final block: Block[End Rod] (208:0)\n2020-10-07 [20:44:07.666] [Server thread/DEBUG]: [MWE2] Search query: minecraft:end_rod[facing_direction=1]\n2020-10-07 [20:44:07.671] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:end_rod\"\n  \"states\" => TAG_Compound: value={\n    \"facing_direction\" => TAG_Int: value=1\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.671] [Server thread/DEBUG]: Final block: Block[End Rod] (208:1)\n2020-10-07 [20:44:07.671] [Server thread/DEBUG]: [MWE2] Search query: minecraft:end_rod[block_light_level=14]\n2020-10-07 [20:44:07.672] [Server thread/DEBUG]: Invalid state block_light_level\n2020-10-07 [20:44:07.672] [Server thread/DEBUG]: [MWE2] Search query: minecraft:end_rod[block_light_level=13]\n2020-10-07 [20:44:07.672] [Server thread/DEBUG]: Invalid state block_light_level\n2020-10-07 [20:44:07.673] [Server thread/DEBUG]: [MWE2] Search query: minecraft:light_block[block_light_level=14]\n2020-10-07 [20:44:07.673] [Server thread/DEBUG]: Unable to resolve \"light_block\" to a valid item\n2020-10-07 [20:44:07.673] [Server thread/DEBUG]: [MWE2] Search query: minecraft:stone[]\n2020-10-07 [20:44:07.730] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:stone\"\n  \"states\" => TAG_Compound: value={\n    \"stone_type\" => TAG_String: value=\"stone\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.731] [Server thread/DEBUG]: Final block: Block[Stone] (1:0)\n2020-10-07 [20:44:07.731] [Server thread/DEBUG]: [MWE2] Search query: minecraft:stone[stone_type=granite]\n2020-10-07 [20:44:07.736] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:stone\"\n  \"states\" => TAG_Compound: value={\n    \"stone_type\" => TAG_String: value=\"granite\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.736] [Server thread/DEBUG]: Final block: Block[Granite] (1:1)\n2020-10-07 [20:44:07.736] [Server thread/DEBUG]: [MWE2] Search query: minecraft:stone[stone_type=andesite]\n2020-10-07 [20:44:07.749] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:stone\"\n  \"states\" => TAG_Compound: value={\n    \"stone_type\" => TAG_String: value=\"andesite\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.749] [Server thread/DEBUG]: Final block: Block[Andesite] (1:5)\n2020-10-07 [20:44:07.749] [Server thread/DEBUG]: [MWE2] Search query: minecraft:stone[stone_type=wrongtag]\n2020-10-07 [20:44:07.750] [Server thread/DEBUG]: No block minecraft:stone matching minecraft:stone[stone_type=wrongtag] could be found\n2020-10-07 [20:44:07.750] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab[top=true]\n2020-10-07 [20:44:07.777] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:wooden_slab\"\n  \"states\" => TAG_Compound: value={\n    \"top_slot_bit\" => TAG_Byte: value=1\n    \"wood_type\" => TAG_String: value=\"oak\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.777] [Server thread/DEBUG]: Final block: Block[Oak Slab] (158:8)\n2020-10-07 [20:44:07.777] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wooden_slab[top=true,type=spruce]\n2020-10-07 [20:44:07.783] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:wooden_slab\"\n  \"states\" => TAG_Compound: value={\n    \"top_slot_bit\" => TAG_Byte: value=1\n    \"wood_type\" => TAG_String: value=\"spruce\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.784] [Server thread/DEBUG]: Final block: Block[Spruce Slab] (158:9)\n2020-10-07 [20:44:07.784] [Server thread/DEBUG]: [MWE2] Search query: minecraft:stone[type=granite]\n2020-10-07 [20:44:07.794] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:stone\"\n  \"states\" => TAG_Compound: value={\n    \"stone_type\" => TAG_String: value=\"granite\"\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.794] [Server thread/DEBUG]: Final block: Block[Granite] (1:1)\n2020-10-07 [20:44:07.794] [Server thread/DEBUG]: [MWE2] Search query: minecraft:bedrock[burn=true]\n2020-10-07 [20:44:07.810] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:bedrock\"\n  \"states\" => TAG_Compound: value={\n    \"infiniburn_bit\" => TAG_Byte: value=1\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.810] [Server thread/DEBUG]: Final block: Block[Bedrock] (7:1)\n2020-10-07 [20:44:07.810] [Server thread/DEBUG]: [MWE2] Search query: minecraft:lever[direction=1]\n2020-10-07 [20:44:07.811] [Server thread/DEBUG]: No block minecraft:lever matching minecraft:lever[direction=1] could be found\n2020-10-07 [20:44:07.811] [Server thread/DEBUG]: [MWE2] Search query: minecraft:wheat[growth=3]\n2020-10-07 [20:44:07.820] [Server thread/DEBUG]: Undefined offset: 3\n2020-10-07 [20:44:07.820] [Server thread/DEBUG]: [MWE2] Search query: minecraft:stone_button[direction=1,pressed=true]\n2020-10-07 [20:44:07.826] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:stone_button\"\n  \"states\" => TAG_Compound: value={\n    \"button_pressed_bit\" => TAG_Byte: value=1\n    \"facing_direction\" => TAG_Int: value=1\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.826] [Server thread/DEBUG]: Final block: Block[Stone Button] (77:9)\n2020-10-07 [20:44:07.827] [Server thread/DEBUG]: [MWE2] Search query: minecraft:stone_button[direction=0]\n2020-10-07 [20:44:07.852] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:stone_button\"\n  \"states\" => TAG_Compound: value={\n    \"button_pressed_bit\" => TAG_Byte: value=0\n    \"facing_direction\" => TAG_Int: value=0\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.852] [Server thread/DEBUG]: Final block: Block[Stone Button] (77:0)\n2020-10-07 [20:44:07.853] [Server thread/DEBUG]: [MWE2] Search query: minecraft:stone_brick_stairs[direction=0]\n2020-10-07 [20:44:07.858] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:stone_brick_stairs\"\n  \"states\" => TAG_Compound: value={\n    \"upside_down_bit\" => TAG_Byte: value=0\n    \"weirdo_direction\" => TAG_Int: value=0\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.859] [Server thread/DEBUG]: Final block: Block[Stone Brick Stairs] (109:0)\n2020-10-07 [20:44:07.859] [Server thread/DEBUG]: [MWE2] Search query: minecraft:trapdoor[direction=0,open_bit=true,upside_down_bit=false]\n2020-10-07 [20:44:07.874] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:trapdoor\"\n  \"states\" => TAG_Compound: value={\n    \"direction\" => TAG_Int: value=0\n    \"open_bit\" => TAG_Byte: value=1\n    \"upside_down_bit\" => TAG_Byte: value=0\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.874] [Server thread/DEBUG]: Final block: Block[Oak Trapdoor] (96:8)\n2020-10-07 [20:44:07.874] [Server thread/DEBUG]: [MWE2] Search query: minecraft:birch_door\n2020-10-07 [20:44:07.875] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:birch_door\"\n  \"states\" => TAG_Compound: value={\n    \"direction\" => TAG_Int: value=0\n    \"door_hinge_bit\" => TAG_Byte: value=0\n    \"open_bit\" => TAG_Byte: value=0\n    \"upper_block_bit\" => TAG_Byte: value=0\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.875] [Server thread/DEBUG]: Final block: Block[Birch Door] (194:0)\n2020-10-07 [20:44:07.875] [Server thread/DEBUG]: [MWE2] Search query: minecraft:iron_door[direction=1]\n2020-10-07 [20:44:07.876] [Server thread/DEBUG]: No block minecraft:iron_door matching minecraft:iron_door[direction=1] could be found\n2020-10-07 [20:44:07.876] [Server thread/DEBUG]: [MWE2] Search query: minecraft:birch_door[upper_block_bit=true]\n2020-10-07 [20:44:07.877] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:birch_door\"\n  \"states\" => TAG_Compound: value={\n    \"direction\" => TAG_Int: value=0\n    \"door_hinge_bit\" => TAG_Byte: value=0\n    \"open_bit\" => TAG_Byte: value=0\n    \"upper_block_bit\" => TAG_Byte: value=1\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.877] [Server thread/DEBUG]: Final block: Block[Birch Door] (194:8)\n2020-10-07 [20:44:07.877] [Server thread/DEBUG]: [MWE2] Search query: minecraft:birch_door[direction=1,door_hinge_bit=false,open_bit=false,upper_block_bit=true]\n2020-10-07 [20:44:07.881] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:birch_door\"\n  \"states\" => TAG_Compound: value={\n    \"direction\" => TAG_Int: value=0\n    \"door_hinge_bit\" => TAG_Byte: value=0\n    \"open_bit\" => TAG_Byte: value=0\n    \"upper_block_bit\" => TAG_Byte: value=1\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.882] [Server thread/DEBUG]: Final block: Block[Birch Door] (194:8)\n2020-10-07 [20:44:07.882] [Server thread/DEBUG]: [MWE2] Search query: minecraft:birch_door[door_hinge_bit=false,open_bit=true,upper_block_bit=true]\n2020-10-07 [20:44:07.883] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:birch_door\"\n  \"states\" => TAG_Compound: value={\n    \"direction\" => TAG_Int: value=0\n    \"door_hinge_bit\" => TAG_Byte: value=0\n    \"open_bit\" => TAG_Byte: value=0\n    \"upper_block_bit\" => TAG_Byte: value=1\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.883] [Server thread/DEBUG]: Final block: Block[Birch Door] (194:8)\n2020-10-07 [20:44:07.883] [Server thread/DEBUG]: [MWE2] Search query: minecraft:birch_door[direction=3,door_hinge_bit=false,open_bit=true,upper_block_bit=true]\n2020-10-07 [20:44:07.885] [Server thread/DEBUG]: TAG_Compound: value={\n  \"name\" => TAG_String: value=\"minecraft:birch_door\"\n  \"states\" => TAG_Compound: value={\n    \"direction\" => TAG_Int: value=0\n    \"door_hinge_bit\" => TAG_Byte: value=0\n    \"open_bit\" => TAG_Byte: value=0\n    \"upper_block_bit\" => TAG_Byte: value=1\n  }\n  \"version\" => TAG_Int: value=17825806\n}\n2020-10-07 [20:44:07.885] [Server thread/DEBUG]: Final block: Block[Birch Door] (194:8)"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/Selection.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\selection;\n\nuse Exception;\nuse JsonSerializable;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\Position;\nuse pocketmine\\world\\World;\nuse RuntimeException;\nuse Serializable;\nuse xenialdan\\MagicWE2\\event\\MWESelectionChangeEvent;\nuse xenialdan\\MagicWE2\\exception\\SelectionException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\selection\\shape\\Cuboid;\nuse xenialdan\\MagicWE2\\selection\\shape\\Shape;\nuse xenialdan\\MagicWE2\\session\\Session;\n\n/**\n * Class Selection\n * @package xenialdan\\MagicWE2\n */\nclass Selection implements Serializable, JsonSerializable\n{\n\t/** @var int|null */\n\tpublic $worldId;\n\t/** @var Vector3|null */\n\tpublic $pos1;\n\t/** @var Vector3|null */\n\tpublic $pos2;\n\t/** @var UUID */\n\tpublic $uuid;\n\t/** @var UUID */\n\tpublic $sessionUUID;\n\t/** @var Shape|null */\n\tpublic $shape;\n\n\t/**\n\t * Selection constructor.\n\t * @param UUID $sessionUUID\n\t * @param World $world\n\t * @param ?int $minX\n\t * @param ?int $minY\n\t * @param ?int $minZ\n\t * @param ?int $maxX\n\t * @param ?int $maxY\n\t * @param ?int $maxZ\n\t * @param ?Shape $shape\n\t */\n\tpublic function __construct(UUID $sessionUUID, World $world, $minX = null, $minY = null, $minZ = null, $maxX = null, $maxY = null, $maxZ = null, ?Shape $shape = null)\n\t{\n\t\t$this->sessionUUID = $sessionUUID;\n\t\t$this->worldId = $world->getId();\n\t\tif (isset($minX, $minY, $minZ)) {\n\t\t\t$this->pos1 = (new Vector3($minX, $minY, $minZ))->floor();\n\t\t}\n\t\tif (isset($maxX, $maxY, $maxZ)) {\n\t\t\t$this->pos2 = (new Vector3($maxX, $maxY, $maxZ))->floor();\n\t\t}\n\t\tif ($shape !== null) $this->shape = $shape;\n\t\t$this->setUUID(UUID::fromRandom());\n\t}\n\n\t/**\n\t * @return World\n\t * @throws Exception\n\t */\n\tpublic function getWorld(): World\n\t{\n\t\tif (is_null($this->worldId)) {\n\t\t\tthrow new SelectionException(\"World is not set!\");\n\t\t}\n\t\t$world = Server::getInstance()->getWorldManager()->getWorld($this->worldId);\n\t\tif (is_null($world)) {\n\t\t\tthrow new SelectionException(\"World is not found!\");\n\t\t}\n\t\treturn $world;\n\t}\n\n\t/**\n\t * @param World $world\n\t */\n\tpublic function setWorld(World $world): void\n\t{\n\t\t$this->worldId = $world->getId();\n\t\ttry {\n\t\t\t($ev = new MWESelectionChangeEvent($this, MWESelectionChangeEvent::TYPE_WORLD))->call();\n\t\t} catch (RuntimeException $e) {\n\t\t}\n\t}\n\n\t/**\n\t * @return Position\n\t * @throws Exception\n\t */\n\tpublic function getPos1(): Position\n\t{\n\t\tif (is_null($this->pos1)) {\n\t\t\tthrow new SelectionException(\"Position 1 is not set!\");\n\t\t}\n\t\treturn Position::fromObject($this->pos1, $this->getWorld());\n\t}\n\n\t/**\n\t * @param Position $position\n\t * @throws AssumptionFailedError\n\t */\n\tpublic function setPos1(Position $position): void\n\t{\n\t\t$this->pos1 = $position->asVector3()->floor();\n\t\tif ($this->pos1->y >= World::Y_MAX) $this->pos1->y = World::Y_MAX;\n\t\tif ($this->pos1->y < 0) $this->pos1->y = 0;\n\t\tif ($this->worldId !== $position->getWorld()->getId()) {//reset other position if in different world\n\t\t\t$this->pos2 = null;\n\t\t}\n\t\t$this->setWorld($position->getWorld());\n\t\tif (($this->shape instanceof Cuboid || $this->shape === null) && $this->isValid())//TODO test change\n\t\t\t$this->setShape(Cuboid::constructFromPositions($this->pos1, $this->pos2));\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID($this->sessionUUID);\n\t\t\tif ($session instanceof Session) {\n\t\t\t\t$session->sendMessage(TF::GREEN . $session->getLanguage()->translateString('selection.pos1.set', [$this->pos1->getX(), $this->pos1->getY(), $this->pos1->getZ()]));\n\t\t\t\ttry {\n\t\t\t\t\t($ev = new MWESelectionChangeEvent($this, MWESelectionChangeEvent::TYPE_POS1))->call();\n\t\t\t\t} catch (RuntimeException $e) {\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (SessionException $e) {\n\t\t\t//TODO log? kick?\n\t\t}\n\t}\n\n\t/**\n\t * @return Position\n\t * @throws Exception\n\t */\n\tpublic function getPos2(): Position\n\t{\n\t\tif (is_null($this->pos2)) {\n\t\t\tthrow new SelectionException(\"Position 2 is not set!\");\n\t\t}\n\t\treturn Position::fromObject($this->pos2, $this->getWorld());\n\t}\n\n\t/**\n\t * @param Position $position\n\t * @throws AssumptionFailedError\n\t */\n\tpublic function setPos2(Position $position): void\n\t{\n\t\t$this->pos2 = $position->asVector3()->floor();\n\t\tif ($this->pos2->y >= World::Y_MAX) $this->pos2->y = World::Y_MAX;\n\t\tif ($this->pos2->y < 0) $this->pos2->y = 0;\n\t\tif ($this->worldId !== $position->getWorld()->getId()) {\n\t\t\t$this->pos1 = null;\n\t\t}\n\t\t$this->setWorld($position->getWorld());\n\t\tif (($this->shape instanceof Cuboid || $this->shape === null) && $this->isValid())\n\t\t\t$this->setShape(Cuboid::constructFromPositions($this->pos1, $this->pos2));\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID($this->sessionUUID);\n\t\t\tif ($session instanceof Session) {\n\t\t\t\t$session->sendMessage(TF::GREEN . $session->getLanguage()->translateString('selection.pos2.set', [$this->pos2->getX(), $this->pos2->getY(), $this->pos2->getZ()]));\n\t\t\t\ttry {\n\t\t\t\t\t($ev = new MWESelectionChangeEvent($this, MWESelectionChangeEvent::TYPE_POS2))->call();\n\t\t\t\t} catch (RuntimeException $e) {\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (SessionException $e) {\n\t\t\t//TODO log? kick?\n\t\t}\n\t}\n\n\t/**\n\t * @return Shape\n\t * @throws Exception\n\t */\n\tpublic function getShape(): Shape\n\t{\n\t\tif (!$this->shape instanceof Shape) throw new SelectionException(\"Shape is not valid\");\n\t\treturn $this->shape;\n\t}\n\n\t/**\n\t * @param Shape $shape\n\t */\n\tpublic function setShape(Shape $shape): void\n\t{\n\t\t$this->shape = $shape;\n\t\ttry {\n\t\t\t($ev = new MWESelectionChangeEvent($this, MWESelectionChangeEvent::TYPE_SHAPE))->call();\n\t\t} catch (RuntimeException $e) {\n\t\t}//might cause duplicated call\n\t}\n\n\t/**\n\t * Checks if a Selection is valid. It is not valid if:\n\t * - The world is not set\n\t * - Any of the positions are not set\n\t * - The shape is not set / not a shape\n\t * - The positions are not in the same world\n\t * @return bool\n\t */\n\tpublic function isValid(): bool\n\t{\n\t\ttry {\n\t\t\t#$this->getShape();\n\t\t\t$this->getWorld();\n\t\t\t$this->getPos1();\n\t\t\t$this->getPos2();\n\t\t} catch (Exception $e) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @return int\n\t */\n\tpublic function getSizeX(): int\n\t{\n\t\treturn (int)(abs($this->pos1->x - $this->pos2->x) + 1);\n\t}\n\n\t/**\n\t * @return int\n\t */\n\tpublic function getSizeY(): int\n\t{\n\t\treturn (int)(abs($this->pos1->y - $this->pos2->y) + 1);\n\t}\n\n\t/**\n\t * @return int\n\t */\n\tpublic function getSizeZ(): int\n\t{\n\t\treturn (int)(abs($this->pos1->z - $this->pos2->z) + 1);\n\t}\n\n\t/**\n\t * @param UUID $uuid\n\t */\n\tpublic function setUUID(UUID $uuid): void\n\t{\n\t\t$this->uuid = $uuid;\n\t}\n\n\t/**\n\t * @return UUID\n\t */\n\tpublic function getUUID(): UUID\n\t{\n\t\treturn $this->uuid;\n\t}\n\n\t/**\n\t * String representation of object\n\t * @link http://php.net/manual/en/serializable.serialize.php\n\t * @return string the string representation of the object or null\n\t * @since 5.1.0\n\t */\n\tpublic function serialize()\n\t{\n\t\treturn serialize([\n\t\t\t$this->worldId,\n\t\t\t$this->pos1,\n\t\t\t$this->pos2,\n\t\t\t$this->uuid,\n\t\t\t$this->sessionUUID,\n\t\t\t$this->shape\n\t\t]);\n\t}\n\n\t/**\n\t * Constructs the object\n\t * @link http://php.net/manual/en/serializable.unserialize.php\n\t * @param string $serialized <p>\n\t * The string representation of the object.\n\t * </p>\n\t * @return void\n\t * @since 5.1.0\n\t * @noinspection PhpMissingParamTypeInspection\n\t */\n\tpublic function unserialize($serialized)\n\t{\n\t\tvar_dump($serialized);\n\t\t/** @var Vector3 $pos1 , $pos2 */\n\t\t[\n\t\t\t$this->worldId,\n\t\t\t$this->pos1,\n\t\t\t$this->pos2,\n\t\t\t$this->uuid,\n\t\t\t$this->sessionUUID,\n\t\t\t$this->shape\n\t\t] = unserialize($serialized/*, ['allowed_classes' => [__CLASS__, Vector3::class,UUID::class,Shape::class]]*/);//TODO test pm4\n\t}\n\n\t/**\n\t * Specify data which should be serialized to JSON\n\t * @link http://php.net/manual/en/jsonserializable.jsonserialize.php\n\t * @return mixed data which can be serialized by <b>json_encode</b>,\n\t * which is a value of any type other than a resource.\n\t * @since 5.4.0\n\t */\n\tpublic function jsonSerialize()\n\t{\n\t\t$arr = (array)$this;\n\t\tif ($this->shape !== null)\n\t\t\t$arr[\"shapeClass\"] = get_class($this->shape);\n\t\treturn $arr;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/shape/Cone.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\selection\\shape;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockLegacyIds;\nuse pocketmine\\math\\AxisAlignedBB;\nuse pocketmine\\math\\Vector2;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nclass Cone extends Shape\n{\n\t/** @var int */\n\tpublic $height = 5;\n\t/** @var int */\n\tpublic $diameter = 5;\n\t/** @var bool */\n\tpublic $flipped = false;\n\n\t/**\n\t * Cone constructor.\n\t * @param Vector3 $pasteVector\n\t * @param int $height\n\t * @param int $diameter\n\t * @param bool $flipped\n\t */\n\tpublic function __construct(Vector3 $pasteVector, int $height, int $diameter, bool $flipped = false)\n\t{\n\t\t$this->pasteVector = $pasteVector;\n\t\t$this->height = $height;\n\t\t$this->diameter = $diameter;\n\t\t$this->flipped = $flipped;\n\t}\n\n\t/**\n\t * Returns the blocks by their actual position\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param Block[] $filterblocks If not empty, applying a filter on the block list\n\t * @param int $flags\n\t * @return Generator|Block[]\n\t * @throws Exception\n\t */\n\tpublic function getBlocks($manager, array $filterblocks = [], int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\t$reducePerLayer = ($this->diameter / $this->height);\n\t\t$centerVec2 = new Vector2($this->getPasteVector()->getX(), $this->getPasteVector()->getZ());\n\t\tfor ($x = (int)floor($centerVec2->x - $this->diameter / 2 - 1); $x <= floor($centerVec2->x + $this->diameter / 2 + 1); $x++) {\n\t\t\tfor ($y = (int)floor($this->getPasteVector()->y), $ry = 0; $y < floor($this->getPasteVector()->y + $this->height); $y++, $ry++) {\n\t\t\t\tfor ($z = (int)floor($centerVec2->y - $this->diameter / 2 - 1); $z <= floor($centerVec2->y + $this->diameter / 2 + 1); $z++) {\n\t\t\t\t\t$vec2 = new Vector2($x, $z);\n\t\t\t\t\t$vec3 = new Vector3($x, $y, $z);\n\t\t\t\t\tif ($this->flipped)\n\t\t\t\t\t\t$radiusLayer = ($this->diameter - $reducePerLayer * ($this->height - $ry)) / 2;\n\t\t\t\t\telse\n\t\t\t\t\t\t$radiusLayer = ($this->diameter - $reducePerLayer * $ry) / 2;\n\t\t\t\t\tif ($vec2->distanceSquared($centerVec2) > ($radiusLayer ** 2) || (API::hasFlag($flags, API::FLAG_HOLLOW_CLOSED) && ($ry !== 0 && $ry !== $this->height - 1) && $vec2->distanceSquared($centerVec2) <= ((($this->diameter / 2) - 1) ** 2)) || ((API::hasFlag($flags, API::FLAG_HOLLOW) && $vec2->distanceSquared($centerVec2) <= ((($this->diameter / 2) - 1) ** 2))))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t$block = API::setComponents($manager->getBlockAt($vec3->getFloorX(), $vec3->getFloorY(), $vec3->getFloorZ()), (int)$vec3->x, (int)$vec3->y, (int)$vec3->z);\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_BLOCKS) && $block->getId() !== BlockLegacyIds::AIR) continue;\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_AIR) && $block->getId() === BlockLegacyIds::AIR) continue;\n\n\t\t\t\t\tif ($block->getPos()->y >= World::Y_MAX || $block->getPos()->y < 0) continue;//TODO fuufufufuuu\n\t\t\t\t\tif (empty($filterblocks)) yield $block;\n\t\t\t\t\telse {\n\t\t\t\t\t\tforeach ($filterblocks as $filterblock) {\n\t\t\t\t\t\t\tif (($block->getId() === $filterblock->getId()) && ((API::hasFlag($flags, API::FLAG_VARIANT) && $block->getIdInfo()->getVariant() === $filterblock->getIdInfo()->getVariant()) || (!API::hasFlag($flags, API::FLAG_VARIANT) && ($block->getMeta() === $filterblock->getMeta() || API::hasFlag($flags, API::FLAG_KEEP_META)))))\n\t\t\t\t\t\t\t\tyield $block;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns a flat layer of all included x z positions in selection\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param int $flags\n\t * @return Generator|Vector2[]\n\t * @throws Exception\n\t */\n\tpublic function getLayer($manager, int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\t$centerVec2 = new Vector2($this->getPasteVector()->getX(), $this->getPasteVector()->getZ());\n\t\tfor ($x = (int)floor($centerVec2->x - $this->diameter / 2 - 1); $x <= floor($centerVec2->x + $this->diameter / 2 + 1); $x++) {\n\t\t\tfor ($z = (int)floor($centerVec2->y - $this->diameter / 2 - 1); $z <= floor($centerVec2->y + $this->diameter / 2 + 1); $z++) {\n\t\t\t\t$vec2 = new Vector2($x, $z);\n\t\t\t\tif ($vec2->distanceSquared($centerVec2) > (($this->diameter / 2) ** 2) || ((API::hasFlag($flags, API::FLAG_HOLLOW) && $vec2->distanceSquared($centerVec2) <= ((($this->diameter / 2) - 1) ** 2))))\n\t\t\t\t\tcontinue;\n\t\t\t\tyield $vec2;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param World|AsyncChunkManager $manager\n\t * @return string[] fastSerialized chunks\n\t * @throws Exception\n\t */\n\tpublic function getTouchedChunks($manager): array\n\t{//TODO optimize to remove \"corner\" chunks\n\t\t$this->validateChunkManager($manager);\n\t\t$maxX = ($this->getMaxVec3()->x + 1) >> 4;\n\t\t$minX = $this->getMinVec3()->x >> 4;\n\t\t$maxZ = ($this->getMaxVec3()->z + 1) >> 4;\n\t\t$minZ = $this->getMinVec3()->z >> 4;\n\t\t$touchedChunks = [];\n\t\tfor ($x = $minX; $x <= $maxX; $x++) {\n\t\t\tfor ($z = $minZ; $z <= $maxZ; $z++) {\n\t\t\t\t$chunk = $manager->getChunk($x, $z);\n\t\t\t\tif ($chunk === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tprint \"Touched Chunk at: $x:$z\" . PHP_EOL;\n\t\t\t\t$touchedChunks[World::chunkHash($x, $z)] = FastChunkSerializer::serialize($chunk);\n\t\t\t}\n\t\t}\n\t\tprint \"Touched chunks count: \" . count($touchedChunks) . PHP_EOL;\n\t\treturn $touchedChunks;\n\t}\n\n\tpublic function getAABB(): AxisAlignedBB\n\t{\n\t\treturn new AxisAlignedBB(\n\t\t\tfloor($this->pasteVector->x - $this->diameter / 2),\n\t\t\t$this->pasteVector->y,\n\t\t\tfloor($this->pasteVector->z - $this->diameter / 2),\n\t\t\t-1 + floor($this->pasteVector->x - $this->diameter / 2) + $this->diameter,\n\t\t\t-1 + $this->pasteVector->y + $this->height,\n\t\t\t-1 + floor($this->pasteVector->z - $this->diameter / 2) + $this->diameter\n\t\t);\n\t}\n\n\tpublic function getTotalCount(): int\n\t{\n\t\treturn (int)ceil((M_PI * (($this->diameter / 2) ** 2) * $this->height) / 3);\n\t}\n\n\tpublic static function getName(): string\n\t{\n\t\treturn \"Cone\";\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/shape/Cube.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\selection\\shape;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockLegacyIds;\nuse pocketmine\\math\\AxisAlignedBB;\nuse pocketmine\\math\\Vector2;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nclass Cube extends Shape\n{\n\t/** @var int */\n\tpublic $width = 5;\n\n\tpublic function __construct(Vector3 $pasteVector, int $width)\n\t{\n\t\t$this->pasteVector = $pasteVector;\n\t\t$this->width = $width;\n\t}\n\n\t/**\n\t * Returns the blocks by their actual position\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param Block[] $filterblocks If not empty, applying a filter on the block list\n\t * @param int $flags\n\t * @return Generator|Block[]\n\t * @throws Exception\n\t */\n    public function getBlocks($manager, array $filterblocks = [], int $flags = API::FLAG_BASE): Generator\n    {\n\t\t$this->validateChunkManager($manager);\n\t\tfor ($x = (int)floor($this->getMinVec3()->x), $rx = 0; $x <= floor($this->getMaxVec3()->x); $x++, $rx++) {\n\t\t\tfor ($y = (int)floor($this->getMinVec3()->y), $ry = 0; $y <= floor($this->getMaxVec3()->y); $y++, $ry++) {\n\t\t\t\tfor ($z = (int)floor($this->getMinVec3()->z), $rz = 0; $z <= floor($this->getMaxVec3()->z); $z++, $rz++) {\n\t\t\t\t\t$block = API::setComponents($manager->getBlockAt($x, $y, $z), (int)$x, (int)$y, (int)$z);\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_BLOCKS) && $block->getId() !== BlockLegacyIds::AIR) continue;\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_AIR) && $block->getId() === BlockLegacyIds::AIR) continue;\n\n\t\t\t\t\tif ($block->getPos()->y >= World::Y_MAX || $block->getPos()->y < 0) continue;//TODO check for removal because relative might be at other y\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_HOLLOW) && ($block->getPos()->x > $this->getMinVec3()->getX() && $block->getPos()->x < $this->getMaxVec3()->getX()) && ($block->getPos()->y > $this->getMinVec3()->getY() && $block->getPos()->y < $this->getMaxVec3()->getY()) && ($block->getPos()->z > $this->getMinVec3()->getZ() && $block->getPos()->z < $this->getMaxVec3()->getZ())) continue;\n\t\t\t\t\tif (empty($filterblocks)) yield $block;\n\t\t\t\t\telse {\n\t\t\t\t\t\tforeach ($filterblocks as $filterblock) {\n\t\t\t\t\t\t\tif (($block->getId() === $filterblock->getId()) && ((API::hasFlag($flags, API::FLAG_VARIANT) && $block->getIdInfo()->getVariant() === $filterblock->getIdInfo()->getVariant()) || (!API::hasFlag($flags, API::FLAG_VARIANT) && ($block->getMeta() === $filterblock->getMeta() || API::hasFlag($flags, API::FLAG_KEEP_META)))))\n\t\t\t\t\t\t\t\tyield $block;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n            }\n        }\n    }\n\n\t/**\n\t * Returns a flat layer of all included x z positions in selection\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param int $flags\n\t * @return Generator|Vector2[]\n\t * @throws Exception\n\t */\n    public function getLayer($manager, int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\tfor ($x = (int)floor($this->getMinVec3()->x); $x <= floor($this->getMaxVec3()->x); $x++) {\n\t\t\tfor ($z = (int)floor($this->getMinVec3()->z); $z <= floor($this->getMaxVec3()->z); $z++) {\n\t\t\t\tyield new Vector2($x, $z);\n\t\t\t}\n\t\t}\n\t}\n\n    /**\n     * @param World|AsyncChunkManager $manager\n     * @return string[] fastSerialized chunks\n     * @throws Exception\n     */\n    public function getTouchedChunks($manager): array\n    {\n\t\t$this->validateChunkManager($manager);\n\t\t$maxX = ($this->getMaxVec3()->x + 1) >> 4;\n\t\t$minX = $this->getMinVec3()->x >> 4;\n\t\t$maxZ = ($this->getMaxVec3()->z + 1) >> 4;\n\t\t$minZ = $this->getMinVec3()->z >> 4;\n\t\t$touchedChunks = [];\n\t\tfor ($x = $minX; $x <= $maxX; $x++) {\n\t\t\tfor ($z = $minZ; $z <= $maxZ; $z++) {\n\t\t\t\t$chunk = $manager->getChunk($x, $z);\n\t\t\t\tif ($chunk === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tprint \"Touched Chunk at: $x:$z\" . PHP_EOL;\n\t\t\t\t$touchedChunks[World::chunkHash($x, $z)] = FastChunkSerializer::serialize($chunk);\n\t\t\t}\n        }\n        print \"Touched chunks count: \" . count($touchedChunks) . PHP_EOL;\n        return $touchedChunks;\n    }\n\n    public function getAABB(): AxisAlignedBB\n    {\n        return new AxisAlignedBB(\n            ceil($this->pasteVector->x - $this->width / 2),\n            $this->pasteVector->y,\n            ceil($this->pasteVector->z - $this->width / 2),\n            -1 + ceil($this->pasteVector->x - $this->width / 2) + $this->width,\n            -1 + $this->pasteVector->y + $this->width,\n            -1 + ceil($this->pasteVector->z - $this->width / 2) + $this->width\n        );\n    }\n\n    public function getTotalCount(): int\n    {\n        return $this->width ** 3;\n    }\n\n    public static function getName(): string\n    {\n        return \"Cube\";\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/shape/Cuboid.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\selection\\shape;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockLegacyIds;\nuse pocketmine\\math\\AxisAlignedBB;\nuse pocketmine\\math\\Vector2;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nclass Cuboid extends Shape\n{\n\t/** @var int */\n\tpublic $width = 5;\n\t/** @var int */\n\tpublic $height = 5;\n\t/** @var int */\n\tpublic $depth = 5;\n\n\t/**\n\t * Cuboid constructor.\n\t * @param Vector3 $pasteVector\n\t * @param int $width\n\t * @param int $height\n\t * @param int $depth\n\t */\n\tpublic function __construct(Vector3 $pasteVector, int $width, int $height, int $depth)\n\t{\n        $this->pasteVector = $pasteVector;\n        $this->width = $width;\n        $this->height = $height;\n        $this->depth = $depth;\n    }\n\n    public static function constructFromPositions(Vector3 $pos1, Vector3 $pos2): self\n    {\n\t\t$width = (int)abs($pos1->getX() - $pos2->getX()) + 1;\n\t\t$height = (int)abs($pos1->getY() - $pos2->getY()) + 1;\n\t\t$depth = (int)abs($pos1->getZ() - $pos2->getZ()) + 1;\n\t\treturn new Cuboid((new Vector3(($pos1->x + $pos2->x) / 2, min($pos1->y, $pos2->y), ($pos1->z + $pos2->z) / 2)), $width, $height, $depth);\n\t}\n\n\t/**\n\t * Returns the blocks by their actual position\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param Block[] $filterblocks If not empty, applying a filter on the block list\n\t * @param int $flags\n\t * @return Generator|Block[]\n\t * @throws Exception\n\t */\n    public function getBlocks($manager, array $filterblocks = [], int $flags = API::FLAG_BASE): Generator\n    {\n\t\t$this->validateChunkManager($manager);\n\t\tfor ($x = (int)floor($this->getMinVec3()->x); $x <= floor($this->getMaxVec3()->x); $x++) {\n\t\t\tfor ($y = (int)floor($this->getMinVec3()->y); $y <= floor($this->getMaxVec3()->y); $y++) {\n\t\t\t\tfor ($z = (int)floor($this->getMinVec3()->z); $z <= floor($this->getMaxVec3()->z); $z++) {\n\t\t\t\t\t$block = API::setComponents($manager->getBlockAt($x, $y, $z), (int)$x, (int)$y, (int)$z);\n\t\t\t\t\t#var_dump(\"shape getblocks\", $block);\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_BLOCKS) && $block->getId() !== BlockLegacyIds::AIR) continue;\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_AIR) && $block->getId() === BlockLegacyIds::AIR) continue;\n\n\t\t\t\t\tif ($block->getPos()->y >= World::Y_MAX || $block->getPos()->y < 0) continue;//TODO check for removal because relative might be at other y\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_HOLLOW) && ($block->getPos()->x > $this->getMinVec3()->getX() && $block->getPos()->x < $this->getMaxVec3()->getX()) && ($block->getPos()->y > $this->getMinVec3()->getY() && $block->getPos()->y < $this->getMaxVec3()->getY()) && ($block->getPos()->z > $this->getMinVec3()->getZ() && $block->getPos()->z < $this->getMaxVec3()->getZ())) continue;\n\t\t\t\t\tif (empty($filterblocks)) yield $block;\n\t\t\t\t\telse {\n\t\t\t\t\t\tforeach ($filterblocks as $filterblock) {\n\t\t\t\t\t\t\tif (($block->getId() === $filterblock->getId()) && ((API::hasFlag($flags, API::FLAG_VARIANT) && $block->getIdInfo()->getVariant() === $filterblock->getIdInfo()->getVariant()) || (!API::hasFlag($flags, API::FLAG_VARIANT) && ($block->getMeta() === $filterblock->getMeta() || API::hasFlag($flags, API::FLAG_KEEP_META)))))\n\t\t\t\t\t\t\t\tyield $block;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n            }\n        }\n    }\n\n\t/**\n\t * Returns a flat layer of all included x z positions in selection\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param int $flags\n\t * @return Generator|Vector2[]\n\t * @throws Exception\n\t */\n    public function getLayer($manager, int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\tfor ($x = (int)floor($this->getMinVec3()->x); $x <= floor($this->getMaxVec3()->x); $x++) {\n\t\t\tfor ($z = (int)floor($this->getMinVec3()->z); $z <= floor($this->getMaxVec3()->z); $z++) {\n\t\t\t\tyield new Vector2($x, $z);\n\t\t\t}\n\t\t}\n\t}\n\n    /**\n     * @param World|AsyncChunkManager $manager\n     * @return string[] fastSerialized chunks\n     * @throws Exception\n     */\n    public function getTouchedChunks($manager): array\n    {\n\t\t$this->validateChunkManager($manager);\n\t\t$maxX = ($this->getMaxVec3()->x + 1) >> 4;\n\t\t$minX = $this->getMinVec3()->x >> 4;\n\t\t$maxZ = ($this->getMaxVec3()->z + 1) >> 4;\n\t\t$minZ = $this->getMinVec3()->z >> 4;\n\t\t$touchedChunks = [];\n\t\tfor ($x = $minX; $x <= $maxX; $x++) {\n\t\t\tfor ($z = $minZ; $z <= $maxZ; $z++) {\n\t\t\t\t$chunk = $manager->getChunk($x, $z);\n\t\t\t\tif ($chunk === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t$touchedChunks[World::chunkHash($x, $z)] = FastChunkSerializer::serialize($chunk);\n\t\t\t}\n\t\t}\n        return $touchedChunks;\n    }\n\n    public function getAABB(): AxisAlignedBB\n    {\n        return new AxisAlignedBB(\n            ceil($this->pasteVector->x - $this->width / 2),\n            $this->pasteVector->y,\n            ceil($this->pasteVector->z - $this->depth / 2),\n            -1 + ceil($this->pasteVector->x - $this->width / 2) + $this->width,\n            -1 + $this->pasteVector->y + $this->height,\n            -1 + ceil($this->pasteVector->z - $this->depth / 2) + $this->depth\n        );\n    }\n\n    /**\n     * @return int\n     */\n    public function getTotalCount(): int\n    {\n        return $this->width * $this->height * $this->depth;\n    }\n\n    public static function getName(): string\n    {\n        return \"Cuboid\";\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/shape/Custom.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\selection\\shape;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\math\\AxisAlignedBB;\nuse pocketmine\\math\\Vector2;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nclass Custom extends Shape\n{\n\t/** @var Vector3[] */\n\tpublic $positions = [];\n\n\t/**\n\t * Custom constructor.\n\t * @param Vector3 $pasteVector\n\t * @param Vector3[] $positions\n\t */\n\tpublic function __construct(Vector3 $pasteVector, array $positions)\n\t{\n\t\t$this->pasteVector = $pasteVector;\n\t\t$this->positions = $positions;\n\t}\n\n\t/**\n\t * Returns the blocks by their actual position\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param Block[] $filterblocks If not empty, applying a filter on the block list\n\t * @param int $flags\n\t * @return Generator|Block[]\n\t * @throws Exception\n\t */\n\tpublic function getBlocks($manager, array $filterblocks = [], int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\tforeach ($this->positions as $position) {\n\t\t\t//TODO filterblocks\n\t\t\tyield API::setComponents($manager->getBlockAt($position->getFloorX(), $position->getFloorY(), $position->getFloorZ()), (int)$position->x, (int)$position->y, (int)$position->z);\n\t\t}\n\t}\n\n\t/**\n\t * Returns a flat layer of all included x z positions in selection\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param int $flags\n\t * @return Generator|Vector2[]\n\t * @throws Exception\n\t */\n\tpublic function getLayer($manager, int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\t/* Mapping: $walked[$hash]=true */\n\t\t$walked = [];\n\t\tforeach ($this->positions as $position) {\n\t\t\t$hash = World::chunkHash($position->getFloorX(), $position->getFloorZ());\n\t\t\tif (isset($walked[$hash])) continue;\n\t\t\t$walked[$hash] = true;\n\t\t\tyield new Vector2($position->x, $position->z);\n\t\t}\n\t}\n\n\t/**\n\t * @param World|AsyncChunkManager $manager\n\t * @return string[] fastSerialized chunks\n\t * @throws Exception\n\t */\n\tpublic function getTouchedChunks($manager): array\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\t$touchedChunks = [];\n\t\tforeach ($this->getLayer($manager) as $vector2) {\n\t\t\t$x = $vector2->getFloorX() >> 4;\n\t\t\t$z = $vector2->getFloorY() >> 4;\n\t\t\tif (isset($touchedChunks[World::chunkHash($x, $z)]) || ($chunk = $manager->getChunk($x, $z)) === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tprint \"Touched Chunk at: $x:$z\" . PHP_EOL;\n\t\t\t$touchedChunks[World::chunkHash($x, $z)] = FastChunkSerializer::serialize($chunk);\n\t\t}\n\t\tprint \"Touched chunks count: \" . count($touchedChunks) . PHP_EOL;\n\t\treturn $touchedChunks;\n\t}\n\n\tpublic function getAABB(): AxisAlignedBB\n\t{\n\t\t$minX = $maxX = $minY = $maxY = $minZ = $maxZ = null;\n\t\tforeach ($this->positions as $position) {\n\t\t\tif (is_null($minX)) {\n\t\t\t\t$minX = $maxX = $position->x;\n\t\t\t\t$minY = $maxY = $position->y;\n\t\t\t\t$minZ = $maxZ = $position->z;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t$minX = min($minX, $position->x);\n\t\t\t$minY = min($minY, $position->y);\n\t\t\t$minZ = min($minZ, $position->z);\n\t\t\t$maxX = max($maxX, $position->x);\n\t\t\t$maxY = max($maxY, $position->y);\n\t\t\t$maxZ = max($maxZ, $position->z);\n\t\t}\n\t\treturn new AxisAlignedBB($minX, $minY, $minZ, $maxX, $maxY, $maxZ);\n\t}\n\n\tpublic function getTotalCount(): int\n\t{\n\t\treturn count($this->positions);\n\t}\n\n\tpublic static function getName(): string\n\t{\n\t\treturn \"Custom\";\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/shape/Cylinder.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\selection\\shape;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockLegacyIds;\nuse pocketmine\\math\\AxisAlignedBB;\nuse pocketmine\\math\\Vector2;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nclass Cylinder extends Shape\n{\n\t/** @var int */\n\tpublic $height = 1;\n\t/** @var int */\n\tpublic $diameter = 5;\n\n\t/**\n\t * Cylinder constructor.\n\t * @param Vector3 $pasteVector\n\t * @param int $height\n\t * @param int $diameter\n\t */\n\tpublic function __construct(Vector3 $pasteVector, int $height, int $diameter)\n\t{\n\t\t$this->pasteVector = $pasteVector;\n        $this->height = $height;\n        $this->diameter = $diameter;\n    }\n\n    /**\n\t * Returns the blocks by their actual position\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param Block[] $filterblocks If not empty, applying a filter on the block list\n\t * @param int $flags\n\t * @return Generator|Block[]\n\t * @throws Exception\n\t */\n    public function getBlocks($manager, array $filterblocks = [], int $flags = API::FLAG_BASE): Generator\n    {\n\t\t$this->validateChunkManager($manager);\n\t\t$centerVec2 = new Vector2($this->getPasteVector()->getX(), $this->getPasteVector()->getZ());\n\t\tfor ($x = (int)floor($centerVec2->x - $this->diameter / 2 - 1); $x <= floor($centerVec2->x + $this->diameter / 2 + 1); $x++) {\n\t\t\tfor ($y = (int)floor($this->getPasteVector()->y), $ry = 0; $y < floor($this->getPasteVector()->y + $this->height); $y++, $ry++) {\n\t\t\t\tfor ($z = (int)floor($centerVec2->y - $this->diameter / 2 - 1); $z <= floor($centerVec2->y + $this->diameter / 2 + 1); $z++) {\n\t\t\t\t\t$vec2 = new Vector2($x, $z);\n\t\t\t\t\t$vec3 = new Vector3($x, $y, $z);\n\t\t\t\t\tif ($vec2->distanceSquared($centerVec2) > (($this->diameter / 2) ** 2) || (API::hasFlag($flags, API::FLAG_HOLLOW_CLOSED) && ($ry !== 0 && $ry !== $this->height - 1) && $vec2->distanceSquared($centerVec2) <= ((($this->diameter / 2) - 1) ** 2)) || ((API::hasFlag($flags, API::FLAG_HOLLOW) && $vec2->distanceSquared($centerVec2) <= ((($this->diameter / 2) - 1) ** 2))))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t$block = API::setComponents($manager->getBlockAt($vec3->getFloorX(), $vec3->getFloorY(), $vec3->getFloorZ()), (int)$vec3->x, (int)$vec3->y, (int)$vec3->z);\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_BLOCKS) && $block->getId() !== BlockLegacyIds::AIR) continue;\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_AIR) && $block->getId() === BlockLegacyIds::AIR) continue;\n\n\t\t\t\t\tif ($block->getPos()->y >= World::Y_MAX || $block->getPos()->y < 0) continue;//TODO fuufufufuuu\n\t\t\t\t\tif (empty($filterblocks)) yield $block;\n\t\t\t\t\telse {\n\t\t\t\t\t\tforeach ($filterblocks as $filterblock) {\n\t\t\t\t\t\t\tif (($block->getId() === $filterblock->getId()) && ((API::hasFlag($flags, API::FLAG_VARIANT) && $block->getIdInfo()->getVariant() === $filterblock->getIdInfo()->getVariant()) || (!API::hasFlag($flags, API::FLAG_VARIANT) && ($block->getMeta() === $filterblock->getMeta() || API::hasFlag($flags, API::FLAG_KEEP_META)))))\n\t\t\t\t\t\t\t\tyield $block;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n            }\n        }\n    }\n\n\t/**\n\t * Returns a flat layer of all included x z positions in selection\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param int $flags\n\t * @return Generator|Vector2[]\n\t * @throws Exception\n\t */\n    public function getLayer($manager, int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\t$centerVec2 = new Vector2($this->getPasteVector()->getX(), $this->getPasteVector()->getZ());\n\t\tfor ($x = (int)floor($centerVec2->x - $this->diameter / 2 - 1); $x <= floor($centerVec2->x + $this->diameter / 2 + 1); $x++) {\n\t\t\tfor ($z = (int)floor($centerVec2->y - $this->diameter / 2 - 1); $z <= floor($centerVec2->y + $this->diameter / 2 + 1); $z++) {\n\t\t\t\t$vec2 = new Vector2($x, $z);\n\t\t\t\tif ($vec2->distanceSquared($centerVec2) > (($this->diameter / 2) ** 2) || ((API::hasFlag($flags, API::FLAG_HOLLOW) && $vec2->distanceSquared($centerVec2) <= ((($this->diameter / 2) - 1) ** 2))))\n\t\t\t\t\tcontinue;\n\t\t\t\tyield $vec2;\n\t\t\t}\n\t\t}\n\t}\n\n    /**\n     * @param World|AsyncChunkManager $manager\n     * @return string[] fastSerialized chunks\n     * @throws Exception\n     */\n    public function getTouchedChunks($manager): array\n    {//TODO optimize to remove \"corner\" chunks\n\t\t$this->validateChunkManager($manager);\n\t\t$maxX = ($this->getMaxVec3()->x + 1) >> 4;\n\t\t$minX = $this->getMinVec3()->x >> 4;\n\t\t$maxZ = ($this->getMaxVec3()->z + 1) >> 4;\n\t\t$minZ = $this->getMinVec3()->z >> 4;\n\t\t$touchedChunks = [];\n\t\tfor ($x = $minX; $x <= $maxX; $x++) {\n\t\t\tfor ($z = $minZ; $z <= $maxZ; $z++) {\n\t\t\t\t$chunk = $manager->getChunk($x, $z);\n\t\t\t\tif ($chunk === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tprint \"Touched Chunk at: $x:$z\" . PHP_EOL;\n\t\t\t\t$touchedChunks[World::chunkHash($x, $z)] = FastChunkSerializer::serialize($chunk);\n\t\t\t}\n        }\n        print \"Touched chunks count: \" . count($touchedChunks) . PHP_EOL;\n        return $touchedChunks;\n    }\n\n    public function getAABB(): AxisAlignedBB\n    {\n        return new AxisAlignedBB(\n            floor($this->pasteVector->x - $this->diameter / 2),\n            $this->pasteVector->y,\n            floor($this->pasteVector->z - $this->diameter / 2),\n            -1 + floor($this->pasteVector->x - $this->diameter / 2) + $this->diameter,\n            -1 + $this->pasteVector->y + $this->height,\n            -1 + floor($this->pasteVector->z - $this->diameter / 2) + $this->diameter\n        );\n    }\n\n    public function getTotalCount(): int\n    {\n\t\treturn (int)ceil(M_PI * (($this->diameter / 2) ** 2) * $this->height);\n    }\n\n    public static function getName(): string\n    {\n        return \"Cylinder\";\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/shape/Ellipsoid.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\selection\\shape;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockLegacyIds;\nuse pocketmine\\math\\AxisAlignedBB;\nuse pocketmine\\math\\Vector2;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nclass Ellipsoid extends Shape\n{\n\t/** @var int */\n\tpublic $width = 5;\n\t/** @var int */\n\tpublic $height = 5;\n\t/** @var int */\n\tpublic $depth = 5;\n\n\t/**\n\t * Pyramid constructor.\n\t * @param Vector3 $pasteVector\n\t * @param int $width\n\t * @param int $height\n\t * @param int $depth\n\t */\n\tpublic function __construct(Vector3 $pasteVector, int $width, int $height, int $depth)\n\t{\n        $this->pasteVector = $pasteVector;\n        $this->width = $width;\n        $this->height = $height;\n        $this->depth = $depth;\n    }\n\n    /**\n\t * Returns the blocks by their actual position\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param Block[] $filterblocks If not empty, applying a filter on the block list\n\t * @param int $flags\n\t * @return Generator|Block[]\n\t * @throws Exception\n\t */\n    public function getBlocks($manager, array $filterblocks = [], int $flags = API::FLAG_BASE): Generator\n    {\n        $this->validateChunkManager($manager);\n        $centerVec2 = new Vector2($this->getPasteVector()->getX(), $this->getPasteVector()->getZ());\n        $this->pasteVector = $this->getPasteVector()->add(0, -0.5, 0);\n\n        $xrad = $this->width / 2;\n        $yrad = $this->height / 2;\n        $zrad = $this->depth / 2;\n        $xradSquared = $xrad ** 2;\n        $yradSquared = $yrad ** 2;\n        $zradSquared = $zrad ** 2;\n        $targetX = $this->pasteVector->getX();\n        $targetY = $this->pasteVector->getY();\n        $targetZ = $this->pasteVector->getZ();\n\n        for ($x = (int)floor($centerVec2->x - $this->width / 2 /*- 1*/); $x <= floor($centerVec2->x + $this->width / 2 /*+ 1*/); $x++) {\n\t\t\t$xSquared = ($targetX - $x) ** 2;\n\t\t\tfor ($y = (int)floor($this->getPasteVector()->y) + 1, $ry = 0; $y <= floor($this->getPasteVector()->y + $this->height); $y++, $ry++) {\n\t\t\t\t$ySquared = ($targetY - $y + $yrad) ** 2;\n\t\t\t\tfor ($z = (int)floor($centerVec2->y - $this->depth / 2 /*- 1*/); $z <= floor($centerVec2->y + $this->depth / 2 /*+ 1*/); $z++) {\n\t\t\t\t\t$zSquared = ($targetZ - $z) ** 2;\n\n\t\t\t\t\t$vec3 = new Vector3($x, $y, $z);\n\t\t\t\t\t//TODO hollow\n\t\t\t\t\tif ($xSquared / $xradSquared + $ySquared / $yradSquared + $zSquared / $zradSquared >= 1) continue;\n\t\t\t\t\t$block = API::setComponents($manager->getBlockAt($vec3->getFloorX(), $vec3->getFloorY(), $vec3->getFloorZ()), (int)$vec3->x, (int)$vec3->y, (int)$vec3->z);\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_BLOCKS) && $block->getId() !== BlockLegacyIds::AIR) continue;\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_AIR) && $block->getId() === BlockLegacyIds::AIR) continue;\n\n\t\t\t\t\tif ($block->getPos()->y >= World::Y_MAX || $block->getPos()->y < 0) continue;//TODO fuufufufuuu\n\t\t\t\t\tif (empty($filterblocks)) yield $block;\n\t\t\t\t\telse {\n\t\t\t\t\t\tforeach ($filterblocks as $filterblock) {\n\t\t\t\t\t\t\tif (($block->getId() === $filterblock->getId()) && ((API::hasFlag($flags, API::FLAG_VARIANT) && $block->getIdInfo()->getVariant() === $filterblock->getIdInfo()->getVariant()) || (!API::hasFlag($flags, API::FLAG_VARIANT) && ($block->getMeta() === $filterblock->getMeta() || API::hasFlag($flags, API::FLAG_KEEP_META)))))\n\t\t\t\t\t\t\t\tyield $block;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n            }\n        }\n    }\n\n\t/**\n\t * Returns a flat layer of all included x z positions in selection\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param int $flags\n\t * @return Generator|Vector2[]\n\t * @throws Exception\n\t */\n    public function getLayer($manager, int $flags = API::FLAG_BASE): Generator\n    {\n        $this->validateChunkManager($manager);\n        $centerVec2 = new Vector2($this->getPasteVector()->getX(), $this->getPasteVector()->getZ());\n\n        $xrad = $this->width / 2;\n        $zrad = $this->depth / 2;\n        $xradSquared = $xrad ** 2;\n        $zradSquared = $zrad ** 2;\n        $targetX = $this->pasteVector->getX();\n        $targetZ = $this->pasteVector->getZ();\n\n\t\tfor ($x = (int)floor($centerVec2->x - $this->width / 2 /*- 1*/); $x <= floor($centerVec2->x + $this->width / 2 /*+ 1*/); $x++) {\n\t\t\t$xSquared = ($targetX - $x) ** 2;\n\t\t\tfor ($z = (int)floor($centerVec2->y - $this->depth / 2 /*- 1*/); $z <= floor($centerVec2->y + $this->depth / 2 /*+ 1*/); $z++) {\n\t\t\t\t$zSquared = ($targetZ - $z) ** 2;\n\t\t\t\tif ($xSquared / $xradSquared + $zSquared / $zradSquared >= 1) continue;\n\t\t\t\t//TODO hollow\n\t\t\t\tyield new Vector2($x, $z);\n\t\t\t}\n\t\t}\n    }\n\n    /**\n     * @param World|AsyncChunkManager $manager\n     * @return string[] fastSerialized chunks\n     * @throws Exception\n     */\n    public function getTouchedChunks($manager): array\n    {//TODO optimize to remove \"corner\" chunks\n\t\t$this->validateChunkManager($manager);\n\t\t$maxX = ($this->getMaxVec3()->x + 1) >> 4;\n\t\t$minX = $this->getMinVec3()->x >> 4;\n\t\t$maxZ = ($this->getMaxVec3()->z + 1) >> 4;\n\t\t$minZ = $this->getMinVec3()->z >> 4;\n\t\t$touchedChunks = [];\n\t\tfor ($x = $minX - 1; $x <= $maxX + 1; $x++) {\n\t\t\tfor ($z = $minZ - 1; $z <= $maxZ + 1; $z++) {\n\t\t\t\t$chunk = $manager->getChunk($x, $z);\n\t\t\t\tif ($chunk === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tprint \"Touched Chunk at: $x:$z\" . PHP_EOL;\n\t\t\t\t$touchedChunks[World::chunkHash($x, $z)] = FastChunkSerializer::serialize($chunk);\n\t\t\t}\n        }\n        print \"Touched chunks count: \" . count($touchedChunks) . PHP_EOL;\n        return $touchedChunks;\n    }\n\n    public function getAABB(): AxisAlignedBB\n    {\n        return new AxisAlignedBB(\n            floor($this->pasteVector->x - $this->width / 2),\n            $this->pasteVector->y,\n            floor($this->pasteVector->z - $this->depth / 2),\n            -1 + floor($this->pasteVector->x - $this->width / 2) + $this->width,\n            -1 + $this->pasteVector->y + $this->height,\n            -1 + floor($this->pasteVector->z - $this->depth / 2) + $this->depth\n        );\n    }\n\n    public function getTotalCount(): int\n    {\n\t\treturn (int)floor(4 * M_PI * (($this->width / 2) + 1) * (($this->height / 2) + 1) * (($this->depth / 2) + 1) / 3);\n    }\n\n    public static function getName(): string\n    {\n        return \"Ellipsoid\";\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/shape/Pyramid.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\selection\\shape;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockLegacyIds;\nuse pocketmine\\math\\AxisAlignedBB;\nuse pocketmine\\math\\Vector2;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nclass Pyramid extends Shape\n{\n\t/** @var int */\n\tpublic $width = 5;\n\t/** @var int */\n\tpublic $height = 5;\n\t/** @var int */\n\tpublic $depth = 5;\n\t/** @var bool */\n\tpublic $flipped = false;\n\n\t/**\n\t * Pyramid constructor.\n\t * @param Vector3 $pasteVector\n\t * @param int $width\n\t * @param int $height\n\t * @param int $depth\n\t * @param bool $flipped\n\t */\n\tpublic function __construct(Vector3 $pasteVector, int $width, int $height, int $depth, bool $flipped = false)\n    {\n        $this->pasteVector = $pasteVector;\n        $this->width = $width;\n        $this->height = $height;\n        $this->depth = $depth;\n        $this->flipped = $flipped;\n    }\n\n    /**\n\t * Returns the blocks by their actual position\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param Block[] $filterblocks If not empty, applying a filter on the block list\n\t * @param int $flags\n\t * @return Generator|Block[]\n\t * @throws Exception\n\t */\n    public function getBlocks($manager, array $filterblocks = [], int $flags = API::FLAG_BASE): Generator\n    {\n\t\t$this->validateChunkManager($manager);\n\t\t$reduceXPerLayer = -($this->width / $this->height);\n\t\t$reduceZPerLayer = -($this->depth / $this->height);\n\t\t$centerVec2 = new Vector2($this->getPasteVector()->getX(), $this->getPasteVector()->getZ());\n\t\tfor ($x = (int)floor($centerVec2->x - $this->width / 2 - 1); $x <= floor($centerVec2->x + $this->width / 2 + 1); $x++) {\n\t\t\tfor ($y = (int)floor($this->getPasteVector()->y), $ry = 0; $y < floor($this->getPasteVector()->y + $this->height); $y++, $ry++) {\n\t\t\t\tfor ($z = (int)floor($centerVec2->y - $this->depth / 2 - 1); $z <= floor($centerVec2->y + $this->depth / 2 + 1); $z++) {\n\t\t\t\t\t$vec2 = new Vector2($x, $z);\n\t\t\t\t\t$vec3 = new Vector3($x, $y, $z);\n\t\t\t\t\tif ($this->flipped) {\n\t\t\t\t\t\t$radiusLayerX = ($this->width + $reduceXPerLayer * ($this->height - $ry)) / 2;\n\t\t\t\t\t\t$radiusLayerZ = ($this->depth + $reduceZPerLayer * ($this->height - $ry)) / 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$radiusLayerX = ($this->width + $reduceXPerLayer * $ry) / 2;\n\t\t\t\t\t\t$radiusLayerZ = ($this->depth + $reduceZPerLayer * $ry) / 2;\n\t\t\t\t\t}\n\t\t\t\t\t//TODO hollow\n\t\t\t\t\tif (floor(abs($centerVec2->x - $vec2->x)) >= $radiusLayerX || floor(abs($centerVec2->y - $vec2->y)) >= $radiusLayerZ)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t$block = API::setComponents($manager->getBlockAt($vec3->getFloorX(), $vec3->getFloorY(), $vec3->getFloorZ()), (int)$vec3->x, (int)$vec3->y, (int)$vec3->z);\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_BLOCKS) && $block->getId() !== BlockLegacyIds::AIR) continue;\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_AIR) && $block->getId() === BlockLegacyIds::AIR) continue;\n\n\t\t\t\t\tif ($block->getPos()->y >= World::Y_MAX || $block->getPos()->y < 0) continue;//TODO fuufufufuuu\n\t\t\t\t\tif (empty($filterblocks)) yield $block;\n\t\t\t\t\telse {\n\t\t\t\t\t\tforeach ($filterblocks as $filterblock) {\n\t\t\t\t\t\t\tif (($block->getId() === $filterblock->getId()) && ((API::hasFlag($flags, API::FLAG_VARIANT) && $block->getIdInfo()->getVariant() === $filterblock->getIdInfo()->getVariant()) || (!API::hasFlag($flags, API::FLAG_VARIANT) && ($block->getMeta() === $filterblock->getMeta() || API::hasFlag($flags, API::FLAG_KEEP_META)))))\n\t\t\t\t\t\t\t\tyield $block;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n            }\n        }\n    }\n\n\t/**\n\t * Returns a flat layer of all included x z positions in selection\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param int $flags\n\t * @return Generator|Vector2[]\n\t * @throws Exception\n\t */\n    public function getLayer($manager, int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\t$centerVec2 = new Vector2($this->getPasteVector()->getX(), $this->getPasteVector()->getZ());\n\t\tfor ($x = (int)floor($centerVec2->x - $this->width / 2 - 1); $x <= floor($centerVec2->x + $this->width / 2 + 1); $x++) {\n\t\t\tfor ($z = (int)floor($centerVec2->y - $this->depth / 2 - 1); $z <= floor($centerVec2->y + $this->depth / 2 + 1); $z++) {\n\t\t\t\t//TODO hollow\n\t\t\t\tyield new Vector2($x, $z);\n\t\t\t}\n\t\t}\n\t}\n\n    /**\n     * @param World|AsyncChunkManager $manager\n     * @return string[] fastSerialized chunks\n     * @throws Exception\n     */\n    public function getTouchedChunks($manager): array\n    {//TODO optimize to remove \"corner\" chunks\n\t\t$this->validateChunkManager($manager);\n\t\t$maxX = ($this->getMaxVec3()->x + 1) >> 4;\n\t\t$minX = $this->getMinVec3()->x >> 4;\n\t\t$maxZ = ($this->getMaxVec3()->z + 1) >> 4;\n\t\t$minZ = $this->getMinVec3()->z >> 4;\n\t\t$touchedChunks = [];\n\t\tfor ($x = $minX; $x <= $maxX; $x++) {\n\t\t\tfor ($z = $minZ; $z <= $maxZ; $z++) {\n\t\t\t\t$chunk = $manager->getChunk($x, $z);\n\t\t\t\tif ($chunk === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tprint \"Touched Chunk at: $x:$z\" . PHP_EOL;\n\t\t\t\t$touchedChunks[World::chunkHash($x, $z)] = FastChunkSerializer::serialize($chunk);\n\t\t\t}\n        }\n        print \"Touched chunks count: \" . count($touchedChunks) . PHP_EOL;\n        return $touchedChunks;\n    }\n\n    public function getAABB(): AxisAlignedBB\n    {\n        return new AxisAlignedBB(\n            floor($this->pasteVector->x - $this->width / 2),\n            $this->pasteVector->y,\n            floor($this->pasteVector->z - $this->depth / 2),\n            -1 + floor($this->pasteVector->x - $this->width / 2) + $this->width,\n            -1 + $this->pasteVector->y + $this->height,\n            -1 + floor($this->pasteVector->z - $this->depth / 2) + $this->depth\n        );\n    }\n\n    public function getTotalCount(): int\n    {\n        return (int)ceil((1 / 3) * ($this->width * $this->depth) * $this->height);\n    }\n\n    public static function getName(): string\n    {\n        return \"Pyramid\";\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/shape/Shape.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\selection\\shape;\n\nuse Exception;\nuse Generator;\nuse InvalidArgumentException;\nuse pocketmine\\block\\Block;\nuse pocketmine\\math\\AxisAlignedBB;\nuse pocketmine\\math\\Vector2;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\ChunkManager;\nuse pocketmine\\world\\format\\Chunk;\nuse pocketmine\\world\\World;\nuse Serializable;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nabstract class Shape implements Serializable\n{\n\t/** @var null|Vector3 */\n\tpublic $pasteVector;\n\n\tpublic function getPasteVector(): ?Vector3\n\t{\n\t\treturn $this->pasteVector;\n\t}\n\n\tpublic function setPasteVector(Vector3 $pasteVector): void\n\t{\n\t\t$this->pasteVector = $pasteVector->asVector3();\n\t}\n\n    /**\n     * Creates a chunk manager used for async editing\n     * @param Chunk[] $chunks\n     * @return AsyncChunkManager\n     */\n    public static function getChunkManager(array $chunks): AsyncChunkManager\n    {\n\t\t$manager = new AsyncChunkManager();\n\t\tforeach ($chunks as $hash => $chunk) {\n\t\t\tWorld::getXZ($hash, $chunkX, $chunkZ);\n\t\t\t$manager->setChunk($chunkX, $chunkZ, $chunk);\n\t\t}\n\t\treturn $manager;\n\t}\n\n    /**\n     * @param mixed $manager\n     * @throws InvalidArgumentException\n     */\n    public function validateChunkManager($manager): void\n    {\n        if (!$manager instanceof World && !$manager instanceof AsyncChunkManager) throw new InvalidArgumentException(get_class($manager) . \" is not an instance of World or AsyncChunkManager\");\n    }\n\n    abstract public function getTotalCount(): int;\n\n    /**\n\t * Returns the blocks by their actual position\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param Block[] $filterblocks If not empty, applying a filter on the block list\n\t * @param int $flags\n\t * @return Generator|Block[]\n\t * @throws Exception\n\t */\n    abstract public function getBlocks($manager, array $filterblocks = [], int $flags = API::FLAG_BASE): Generator;\n\n\t/**\n\t * Returns a flat layer of all included x z positions in selection\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param int $flags\n\t * @return Generator|Vector2[]\n\t * @throws Exception\n\t */\n    abstract public function getLayer($manager, int $flags = API::FLAG_BASE): Generator;\n\n    /**\n     * @param ChunkManager $manager\n     * @return string[] fastSerialized chunks\n     * @throws Exception\n     */\n    abstract public function getTouchedChunks(ChunkManager $manager): array;\n\n    abstract public function getAABB(): AxisAlignedBB;\n\n    /**\n     * @return Vector3\n     */\n    public function getMinVec3(): Vector3\n    {\n        return new Vector3($this->getAABB()->minX, $this->getAABB()->minY, $this->getAABB()->minZ);\n    }\n\n    /**\n     * @return Vector3\n     */\n    public function getMaxVec3(): Vector3\n    {\n        return new Vector3($this->getAABB()->maxX, $this->getAABB()->maxY, $this->getAABB()->maxZ);\n    }\n\n    abstract public static function getName(): string;\n\n    public function getShapeProperties(): array\n    {\n\t\treturn array_diff(get_object_vars($this), get_class_vars(__CLASS__));\n    }\n\n    /**\n     * String representation of object\n     * @link http://php.net/manual/en/serializable.serialize.php\n     * @return string the string representation of the object or null\n     * @since 5.1.0\n     */\n    public function serialize()\n    {\n        return serialize((array)$this);\n    }\n\n    /**\n\t * Constructs the object\n\t * @link http://php.net/manual/en/serializable.unserialize.php\n\t * @param string $serialized <p>\n\t * The string representation of the object.\n\t * </p>\n\t * @return void\n\t * @since 5.1.0\n\t * @noinspection PhpMissingParamTypeInspection\n\t */\n    public function unserialize($serialized)\n    {\n\t\t$unserialize = unserialize($serialized/*, ['allowed_classes' => [__CLASS__]]*/);//TODO test pm4\n\t\tarray_walk($unserialize, function ($value, $key) {\n\t\t\t$this->$key = $value;\n\t\t});\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/shape/ShapeRegistry.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\selection\\shape;\n\nuse xenialdan\\MagicWE2\\exception\\ShapeNotFoundException;\n\nclass ShapeRegistry//todo use SingletonTrait\n{\n\t/** @var string[] */\n\tprivate static $shapes = [];\n\n\tpublic const CUBOID = \"Cuboid\";\n\tpublic const CUBE = \"Cube\";\n\tpublic const CUSTOM = \"Custom\";\n\tpublic const CYLINDER = \"Cylinder\";\n\tpublic const SPHERE = \"Sphere\";\n\tpublic const CONE = \"Cone\";\n\tpublic const PYRAMID = \"Pyramid\";\n\tpublic const ELLIPSOID = \"Ellipsoid\";\n\n    public function __construct()\n    {\n        self::registerShape(self::SPHERE, Sphere::class);\n        self::registerShape(self::CUBE, Cube::class);\n        self::registerShape(self::CUBOID, Cuboid::class);\n        self::registerShape(self::CYLINDER, Cylinder::class);\n        self::registerShape(self::CONE, Cone::class);\n        self::registerShape(self::PYRAMID, Pyramid::class);\n        self::registerShape(self::ELLIPSOID, Ellipsoid::class);\n        self::registerShape(self::CUSTOM, Custom::class);\n    }\n\n    public static function registerShape(string $name, string $class): void\n    {\n        self::$shapes[$name] = $class;\n    }\n\n    /**\n     * @return array\n     */\n    public static function getShapes(): array\n    {\n        return self::$shapes;\n    }\n\n    /**\n     * @param string $name\n     * @return string\n     * @throws ShapeNotFoundException\n     */\n    public static function getShape(string $name): string\n    {\n        if (isset(self::$shapes[$name])) return self::$shapes[$name];\n        throw new ShapeNotFoundException(\"Shape $name not found\");\n    }\n\n    /**\n     * @param string $shapeClass\n     * @return string\n     * @throws ShapeNotFoundException\n     */\n    public static function getShapeName(string $shapeClass): string\n    {\n        $names = array_flip(self::$shapes);\n        if (isset($names[$shapeClass])) return $names[$shapeClass];\n        throw new ShapeNotFoundException(\"Shape $shapeClass not found\");\n    }\n\n    public static function getDefaultShapeProperties(string $className): array\n    {\n        return array_diff_key(get_class_vars($className), get_class_vars(Shape::class));\n    }\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/selection/shape/Sphere.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\selection\\shape;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockLegacyIds;\nuse pocketmine\\math\\AxisAlignedBB;\nuse pocketmine\\math\\Vector2;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nclass Sphere extends Shape\n{\n\t/** @var int */\n\tpublic $diameter = 5;\n\n\t/**\n\t * Sphere constructor.\n\t * @param Vector3 $pasteVector\n\t * @param int $diameter\n\t */\n\tpublic function __construct(Vector3 $pasteVector, int $diameter)\n\t{\n\t\t$this->pasteVector = $pasteVector;\n\t\t$this->diameter = $diameter;\n\t}\n\n\t/**\n\t * Returns the blocks by their actual position\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param Block[] $filterblocks If not empty, applying a filter on the block list\n\t * @param int $flags\n\t * @return Generator|Block[]\n\t * @throws Exception\n\t */\n\tpublic function getBlocks($manager, array $filterblocks = [], int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\tfor ($x = (int)floor($this->pasteVector->x - $this->diameter / 2 - 1); $x <= floor($this->pasteVector->x + $this->diameter / 2 + 1); $x++) {\n\t\t\tfor ($y = (int)floor($this->pasteVector->y - $this->diameter / 2 - 1); $y <= floor($this->pasteVector->y + $this->diameter / 2 + 1); $y++) {\n\t\t\t\tfor ($z = (int)floor($this->pasteVector->z - $this->diameter / 2 - 1); $z <= floor($this->pasteVector->z + $this->diameter / 2 + 1); $z++) {\n\t\t\t\t\t$vec3 = new Vector3($x, $y, $z);\n\t\t\t\t\tif ($vec3->distanceSquared($this->getPasteVector()) > (($this->diameter / 2) ** 2) || (API::hasFlag($flags, API::FLAG_HOLLOW) && $vec3->distanceSquared($this->getPasteVector()) <= ((($this->diameter / 2) - 1) ** 2)))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t$block = API::setComponents($manager->getBlockAt($vec3->getFloorX(), $vec3->getFloorY(), $vec3->getFloorZ()), (int)$vec3->x, (int)$vec3->y, (int)$vec3->z);\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_BLOCKS) && $block->getId() !== BlockLegacyIds::AIR) continue;\n\t\t\t\t\tif (API::hasFlag($flags, API::FLAG_KEEP_AIR) && $block->getId() === BlockLegacyIds::AIR) continue;\n\n\t\t\t\t\tif ($block->getPos()->y >= World::Y_MAX || $block->getPos()->y < 0) continue;//TODO fufufufuuu\n\t\t\t\t\tif (empty($filterblocks)) yield $block;\n\t\t\t\t\telse {\n\t\t\t\t\t\tforeach ($filterblocks as $filterblock) {\n\t\t\t\t\t\t\tif (($block->getId() === $filterblock->getId()) && ((API::hasFlag($flags, API::FLAG_VARIANT) && $block->getIdInfo()->getVariant() === $filterblock->getIdInfo()->getVariant()) || (!API::hasFlag($flags, API::FLAG_VARIANT) && ($block->getMeta() === $filterblock->getMeta() || API::hasFlag($flags, API::FLAG_KEEP_META)))))\n\t\t\t\t\t\t\t\tyield $block;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Returns a flat layer of all included x z positions in selection\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param int $flags\n\t * @return Generator|Vector2[]\n\t * @throws Exception\n\t */\n\tpublic function getLayer($manager, int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\t$centerVec2 = new Vector2($this->getPasteVector()->getX(), $this->getPasteVector()->getZ());\n\t\tfor ($x = (int)floor($centerVec2->x - $this->diameter / 2 - 1); $x <= floor($centerVec2->x + $this->diameter / 2 + 1); $x++) {\n\t\t\tfor ($z = (int)floor($centerVec2->y - $this->diameter / 2 - 1); $z <= floor($centerVec2->y + $this->diameter / 2 + 1); $z++) {\n\t\t\t\t$vec2 = new Vector2($x, $z);\n\t\t\t\tif ($vec2->distanceSquared($centerVec2) > (($this->diameter / 2) ** 2) || ((API::hasFlag($flags, API::FLAG_HOLLOW) && $vec2->distanceSquared($centerVec2) <= ((($this->diameter / 2) - 1) ** 2))))\n\t\t\t\t\tcontinue;\n\t\t\t\tyield $vec2;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param World|AsyncChunkManager $manager\n\t * @return string[] fastSerialized chunks\n\t * @throws Exception\n\t */\n\tpublic function getTouchedChunks($manager): array\n\t{//TODO optimize to remove \"corner\" chunks\n\t\t$this->validateChunkManager($manager);\n\t\t$maxX = ($this->getMaxVec3()->x + 1) >> 4;\n\t\t$minX = $this->getMinVec3()->x >> 4;\n\t\t$maxZ = ($this->getMaxVec3()->z + 1) >> 4;\n\t\t$minZ = $this->getMinVec3()->z >> 4;\n\t\t$touchedChunks = [];\n\t\tfor ($x = $minX; $x <= $maxX; $x++) {\n\t\t\tfor ($z = $minZ; $z <= $maxZ; $z++) {\n\t\t\t\t$chunk = $manager->getChunk($x, $z);\n\t\t\t\tif ($chunk === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tprint \"Touched Chunk at: $x:$z\" . PHP_EOL;\n\t\t\t\t$touchedChunks[World::chunkHash($x, $z)] = FastChunkSerializer::serialize($chunk);\n\t\t\t}\n\t\t}\n\t\tprint \"Touched chunks count: \" . count($touchedChunks) . PHP_EOL;\n\t\treturn $touchedChunks;\n\t}\n\n\tpublic function getAABB(): AxisAlignedBB\n\t{\n\t\treturn new AxisAlignedBB(\n\t\t\tfloor($this->pasteVector->x - $this->diameter / 2),\n\t\t\t$this->pasteVector->y,\n\t\t\tfloor($this->pasteVector->z - $this->diameter / 2),\n\t\t\t-1 + floor($this->pasteVector->x - $this->diameter / 2) + $this->diameter,\n\t\t\t-1 + $this->pasteVector->y + $this->diameter,\n\t\t\t-1 + floor($this->pasteVector->z - $this->diameter / 2) + $this->diameter\n\t\t);\n\t}\n\n\tpublic function getTotalCount(): int\n\t{\n\t\treturn (int)ceil((4 / 3) * M_PI * (($this->diameter / 2) ** 3));\n\t}\n\n\tpublic static function getName(): string\n\t{\n\t\treturn \"Sphere\";\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/session/PluginSession.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\session;\n\nuse Ds\\Deque;\nuse pocketmine\\plugin\\Plugin;\nuse pocketmine\\uuid\\UUID;\nuse xenialdan\\MagicWE2\\Loader;\n\nclass PluginSession extends Session\n{\n\t/** @var Plugin */\n\tprivate $plugin;\n\n\tpublic function __construct(Plugin $plugin)\n\t{\n\t\t$this->plugin = $plugin;\n\t\t$this->setUUID(UUID::fromRandom());\n\t\t$this->undoHistory = new Deque();\n\t\t$this->redoHistory = new Deque();\n\t}\n\n\tpublic function getPlugin(): Plugin\n    {\n        return $this->plugin;\n    }\n\n    public function __toString()\n    {\n        return __CLASS__ .\n            \" UUID: \" . $this->getUUID()->__toString() .\n            \" Plugin: \" . $this->getPlugin()->getName() .\n            \" Selections: \" . count($this->getSelections()) .\n            \" Latest: \" . $this->getLatestSelectionUUID() .\n            \" Clipboards: \" . count($this->getClipboards()) .\n            \" Current: \" . $this->getCurrentClipboardIndex() .\n            \" Undos: \" . count($this->undoHistory) .\n            \" Redos: \" . count($this->redoHistory);\n    }\n\n    public function sendMessage(string $message): void\n    {\n        $this->plugin->getLogger()->info(Loader::PREFIX . $message);\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/session/Session.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\session;\n\nuse Ds\\Deque;\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\lang\\Language;\nuse pocketmine\\Server;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\World;\nuse RuntimeException;\nuse xenialdan\\MagicWE2\\clipboard\\Clipboard;\nuse xenialdan\\MagicWE2\\clipboard\\RevertClipboard;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\task\\AsyncRevertTask;\n\nabstract class Session\n{\n\tpublic const MAX_CLIPBOARDS = 5;\n\tpublic const MAX_HISTORY = 32;\n\t/** @var UUID */\n\tprivate $uuid;\n\t//todo change to a list of objects with a pointer of the latest action\n\t/** @var Selection[] */\n\tprivate $selections = [];\n\t/** @var UUID|null */\n\tprivate $latestselection;\n\t//todo change to a list of objects with a pointer of the latest action\n\t/** @var Clipboard[] */\n\tprivate $clipboards = [];\n\t/** @var int */\n\tprivate $currentClipboard = -1;\n\t/** @var Deque<RevertClipboard> */\n\tpublic $undoHistory;\n\t/** @var Deque<RevertClipboard> */\n\tpublic $redoHistory;\n\n\t/**\n\t * @return UUID\n\t */\n\tpublic function getUUID(): UUID\n\t{\n\t\treturn $this->uuid;\n\t}\n\n\t/**\n     * @param UUID $uuid\n\t */\n\tpublic function setUUID(UUID $uuid): void\n\t{\n\t\t$this->uuid = $uuid;\n\t}\n\n\t/**\n\t * @param Selection $selection\n\t * @return null|Selection\n\t */\n\tpublic function &addSelection(Selection $selection): ?Selection\n\t{\n\t\t$this->selections[$selection->getUUID()->toString()] = $selection;\n\t\t$this->setLatestSelectionUUID($selection->getUUID());\n\t\t$selection = $this->getLatestSelection();\n\t\treturn $selection;\n\t}\n\n\t/**\n\t * @param UUID $uuid\n\t * @return null|Selection\n\t */\n\tpublic function &getSelectionByUUID(UUID $uuid): ?Selection\n\t{\n\t\t$selection = $this->selections[$uuid->toString()] ?? null;\n\t\treturn $selection;\n\t}\n\n\t/**\n\t * @param string $uuid\n\t * @return null|Selection\n\t */\n\tpublic function &getSelectionByString(string $uuid): ?Selection\n\t{\n\t\t$selection = $this->selections[$uuid] ?? null;\n\t\treturn $selection;\n\t}\n\n\t/**\n\t * @return null|Selection\n\t */\n\tpublic function &getLatestSelection(): ?Selection\n\t{\n\t\t$latestSelectionUUID = $this->getLatestSelectionUUID();\n\t\tif (is_null($latestSelectionUUID)) {\n\t\t\t$selection = null;\n\t\t\treturn $selection;\n\t\t}\n\t\t$selection = $this->selections[$latestSelectionUUID->toString()] ?? null;\n\t\treturn $selection;\n\t}\n\n\t/**\n     * @return Selection[]\n     */\n    public function getSelections(): array\n    {\n        return $this->selections;\n    }\n\n    /**\n     * @param mixed $selections\n     */\n    public function setSelections($selections): void\n    {\n        $this->selections = $selections;\n    }\n\n    /**\n     * @return UUID|null\n     */\n    public function getLatestSelectionUUID(): ?UUID\n    {\n        return $this->latestselection;\n    }\n\n    /**\n     * @param UUID $latestselection\n     */\n    public function setLatestSelectionUUID(UUID $latestselection): void\n    {\n        $this->latestselection = $latestselection;\n    }\n\n    /**\n     * @return int\n     */\n    public function getCurrentClipboardIndex(): int\n    {\n        return $this->currentClipboard;\n    }\n\n    /**\n     * @return null|Clipboard\n     */\n    public function getCurrentClipboard(): ?Clipboard\n    {\n        return $this->clipboards[$this->currentClipboard] ?? null;\n    }\n\n    /**\n     * @param string $name\n     * @return null|Clipboard\n     */\n    public function getClipboardByName(string $name): ?Clipboard\n    {\n        foreach ($this->clipboards as $clipboard) {\n            if ($clipboard->getCustomName() === $name) return $clipboard;\n        }\n        return null;\n    }\n\n    /**\n     * @param int $id\n     * @return null|Clipboard\n     */\n    public function getClipboardById(int $id): ?Clipboard\n    {\n        return $this->clipboards[$id] ?? null;\n    }\n\n    /**\n     * TODO\n     * @return Clipboard[]\n     */\n    public function getClipboards(): array\n    {\n        return $this->clipboards;\n    }\n\n    /**\n     * TODO\n     * @param Clipboard[] $clipboards\n     * @return bool\n     */\n    public function setClipboards(array $clipboards): bool\n    {\n        $this->clipboards = $clipboards;\n        return true;\n    }\n\n    /**\n     * @param Clipboard $clipboard\n     * @param bool $setAsCurrent\n     * @return int The index of the clipboard\n     */\n    public function addClipboard(Clipboard $clipboard, bool $setAsCurrent = true): int\n    {\n        $amount = array_push($this->clipboards, $clipboard);\n        if ($amount > self::MAX_CLIPBOARDS) array_shift($this->clipboards);\n        $i = array_search($clipboard, $this->clipboards, true);\n        if ($i !== false) {\n            if ($setAsCurrent) $this->currentClipboard = (int)$i;\n            return (int)$i;\n        }\n        return -1;\n    }\n\n    /**\n     * @param RevertClipboard $revertClipboard\n     */\n    public function addRevert(RevertClipboard $revertClipboard): void\n    {\n        $this->redoHistory->clear();\n        $this->undoHistory->push($revertClipboard);\n        while ($this->undoHistory->count() > self::MAX_HISTORY) {\n            $this->undoHistory->shift();\n        }\n    }\n\n    /**\n     * @throws Exception\n     */\n    public function undo(): void\n    {\n        if ($this->undoHistory->count() === 0) {\n            $this->sendMessage(TF::RED . $this->getLanguage()->translateString('session.undo.none'));\n            return;\n        }\n        /** @var RevertClipboard $revertClipboard */\n        $revertClipboard = $this->undoHistory->pop();\n\t\t$world = $revertClipboard->getWorld();\n        foreach ($revertClipboard->chunks as $hash => $chunk) {\n\t\t\tWorld::getXZ($hash, $x, $z);\n\t\t\t$revertClipboard->chunks[$hash] = $world->getChunk($x, $z);\n\t\t}\n        Server::getInstance()->getAsyncPool()->submitTask(new AsyncRevertTask($this->getUUID(), $revertClipboard, AsyncRevertTask::TYPE_UNDO));\n        $this->sendMessage(TF::GREEN . $this->getLanguage()->translateString('session.undo.left', [count($this->undoHistory)]));\n    }\n\n    /**\n     * @throws InvalidArgumentException\n     * @throws RuntimeException\n     */\n    public function redo(): void\n    {\n        if ($this->redoHistory->count() === 0) {\n            $this->sendMessage(TF::RED . $this->getLanguage()->translateString('session.redo.none'));\n            return;\n        }\n        /** @var RevertClipboard $revertClipboard */\n        $revertClipboard = $this->redoHistory->pop();\n        Server::getInstance()->getAsyncPool()->submitTask(new AsyncRevertTask($this->getUUID(), $revertClipboard, AsyncRevertTask::TYPE_REDO));\n        $this->sendMessage(TF::GREEN . $this->getLanguage()->translateString('session.redo.left', [count($this->redoHistory)]));\n    }\n\n    public function clearHistory(): void\n    {\n        $this->undoHistory->clear();\n        $this->redoHistory->clear();\n    }\n\n    public function clearClipboard(): void\n    {\n        $this->setClipboards([]);\n        $this->currentClipboard = -1;\n    }\n\n    /**\n     * @return Language\n     */\n    public function getLanguage(): Language\n    {\n        return Loader::getInstance()->getLanguage();\n    }\n\n\tabstract public function sendMessage(string $message): void;\n\n    public function __toString()\n    {\n        return __CLASS__ .\n            \" UUID: \" . $this->getUUID()->__toString() .\n            \" Selections: \" . count($this->getSelections()) .\n            \" Latest: \" . $this->getLatestSelectionUUID() .\n            \" Clipboards: \" . count($this->getClipboards()) .\n            \" Current: \" . $this->getCurrentClipboardIndex() .\n            \" Undos: \" . count($this->undoHistory) .\n            \" Redos: \" . count($this->redoHistory);\n    }\n\n    /*\n     * TODO list:\n     * session storing/recovering from file/cleanup if too old\n     * session items\n     * recover session items + commands to get back already created/configured items/tool/brushes\n     * proper multi-selection-usage\n     * setState/getState on big actions, status bar/boss bar/texts/titles/popups\n     * inspect other player's sessions\n     * destroy session if owning player lost permission/gets banned\n     * optimise destroySession/__destruct of sessions\n     * clipboard selection (renaming?)\n     */\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/session/UserSession.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\session;\n\nuse Ds\\Deque;\nuse Exception;\nuse InvalidArgumentException;\nuse jackmd\\scorefactory\\ScoreFactory;\nuse JsonException;\nuse JsonSerializable;\nuse pocketmine\\item\\Item;\nuse pocketmine\\lang\\Language;\nuse pocketmine\\lang\\LanguageNotFoundException;\nuse pocketmine\\nbt\\tag\\CompoundTag;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse TypeError;\nuse xenialdan\\apibossbar\\BossBar;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\ActionNotFoundException;\nuse xenialdan\\MagicWE2\\exception\\BrushException;\nuse xenialdan\\MagicWE2\\exception\\ShapeNotFoundException;\nuse xenialdan\\MagicWE2\\helper\\Scoreboard;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\tool\\Brush;\nuse xenialdan\\MagicWE2\\tool\\BrushProperties;\n\nclass UserSession extends Session implements JsonSerializable //TODO use JsonMapper\n{\n\t/** @var Player|null */\n\tprivate $player;\n\t/** @var BossBar */\n\tprivate $bossBar;\n\t/** @var Scoreboard|null */\n\tpublic $sidebar;\n\t/** @var bool */\n\tprivate $wandEnabled = true;\n\t/** @var bool */\n\tprivate $debugToolEnabled = true;\n\t/** @var bool */\n\tprivate $wailaEnabled = true;\n\t/** @var bool */\n\tprivate $sidebarEnabled = true;//TODO settings/commands\n\t/** @var Brush[] */\n\tprivate $brushes = [];\n\t/** @var Language|null */\n\tprivate $lang;\n\n\tpublic function __construct(Player $player)\n\t{\n\t\t$this->setPlayer($player);\n\t\t$this->cleanupInventory();\n\t\t$this->setUUID($player->getUniqueId());\n\t\t$this->bossBar = (new BossBar())->addPlayer($player);\n\t\t$this->bossBar->hideFrom([$player]);\n\t\tif (Loader::hasScoreboard()) {\n\t\t\t$this->sidebar = new Scoreboard();\n\t\t}\n\t\t$this->undoHistory = new Deque();\n\t\t$this->redoHistory = new Deque();\n\t\ttry {\n\t\t\tif (is_null($this->lang))\n\t\t\t\t$this->lang = new Language(Language::FALLBACK_LANGUAGE, Loader::getInstance()->getLanguageFolder());\n\t\t} catch (LanguageNotFoundException $e) {\n\t\t}\n\t\tLoader::getInstance()->getLogger()->debug(\"Created new session for player {$player->getName()}\");\n\t}\n\n\tpublic function __destruct()\n\t{\n\t\tLoader::getInstance()->getLogger()->debug(\"Destructing session {$this->getUUID()} for user \" . $this->getPlayer()->getName());\n\t\t$this->bossBar->removeAllPlayers();\n\t\tif (Loader::hasScoreboard() && $this->sidebar !== null) {\n\t\t\tScoreFactory::removeScore($this->getPlayer());\n\t\t}\n\t}\n\n\t/**\n\t * @return Language\n\t */\n\tpublic function getLanguage(): Language\n\t{\n\t\treturn $this->lang;\n\t}\n\n\t/**\n\t * Set the language for the user. Uses iso639-2 language code\n\t * @param string $langShort iso639-2 conform language code (3 letter)\n\t * @throws LanguageNotFoundException\n\t */\n\tpublic function setLanguage(string $langShort): void\n\t{\n\t\t$langShort = strtolower($langShort);\n\t\tif (isset(Loader::getInstance()->getLanguageList()[$langShort])) {\n\t\t\t$this->lang = new Language($langShort, Loader::getInstance()->getLanguageFolder());\n\t\t\t$this->sendMessage(TF::GREEN . $this->getLanguage()->translateString(\"session.language.set\", [$this->getLanguage()->getName()]));\n\t\t} else {\n\t\t\t$this->lang = new Language(Language::FALLBACK_LANGUAGE, Loader::getInstance()->getLanguageFolder());\n\t\t\t$this->sendMessage(TF::RED . $this->getLanguage()->translateString(\"session.language.notfound\", [$langShort]));\n\t\t}\n\t}\n\n\t/**\n\t * @param null|Player $player\n\t */\n\tpublic function setPlayer(?Player $player): void\n\t{\n\t\t$this->player = $player;\n\t}\n\n\t/**\n\t * @return null|Player\n\t */\n\tpublic function getPlayer(): ?Player\n\t{\n\t\treturn $this->player;\n\t}\n\n\t/**\n\t * @return bool\n\t */\n\tpublic function isWandEnabled(): bool\n\t{\n\t\treturn $this->wandEnabled;\n\t}\n\n\t/**\n\t * @param bool $wandEnabled\n\t * @return string\n\t */\n\tpublic function setWandEnabled(bool $wandEnabled): string\n\t{\n\t\t$this->wandEnabled = $wandEnabled;\n\t\treturn Loader::PREFIX . $this->getLanguage()->translateString('tool.wand.setenabled', [($wandEnabled ? TF::GREEN . $this->getLanguage()->translateString('enabled') : TF::RED . $this->getLanguage()->translateString('disabled'))]);\n\t}\n\n\t/**\n\t * @return bool\n\t */\n\tpublic function isDebugToolEnabled(): bool\n\t{\n\t\treturn $this->debugToolEnabled;\n\t}\n\n\t/**\n\t * @param bool $debugToolEnabled\n\t * @return string\n\t */\n\tpublic function setDebugToolEnabled(bool $debugToolEnabled): string\n\t{\n\t\t$this->debugToolEnabled = $debugToolEnabled;\n\t\treturn Loader::PREFIX . $this->getLanguage()->translateString('tool.debug.setenabled', [($debugToolEnabled ? TF::GREEN . $this->getLanguage()->translateString('enabled') : TF::RED . $this->getLanguage()->translateString('disabled'))]);\n\t}\n\n\t/**\n\t * @return bool\n\t */\n\tpublic function isSidebarEnabled(): bool\n\t{\n\t\treturn $this->sidebarEnabled;\n\t}\n\n\t/**\n\t * @param bool $sidebarEnabled\n\t * @return string\n\t */\n\tpublic function setSidebarEnabled(bool $sidebarEnabled): string\n\t{\n\t\t$player = $this->getPlayer();\n\t\tif (!$player instanceof Player) return TF::RED . \"Session has no player\";\n\t\t$this->sidebarEnabled = $sidebarEnabled;\n\t\tif ($sidebarEnabled) {\n\t\t\t$this->sidebar->handleScoreboard($this);\n\t\t} else {\n\t\t\tScoreFactory::removeScore($player);\n\t\t}\n\t\treturn Loader::PREFIX . $this->getLanguage()->translateString('tool.sidebar.setenabled', [($sidebarEnabled ? TF::GREEN . $this->getLanguage()->translateString('enabled') : TF::RED . $this->getLanguage()->translateString('disabled'))]);\n\t}\n\n\t/**\n\t * @return bool\n\t */\n\tpublic function isWailaEnabled(): bool\n\t{\n\t\treturn $this->wailaEnabled;\n\t}\n\n\t/**\n\t * @param bool $wailaEnabled\n\t * @return string\n\t */\n\tpublic function setWailaEnabled(bool $wailaEnabled): string\n\t{\n\t\t$player = $this->getPlayer();\n\t\tif (!$player instanceof Player) return TF::RED . \"Session has no player\";\n\t\t$this->wailaEnabled = $wailaEnabled;\n\t\tif ($wailaEnabled) {\n\t\t\tLoader::getInstance()->wailaBossBar->showTo([$player]);\n\t\t} else {\n\t\t\tLoader::getInstance()->wailaBossBar->hideFrom([$player]);\n\t\t}\n\t\treturn Loader::PREFIX . $this->getLanguage()->translateString('tool.waila.setenabled', [($wailaEnabled ? TF::GREEN . $this->getLanguage()->translateString('enabled') : TF::RED . $this->getLanguage()->translateString('disabled'))]);\n\t}\n\n\t/**\n\t * @return BossBar\n\t */\n\tpublic function getBossBar(): BossBar\n\t{\n\t\treturn $this->bossBar;\n\t}\n\n\t/**\n\t * TODO exception for not a brush\n\t * @param Item $item\n\t * @return Brush\n\t * @throws Exception\n\t */\n\tpublic function getBrushFromItem(Item $item): Brush\n\t{\n\t\tif ((($entry = $item->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE_BRUSH))) instanceof CompoundTag) {\n\t\t\t$version = $entry->getInt(\"version\", 0);\n\t\t\tif ($version !== BrushProperties::VERSION) {\n\t\t\t\tthrow new BrushException(\"Brush can not be restored - version mismatch\");\n\t\t\t}\n\t\t\t/** @var BrushProperties $properties */\n\t\t\t$properties = json_decode($entry->getString(\"properties\"), false, 512, JSON_THROW_ON_ERROR);\n\t\t\t$uuid = UUID::fromString($properties->uuid);\n\t\t\t$brush = $this->getBrush($uuid);\n\t\t\tif ($brush instanceof Brush) {\n\t\t\t\treturn $brush;\n\t\t\t}\n\t\t\t$brush = new Brush($properties);\n\t\t\t$this->addBrush($brush);\n\t\t\treturn $brush;\n\t\t}\n\t\tthrow new BrushException(\"The item is not a valid brush!\");\n\t}\n\n\t/**\n\t * TODO exception for not a brush\n\t * @param UUID $uuid\n\t * @return null|Brush\n\t */\n\tpublic function getBrush(UUID $uuid): ?Brush\n\t{\n\t\treturn $this->brushes[$uuid->toString()] ?? null;\n\t}\n\n\t/**\n\t * TODO exception for not a brush\n\t * @param Brush $brush UUID will be set automatically\n\t * @return void\n\t */\n\tpublic function addBrush(Brush $brush): void\n\t{\n\t\t$this->brushes[$brush->properties->uuid] = $brush;\n\t\t$this->sendMessage($this->getLanguage()->translateString('session.brush.added', [$brush->getName()]));\n\t}\n\n\t/**\n\t * @param Brush $brush UUID will be set automatically\n\t * @param bool $delete If true, it will be removed from the session brushes\n\t * @return void\n\t */\n\tpublic function removeBrush(Brush $brush, bool $delete = false): void\n\t{\n\t\tif ($delete) unset($this->brushes[$brush->properties->uuid]);\n\t\tforeach ($this->getPlayer()->getInventory()->getContents() as $slot => $item) {\n\t\t\tif (($entry = $item->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE_BRUSH)) instanceof CompoundTag) {\n\t\t\t\tif ($entry->getString(\"id\") === $brush->properties->uuid) {\n\t\t\t\t\t$this->getPlayer()->getInventory()->clear($slot);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif ($delete) $this->sendMessage($this->getLanguage()->translateString('session.brush.deleted', [$brush->getName(), $brush->properties->uuid]));\n\t\telse $this->sendMessage($this->getLanguage()->translateString('session.brush.removed', [$brush->getName(), $brush->properties->uuid]));\n\t}\n\n\t/**\n\t * TODO exception for not a brush\n\t * @param Brush $brush UUID will be set automatically\n\t * @return void\n\t * @throws ActionNotFoundException\n\t * @throws InvalidArgumentException\n\t * @throws ShapeNotFoundException\n\t * @throws JsonException\n\t * @throws TypeError\n\t */\n\tpublic function replaceBrush(Brush $brush): void\n\t{\n\t\t$this->brushes[$brush->properties->uuid] = $brush;\n\t\t$new = $brush->toItem();\n\t\tforeach ($this->getPlayer()->getInventory()->getContents() as $slot => $item) {\n\t\t\tif (($entry = $item->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE_BRUSH)) instanceof CompoundTag) {\n\t\t\t\tif ($entry->getString(\"id\") === $brush->properties->uuid) {\n\t\t\t\t\t$this->getPlayer()->getInventory()->setItem($slot, $new);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @return Brush[]\n\t */\n\tpublic function getBrushes(): array\n\t{\n\t\treturn $this->brushes;\n\t}\n\n\tpublic function cleanupInventory(): void\n\t{\n\t\tforeach ($this->getPlayer()->getInventory()->getContents() as $slot => $item) {\n\t\t\t/** @var CompoundTag $entry */\n\t\t\tif (!is_null(($entry = $item->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE_BRUSH)))) {\n\t\t\t\t$this->getPlayer()->getInventory()->clear($slot);\n\t\t\t}\n\t\t\tif (!is_null(($entry = $item->getNamedTag()->getCompoundTag(API::TAG_MAGIC_WE)))) {\n\t\t\t\t$this->getPlayer()->getInventory()->clear($slot);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic function __toString()\n\t{\n\t\treturn __CLASS__ .\n\t\t\t\" UUID: \" . $this->getUUID()->__toString() .\n\t\t\t\" Player: \" . $this->getPlayer()->getName() .\n\t\t\t\" Wand tool enabled: \" . ($this->isWandEnabled() ? \"enabled\" : \"disabled\") .\n\t\t\t\" Debug tool enabled: \" . ($this->isDebugToolEnabled() ? \"enabled\" : \"disabled\") .\n\t\t\t\" WAILA enabled: \" . ($this->isWailaEnabled() ? \"enabled\" : \"disabled\") .\n\t\t\t\" Sidebar enabled: \" . ($this->sidebarEnabled ? \"enabled\" : \"disabled\") .\n\t\t\t\" BossBar: \" . $this->getBossBar()->entityId .\n\t\t\t\" Selections: \" . count($this->getSelections()) .\n\t\t\t\" Latest: \" . $this->getLatestSelectionUUID() .\n\t\t\t\" Clipboards: \" . count($this->getClipboards()) .\n\t\t\t\" Current: \" . $this->getCurrentClipboardIndex() .\n\t\t\t\" Undos: \" . count($this->undoHistory) .\n\t\t\t\" Redos: \" . count($this->redoHistory) .\n\t\t\t\" Brushes: \" . count($this->brushes);\n\t}\n\n\tpublic function sendMessage(string $message): void\n\t{\n\t\t$this->player->sendMessage(Loader::PREFIX . $message);\n\t}\n\n\t/**\n\t * Specify data which should be serialized to JSON\n\t * @link http://php.net/manual/en/jsonserializable.jsonserialize.php\n\t * @return mixed data which can be serialized by <b>json_encode</b>,\n\t * which is a value of any type other than a resource.\n\t * @since 5.4.0\n\t */\n\tpublic function jsonSerialize()\n\t{\n\t\treturn [\n\t\t\t\"uuid\" => $this->getUUID()->toString(),\n\t\t\t\"wandEnabled\" => $this->wandEnabled,\n\t\t\t\"debugToolEnabled\" => $this->debugToolEnabled,\n\t\t\t\"wailaEnabled\" => $this->wailaEnabled,\n\t\t\t\"sidebarEnabled\" => $this->sidebarEnabled,\n\t\t\t\"brushes\" => $this->brushes,\n\t\t\t\"latestSelection\" => $this->getLatestSelection(),\n\t\t\t\"currentClipboard\" => $this->getCurrentClipboard(),\n\t\t\t\"language\" => $this->getLanguage()->getLang()\n\t\t];\n\t}\n\n\tpublic function save(): void\n\t{\n\t\tfile_put_contents(Loader::getInstance()->getDataFolder() . \"sessions\" . DIRECTORY_SEPARATOR .\n\t\t\t$this->getPlayer()->getName() . \".json\",\n\t\t\tjson_encode($this, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT)\n\t\t);\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/AsyncActionTask.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\task;\n\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\format\\Chunk;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\clipboard\\RevertClipboard;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\selection\\shape\\Shape;\nuse xenialdan\\MagicWE2\\session\\UserSession;\nuse xenialdan\\MagicWE2\\task\\action\\TaskAction;\n\nclass AsyncActionTask extends MWEAsyncTask\n{\n    /*\n     * Intention:\n     * Shape: get blocks from a shape. Shape can contain options\n     * Filterblocks: filter out blocks that are not needed\n     * Action: action to run on the remaining blocks, return previous blocks\n     * Strings: Begin, completion, bossbar, other stuff can be in the action\n    */\n\n\t/** @var string */\n\tprivate $touchedChunks;\n\t/** @var string */\n\tprivate $selection;\n\t/** @var string */\n\tprivate $blockFilter;\n\t/** @var string */\n\tprivate $newBlocks;\n\t/** @var TaskAction */\n\tprivate $action;\n\n\t/**\n\t * AsyncActionTask constructor.\n\t * @param UUID $sessionUUID\n\t * @param Selection $selection\n\t * @param TaskAction $action\n\t * @param string[] $touchedChunks serialized chunks\n\t * @param string $newBlocks\n\t * @param string $blockFilter\n\t */\n    public function __construct(UUID $sessionUUID, Selection $selection, TaskAction $action, array $touchedChunks, string $newBlocks = \"\", string $blockFilter = \"\")\n    {\n        $this->start = microtime(true);\n        $this->sessionUUID = $sessionUUID->toString();\n        $this->selection = serialize($selection);\n        $this->action = $action;\n        $this->touchedChunks = serialize($touchedChunks);\n        $this->newBlocks = $newBlocks;\n        $this->blockFilter = $blockFilter;\n\n        try {\n            $session = SessionHelper::getSessionByUUID($sessionUUID);\n            if ($session instanceof UserSession) {\n                $player = $session->getPlayer();\n                /** @var Player $player */\n                $session->getBossBar()->showTo([$player]);\n                $session->getBossBar()->setTitle(\"Running {$action::getName()} action\");//TODO better string\n            }\n        } catch (SessionException $e) {\n            Loader::getInstance()->getLogger()->logException($e);\n        }\n    }\n\n    /**\n     * Actions to execute when run\n     *\n     * @return void\n     * @throws Exception\n     */\n    public function onRun(): void\n\t{\n\t\t$this->publishProgress(new Progress(0, \"Preparing {$this->action::getName()}\"));\n\n\t\t$touchedChunks = unserialize($this->touchedChunks/*, ['allowed_classes' => false]*/);\n\t\t$touchedChunks = array_map(static function ($chunk) {\n\t\t\treturn FastChunkSerializer::deserialize($chunk);\n\t\t}, $touchedChunks);\n\n\t\t$manager = Shape::getChunkManager($touchedChunks);\n\t\tunset($touchedChunks);\n\n\t\t/** @var Selection $selection */\n\t\t$selection = unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);\n\n\t\t$oldBlocks = new SingleClipboard($this->action->clipboardVector ?? new Vector3(0, 0, 0));//TODO Test if null V3 is ok //TODO test if the vector works\n\t\t$oldBlocks->selection = $selection;//TODO test. Needed to add this so that //paste works after //cut2\n\t\t#$oldBlocks = [];\n\t\t$messages = [];\n\t\t$error = false;\n\t\t$newBlocks = API::blockParser($this->newBlocks, $messages, $error);//TODO error handling\n\t\t$blockFilter = API::blockParser($this->blockFilter, $messages, $error);//TODO error handling\n\t\t/** @var Progress $progress */\n\t\tforeach ($this->action->execute($this->sessionUUID, $selection, $manager, $changed, $newBlocks, $blockFilter, $oldBlocks, $messages) as $progress) {\n\t\t\t$this->publishProgress($progress);\n\t\t}\n\n\t\t$resultChunks = $manager->getChunks();\n\t\t$resultChunks = array_filter($resultChunks, static function (Chunk $chunk) {\n\t\t\treturn $chunk->isDirty();\n\t\t});\n\t\t$this->setResult(compact(\"resultChunks\", \"oldBlocks\", \"changed\", \"messages\"));\n\t}\n\n\t/**\n\t * @throws InvalidArgumentException\n\t * @throws AssumptionFailedError\n\t * @throws Exception\n\t * @throws Exception\n\t */\n\tpublic function onCompletion(): void\n\t{\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID(UUID::fromString($this->sessionUUID));\n\t\t\tif ($session instanceof UserSession) $session->getBossBar()->hideFromAll();\n\t\t} catch (SessionException $e) {\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\t$session = null;\n\t\t}\n\t\t$result = $this->getResult();\n\t\t/** @var Chunk[] $resultChunks */\n\t\t$resultChunks = $result[\"resultChunks\"];\n\t\t$undoChunks = array_map(static function ($chunk) {\n\t\t\treturn FastChunkSerializer::deserialize($chunk);\n\t\t}, unserialize($this->touchedChunks/*, ['allowed_classes' => false]*/));//TODO test pm4\n\t\t/** @var SingleClipboard $oldBlocks *///TODO make sure changed everywhere\n\t\t$oldBlocks = $result[\"oldBlocks\"];\n\t\t//TODO Test this new behaviour!\n\t\t//TODO so here i turn SingleClipboard entries into the same $oldBlocks as before this commit\n\t\t$oldBlocksBlocks = [];\n\t\t$x = $y = $z = null;\n\t\tforeach ($oldBlocks->iterateEntries($x, $y, $z) as $entry) {\n\t\t\t$oldBlocksBlocks[] = API::setComponents($entry->toBlock(), (int)$x, (int)$y, (int)$z);//turn BlockEntry to blocks\n\t\t}\n\t\t$changed = $result[\"changed\"];\n\t\t/** @var Selection $selection */\n\t\t$selection = unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\t\t$totalCount = $selection->getShape()->getTotalCount();\n\t\t$world = $selection->getWorld();\n\t\tforeach ($resultChunks as $hash => $chunk) {\n\t\t\tWorld::getXZ($hash, $x, $z);\n\t\t\t$world->setChunk($x, $z, $chunk, false);\n\t\t}\n\t\tif (!is_null($session)) {\n\t\t\t$session->sendMessage(TF::GREEN . $session->getLanguage()->translateString($this->action->completionString, [\"name\" => trim($this->action->prefix . \" \" . $this->action::getName()), \"took\" => $this->generateTookString(), \"changed\" => $changed, \"total\" => $totalCount]));\n\t\t\tforeach ($result[\"messages\"] ?? [] as $message) $session->sendMessage($message);\n\t\t\tif ($this->action->addRevert)\n\t\t\t\t$session->addRevert(new RevertClipboard($selection->worldId, $undoChunks, self::multipleBlocksToData($oldBlocksBlocks)));\n\t\t\tif ($this->action->addClipboard)\n\t\t\t\t$session->addClipboard($oldBlocks);\n        }\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/AsyncClipboardActionTask.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\task;\n\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\BlockStatesParser;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\session\\UserSession;\nuse xenialdan\\MagicWE2\\task\\action\\ClipboardAction;\n\nclass AsyncClipboardActionTask extends MWEAsyncTask\n{\n\n\t/** @var string */\n\tprivate $selection;\n\t/** @var ClipboardAction */\n\tprivate $action;\n\t/** @var string */\n\tprivate $clipboard;\n\n\tprivate string $rotPath;\n\tprivate string $doorRotPath;\n\n\t/**\n\t * AsyncClipboardActionTask constructor.\n\t * @param UUID $sessionUUID\n\t * @param Selection $selection\n\t * @param ClipboardAction $action\n\t * @param SingleClipboard $clipboard\n\t */\n\tpublic function __construct(UUID $sessionUUID, Selection $selection, ClipboardAction $action, SingleClipboard $clipboard)\n\t{\n\t\t$this->start = microtime(true);\n\t\t$this->sessionUUID = $sessionUUID->toString();\n\t\t$this->selection = serialize($selection);//TODO check if needed, $clipboard already holds the selection\n\t\t$this->clipboard = serialize($clipboard);//TODO check if this even needs to be serialized\n\t\t$this->action = $action;\n\n\t\t$this->rotPath = Loader::getRotFlipPath();\n\t\t$this->doorRotPath = Loader::getDoorRotFlipPath();\n\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID($sessionUUID);\n\t\t\tif ($session instanceof UserSession) {\n\t\t\t\t$player = $session->getPlayer();\n\t\t\t\t/** @var Player $player */\n\t\t\t\t$session->getBossBar()->showTo([$player]);\n\t\t\t\t$session->getBossBar()->setTitle(\"Running {$action::getName()} clipboard action\");//TODO better string\n\t\t\t}\n\t\t} catch (SessionException $e) {\n            Loader::getInstance()->getLogger()->logException($e);\n        }\n    }\n\n    /**\n     * Actions to execute when run\n     *\n     * @return void\n     * @throws Exception\n     */\n    public function onRun(): void\n\t{\n\t\t$this->publishProgress(new Progress(0, \"Preparing {$this->action::getName()}\"));\n\t\tBlockStatesParser::$doorRotPath = $this->doorRotPath;\n\t\tBlockStatesParser::$rotPath = $this->rotPath;\n\n\t\t/** @var Selection $selection */\n\t\t$selection = unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\t\t/** @var SingleClipboard $clipboard */\n\t\t$clipboard = unserialize($this->clipboard/*, ['allowed_classes' => [SingleClipboard::class]]*/);//TODO test pm4\n\t\t$clipboard->selection = $selection;//TODO test. Needed to add this so that //paste works after //cut2\n\t\t$messages = [];\n\t\t/** @var Progress $progress */\n\t\tforeach ($this->action->execute($this->sessionUUID, $selection, $changed, $clipboard, $messages) as $progress) {\n\t\t\t$this->publishProgress($progress);\n\t\t}\n\t\t//TODO $clipboard->selection shape might change when using rotate. Fix this, so //paste chunks are correct\n\n\t\t$this->setResult(compact(\"clipboard\", \"changed\", \"messages\"));\n\t}\n\n\t/**\n\t * @throws InvalidArgumentException\n\t * @throws AssumptionFailedError\n\t * @throws Exception\n\t */\n\tpublic function onCompletion(): void\n\t{\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID(UUID::fromString($this->sessionUUID));\n\t\t\tif ($session instanceof UserSession) $session->getBossBar()->hideFromAll();\n\t\t} catch (SessionException $e) {\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\t$session = null;\n\t\t}\n\t\t$result = $this->getResult();\n\t\t/** @var SingleClipboard $clipboard */\n\t\t$clipboard = $result[\"clipboard\"];\n\t\t$changed = $result[\"changed\"];\n\t\t/** @var Selection $selection */\n\t\t$selection = unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\t\t$totalCount = $selection->getShape()->getTotalCount();\n\t\tif (!is_null($session)) {\n\t\t\t$session->sendMessage(TF::GREEN . $session->getLanguage()->translateString($this->action->completionString, [\"name\" => trim($this->action->prefix . \" \" . $this->action::getName()), \"took\" => $this->generateTookString(), \"changed\" => $changed, \"total\" => $totalCount]));\n\t\t\tforeach ($result[\"messages\"] ?? [] as $message) $session->sendMessage($message);\n\t\t\tif ($this->action->addClipboard)\n\t\t\t\t$session->addClipboard($clipboard);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/AsyncCopyTask.php",
    "content": "<?php /** @noinspection PhpInternalEntityUsedInspection */\n\nnamespace xenialdan\\MagicWE2\\task;\n\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\block\\Block;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\BlockEntry;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\selection\\shape\\Shape;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass AsyncCopyTask extends MWEAsyncTask\n{\n\n\t/** @var string */\n\tprivate $chunks;\n\t/** @var string */\n\tprivate $selection;\n\t/** @var Vector3 */\n\tprivate $offset;\n\t/** @var int */\n\tprivate $flags;\n\n\t/**\n\t * AsyncCopyTask constructor.\n\t * @param Selection $selection\n\t * @param Vector3 $offset\n\t * @param UUID $sessionUUID\n\t * @param string[] $chunks serialized chunks\n\t * @param int $flags\n\t * @throws Exception\n\t */\n    public function __construct(UUID $sessionUUID, Selection $selection, Vector3 $offset, array $chunks, int $flags)\n    {\n        $this->start = microtime(true);\n        $this->chunks = serialize($chunks);\n        $this->sessionUUID = $sessionUUID->toString();\n        $this->selection = serialize($selection);\n        $this->offset = $offset->asVector3()->floor();\n        $this->flags = $flags;\n    }\n\n    /**\n     * Actions to execute when run\n     *\n     * @return void\n     * @throws Exception\n     */\n    public function onRun(): void\n\t{\n\t\t$this->publishProgress([0, \"Start\"]);\n\t\t$chunks = array_map(static function ($chunk) {\n\t\t\treturn FastChunkSerializer::deserialize($chunk);\n\t\t}, unserialize($this->chunks/*, ['allowed_classes' => false]*/));//TODO test pm4\n\t\t/** @var Selection $selection */\n\t\t$selection = unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\t\t#var_dump(\"shape\", $selection->getShape());\n\t\t$manager = Shape::getChunkManager($chunks);\n\t\tunset($chunks);\n\t\t#var_dump($this->offset);\n\t\t$clipboard = new SingleClipboard($this->offset);\n\t\t$clipboard->selection = $selection;\n\t\t#$clipboard->setCenter(unserialize($this->offset));\n\t\t$totalCount = $selection->getShape()->getTotalCount();\n\t\t$copied = $this->copyBlocks($selection, $manager, $clipboard);\n\t\t#$clipboard->setShape($selection->getShape());\n        #$clipboard->chunks = $manager->getChunks();\n        $this->setResult(compact(\"clipboard\", \"copied\", \"totalCount\"));\n    }\n\n    /**\n     * @param Selection $selection\n     * @param AsyncChunkManager $manager\n     * @param SingleClipboard $clipboard\n     * @return int\n     * @throws Exception\n     */\n\tprivate function copyBlocks(Selection $selection, AsyncChunkManager $manager, SingleClipboard $clipboard): int\n\t{\n\t\t$blockCount = $selection->getShape()->getTotalCount();\n\t\t$i = 0;\n\t\t$lastprogress = 0;\n\t\t$this->publishProgress([0, \"Running, copied $i blocks out of $blockCount\"]);\n\t\t$min = $selection->getShape()->getMinVec3();\n\t\t/** @var Block $block */\n\t\tforeach ($selection->getShape()->getBlocks($manager, [], $this->flags) as $block) {\n\t\t\t#var_dump(\"copy chunk X: \" . ($block->getX() >> 4) . \" Y: \" . ($block->getY() >> 4));\n\t\t\t$newv3 = $block->getPos()->subtractVector($min)->floor();\n\t\t\t$clipboard->addEntry($newv3->getFloorX(), $newv3->getFloorY(), $newv3->getFloorZ(), new BlockEntry($block->getFullId()));//TODO test tiles\n\t\t\t#var_dump(\"copied selection block\", $block);\n\t\t\t$i++;\n\t\t\t$progress = floor($i / $blockCount * 100);\n\t\t\tif ($lastprogress < $progress) {//this prevents spamming packets\n\t\t\t\t$this->publishProgress([$progress, \"Running, copied $i blocks out of $blockCount\"]);\n\t\t\t\t$lastprogress = $progress;\n\t\t\t}\n\t\t}\n        return $i;\n    }\n\n    public function onCompletion(): void\n\t{\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID(UUID::fromString($this->sessionUUID));\n\t\t\tif ($session instanceof UserSession) $session->getBossBar()->hideFromAll();\n\t\t\t$result = $this->getResult();\n\t\t\t$copied = $result[\"copied\"];\n\t\t\t/** @var SingleClipboard $clipboard */\n\t\t\t$clipboard = $result[\"clipboard\"];\n\t\t\t$totalCount = $result[\"totalCount\"];\n\t\t\t$session->sendMessage(TF::GREEN . $session->getLanguage()->translateString('task.copy.success', [$this->generateTookString(), $copied, $totalCount]));\n\t\t\t$session->addClipboard($clipboard);\n\t\t} catch (SessionException $e) {\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t} catch (InvalidArgumentException $e) {\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t} catch (AssumptionFailedError $e) {\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/AsyncCountTask.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\task;\n\nuse Exception;\nuse InvalidArgumentException;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockFactory;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\selection\\shape\\Shape;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass AsyncCountTask extends MWEAsyncTask\n{\n\t/** @var string */\n\tprivate $touchedChunks;\n\t/** @var string */\n\tprivate $selection;\n\t/** @var int */\n\tprivate $flags;\n\t/** @var string */\n\tprivate $newBlocks;\n\n\t/**\n\t * AsyncCountTask constructor.\n\t * @param Selection $selection\n\t * @param UUID $sessionUUID\n\t * @param string[] $touchedChunks serialized chunks\n\t * @param Block[] $newBlocks\n\t * @param int $flags\n     * @throws Exception\n     */\n    public function __construct(UUID $sessionUUID, Selection $selection, array $touchedChunks, array $newBlocks, int $flags)\n    {\n        $this->start = microtime(true);\n        $this->touchedChunks = serialize($touchedChunks);\n        $this->sessionUUID = $sessionUUID->toString();\n        $this->selection = serialize($selection);\n        $this->newBlocks = serialize($newBlocks);\n        $this->flags = $flags;\n    }\n\n    /**\n     * Actions to execute when run\n     *\n     * @return void\n     * @throws Exception\n     */\n    public function onRun(): void\n\t{\n\t\t$this->publishProgress([0, \"Start\"]);\n\t\t$chunks = unserialize($this->touchedChunks/*, ['allowed_classes' => [false]]*/);//TODO test pm4\n\t\tforeach ($chunks as $hash => $data) {\n\t\t\t$chunks[$hash] = FastChunkSerializer::deserialize($data);\n\t\t}\n\t\t/** @var Selection $selection */\n\t\t$selection = unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\t\t$manager = Shape::getChunkManager($chunks);\n\t\tunset($chunks);\n\t\t/** @var Block[] $newBlocks */\n\t\t$newBlocks = unserialize($this->newBlocks/*, ['allowed_classes' => [Block::class]]*/);//TODO test pm4\n\t\t$totalCount = $selection->getShape()->getTotalCount();\n\t\t$counts = $this->countBlocks($selection, $manager, $newBlocks);\n\t\t$this->setResult(compact(\"counts\", \"totalCount\"));\n\t}\n\n    /**\n     * @param Selection $selection\n     * @param AsyncChunkManager $manager\n     * @param Block[] $newBlocks\n     * @return array\n     * @throws Exception\n     */\n    private function countBlocks(Selection $selection, AsyncChunkManager $manager, array $newBlocks): array\n    {\n        $blockCount = $selection->getShape()->getTotalCount();\n        $changed = 0;\n        $this->publishProgress([0, \"Running, changed $changed blocks out of $blockCount\"]);\n        $lastchunkx = $lastchunkz = null;\n        $lastprogress = 0;\n        $counts = [];\n        /** @var Block $block */\n        foreach ($selection->getShape()->getBlocks($manager, $newBlocks, $this->flags) as $block) {\n\t\t\tif (is_null($lastchunkx) || ($block->getPos()->x >> 4 !== $lastchunkx && $block->getPos()->z >> 4 !== $lastchunkz)) {\n\t\t\t\t$lastchunkx = $block->getPos()->x >> 4;\n\t\t\t\t$lastchunkz = $block->getPos()->z >> 4;\n\t\t\t\tif (is_null($manager->getChunk($block->getPos()->x >> 4, $block->getPos()->z >> 4))) {\n\t\t\t\t\t#print PHP_EOL . \"Not found: \" . strval($block->x >> 4) . \":\" . strval($block->z >> 4) . PHP_EOL;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tBlockFactory::getInstance();\n\t\t\t$block1 = $manager->getBlockArrayAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ());\n\t\t\t$tostring = (BlockFactory::getInstance()->get($block1[0], $block1[1]))->getName() . \" \" . $block1[0] . \":\" . $block1[1];\n\t\t\tif (!array_key_exists($tostring, $counts)) $counts[$tostring] = 0;\n\t\t\t$counts[$tostring]++;\n\t\t\t$changed++;\n\t\t\t$progress = floor($changed / $blockCount * 100);\n\t\t\tif ($lastprogress < $progress) {//this prevents spamming packets\n\t\t\t\t$this->publishProgress([$progress, \"Running, counting $changed blocks out of $blockCount\"]);\n\t\t\t\t$lastprogress = $progress;\n\t\t\t}\n\t\t}\n\t\treturn $counts;\n\t}\n\n\t/**\n\t * @throws InvalidArgumentException\n\t * @throws AssumptionFailedError\n\t */\n\tpublic function onCompletion(): void\n\t{\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID(UUID::fromString($this->sessionUUID));\n\t\t\tif ($session instanceof UserSession) $session->getBossBar()->hideFromAll();\n\t\t\t$result = $this->getResult();\n\t\t\t$counts = $result[\"counts\"];\n\t\t\t$totalCount = $result[\"totalCount\"];\n\t\t\t$session->sendMessage(TF::GREEN . $session->getLanguage()->translateString('task.count.success', [$this->generateTookString()]));\n\t\t\t$session->sendMessage(TF::DARK_AQUA . $session->getLanguage()->translateString('task.count.result', [count($counts), $totalCount]));\n\t\t\tuasort($counts, static function ($a, $b) {\n\t\t\t\tif ($a === $b) return 0;\n\t\t\t\treturn ($a > $b) ? -1 : 1;\n\t\t\t});\n\t\t\tforeach ($counts as $block => $count) {\n\t\t\t\t$session->sendMessage(TF::AQUA . $count . \"x | \" . round($count / $totalCount * 100) . \"% | \" . $block);\n\t\t\t}\n\t\t} catch (SessionException $e) {\n            Loader::getInstance()->getLogger()->logException($e);\n        }\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/AsyncFillTask.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\task;\n\nuse Exception;\nuse Generator;\nuse InvalidArgumentException;\nuse pocketmine\\block\\Block;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\format\\Chunk;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\clipboard\\RevertClipboard;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\BlockPalette;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\selection\\shape\\Shape;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass AsyncFillTask extends MWEAsyncTask\n{\n\t/** @var string */\n\tprivate $touchedChunks;\n\t/** @var string */\n\tprivate $selection;\n\t/** @var int */\n\tprivate $flags;\n\t/** @var string */\n\tprivate $newBlocks;\n\n\t/**\n\t * AsyncFillTask constructor.\n\t * @param UUID $sessionUUID\n\t * @param Selection $selection\n\t * @param string[] $touchedChunks serialized chunks\n\t * @param Block[] $newBlocks\n\t * @param int $flags\n\t * @throws Exception\n\t */\n\tpublic function __construct(UUID $sessionUUID, Selection $selection, array $touchedChunks, array $newBlocks, int $flags)\n\t{\n\t\t$this->start = microtime(true);\n\t\t$this->sessionUUID = $sessionUUID->toString();\n\t\t$this->selection = igbinary_serialize($selection);\n\t\t$this->touchedChunks = igbinary_serialize($touchedChunks);\n\t\t$this->newBlocks = BlockPalette::encode($newBlocks);\n\t\tvar_dump($this->newBlocks);\n\t\t$this->flags = $flags;\n\t}\n\n\t/**\n\t * Actions to execute when run\n\t *\n\t * @return void\n\t * @throws Exception\n\t */\n\tpublic function onRun(): void\n\t{\n\t\t$this->publishProgress([0, \"Start\"]);\n\n\t\t$touchedChunks = array_map(static function ($chunk) {\n\t\t\treturn FastChunkSerializer::deserialize($chunk);\n\t\t}, igbinary_unserialize($this->touchedChunks/*, ['allowed_classes' => false]*/));//TODO test pm4\n\n\t\t$manager = Shape::getChunkManager($touchedChunks);\n\t\tunset($touchedChunks);\n\n\t\t/** @var Selection $selection */\n\t\t$selection = igbinary_unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\n\t\t/** @var Block[] $newBlocks */\n\t\t$newBlocks = BlockPalette::decode($this->newBlocks);//TODO test pm4\n\t\t$oldBlocks = iterator_to_array($this->execute($selection, $manager, $newBlocks, $changed));\n\n\t\t$resultChunks = $manager->getChunks();\n\t\t$resultChunks = array_filter($resultChunks, static function (Chunk $chunk) {\n\t\t\treturn $chunk->isDirty();\n\t\t});\n\t\t#$this->setResult(compact(\"resultChunks\", \"oldBlocks\", \"changed\"));\n\t\t$this->setResult([\n\t\t\t\"resultChunks\" => $resultChunks,\n\t\t\t\"oldBlocks\" => $oldBlocks,\n\t\t\t\"changed\" => $changed\n\t\t]);\n\t}\n\n\t/**\n\t * @param Selection $selection\n\t * @param AsyncChunkManager $manager\n\t * @param Block[] $newBlocks\n\t * @param null|int $changed\n\t * @return Generator|array[]\n\t * @phpstan-return Generator<int, array{int, \\pocketmine\\world\\Position|null}, void, void>\n\t * @throws Exception\n\t */\n\tprivate function execute(Selection $selection, AsyncChunkManager $manager, array $newBlocks, ?int &$changed): Generator\n\t{\n\t\t$blockCount = $selection->getShape()->getTotalCount();\n\t\t$lastchunkx = $lastchunkz = null;\n\t\t$lastprogress = 0;\n\t\t$i = 0;\n\t\t$changed = 0;\n\t\t$this->publishProgress([0, \"Running, changed $changed blocks out of $blockCount\"]);\n\t\t/** @var Block $block */\n\t\tforeach ($selection->getShape()->getBlocks($manager, [], $this->flags) as $block) {\n\t\t\t/*if (API::hasFlag($this->flags, API::FLAG_POSITION_RELATIVE)){\n\t\t\t\t$rel = $block->subtract($selection->shape->getPasteVector());\n\t\t\t\t$block = API::setComponents($block,$rel->x,$rel->y,$rel->z);//TODO COPY TO ALL TASKS\n\t\t\t}*/\n\t\t\tif (is_null($lastchunkx) || ($block->getPos()->x >> 4 !== $lastchunkx && $block->getPos()->z >> 4 !== $lastchunkz)) {\n\t\t\t\t$lastchunkx = $block->getPos()->x >> 4;\n\t\t\t\t$lastchunkz = $block->getPos()->z >> 4;\n\t\t\t\tif (is_null($manager->getChunk($block->getPos()->x >> 4, $block->getPos()->z >> 4))) {\n\t\t\t\t\t#print PHP_EOL . \"Not found: \" . strval($block->x >> 4) . \":\" . strval($block->z >> 4) . PHP_EOL;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\t$new = clone $newBlocks[array_rand($newBlocks)];\n\t\t\tif ($new->getId() === $block->getId() && $new->getMeta() === $block->getMeta()) continue;//skip same blocks\n\t\t\t#yield self::undoBlockHackToArray($manager->getBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ()),$block->getPos());\n\t\t\tyield self::singleBlockToData(API::setComponents($manager->getBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ()), (int)$block->getPos()->x, (int)$block->getPos()->y, (int)$block->getPos()->z));\n\t\t\t#yield $block;//backup\n\t\t\t$manager->setBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ(), $new);\n\t\t\tif ($manager->getBlockArrayAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ()) !== [$block->getId(), $block->getMeta()]) {\n\t\t\t\t$changed++;\n\t\t\t}\n\t\t\t///\n\t\t\t$i++;\n\t\t\t$progress = floor($i / $blockCount * 100);\n\t\t\tif ($lastprogress < $progress) {//this prevents spamming packets\n\t\t\t\t$this->publishProgress([$progress, \"Running, changed $changed blocks out of $blockCount\"]);\n\t\t\t\t$lastprogress = $progress;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @throws InvalidArgumentException\n\t * @throws AssumptionFailedError\n\t * @throws Exception\n\t * @throws Exception\n\t */\n\tpublic function onCompletion(): void\n\t{\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID(UUID::fromString($this->sessionUUID));\n\t\t\tif ($session instanceof UserSession) $session->getBossBar()->hideFromAll();\n\t\t} catch (SessionException $e) {\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\t$session = null;\n\t\t}\n\t\t$result = $this->getResult();\n\t\t/** @var Chunk[] $resultChunks */\n\t\t$resultChunks = $result[\"resultChunks\"];\n\t\t$undoChunks = array_map(static function ($chunk) {\n\t\t\treturn FastChunkSerializer::deserialize($chunk);\n\t\t}, igbinary_unserialize($this->touchedChunks/*, ['allowed_classes' => false]*/));//TODO test pm4)\n\t\t#$oldBlocks = igbinary_unserialize($result[\"oldBlocks\"]);\n\t\t$oldBlocks = $result[\"oldBlocks\"];//this is already a data map\n//\t\t$oldBlocks2 = [];\n//\t\t/**\n//\t\t * @var int $fullId\n//\t\t * @var Vector3 $pos\n//\t\t */\n//\t\tforeach ($oldBlocks as [$fullId, $pos]) {\n//\t\t\t$b = BlockFactory::getInstance()->fromFullBlock($fullId);\n//\t\t\t$b->getPos()->x = $pos->x;\n//\t\t\t$b->getPos()->y = $pos->y;\n//\t\t\t$b->getPos()->z = $pos->z;\n//\t\t\t$oldBlocks2[] = $b;\n//\t\t}\n//\t\tvar_dump($oldBlocks2);\n\n\t\t$changed = $result[\"changed\"];\n\t\t/** @var Selection $selection */\n\t\t$selection = igbinary_unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\t\t$totalCount = $selection->getShape()->getTotalCount();\n\t\t$world = $selection->getWorld();\n\t\tforeach ($resultChunks as $hash => $chunk) {\n\t\t\tWorld::getXZ($hash, $x, $z);\n\t\t\t$world->setChunk($x, $z, $chunk, false);\n\t\t}\n\t\tif (!is_null($session)) {\n\t\t\t$session->sendMessage(TF::GREEN . $session->getLanguage()->translateString('task.fill.success', [$this->generateTookString(), $changed, $totalCount]));\n\t\t\t$session->addRevert(new RevertClipboard($selection->worldId, $undoChunks, $oldBlocks));\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/AsyncPasteTask.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\task;\n\nuse Exception;\nuse Generator;\nuse InvalidArgumentException;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\format\\Chunk;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\clipboard\\RevertClipboard;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\BlockEntry;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\selection\\shape\\Shape;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass AsyncPasteTask extends MWEAsyncTask\n{\n\t/** @var string */\n\tprivate $touchedChunks;\n\t/** @var string */\n\tprivate $selection;\n\t/** @var string */\n\tprivate $clipboard;\n\t/** @var Vector3 */\n\tprivate $offset;\n\n\t/**\n\t * AsyncPasteTask constructor.\n\t * @param UUID $sessionUUID\n\t * @param Selection $selection\n\t * @param string[] $touchedChunks serialized chunks\n\t * @param SingleClipboard $clipboard\n\t * @throws Exception\n\t */\n\tpublic function __construct(UUID $sessionUUID, Selection $selection, array $touchedChunks, SingleClipboard $clipboard)\n\t{\n\t\t$this->start = microtime(true);\n\t\t$this->offset = $selection->getShape()->getPasteVector()->addVector($clipboard->position)->floor();\n\t\t#var_dump(\"paste\", $selection->getShape()->getPasteVector(), \"cb position\", $clipboard->position, \"offset\", $this->offset, $clipboard);\n\t\t$this->sessionUUID = $sessionUUID->toString();\n\t\t$this->selection = serialize($selection);\n\t\t$this->touchedChunks = serialize($touchedChunks);\n\t\t$this->clipboard = serialize($clipboard);\n\t}\n\n\t/**\n\t * Actions to execute when run\n\t *\n\t * @return void\n\t * @throws InvalidArgumentException\n\t */\n\tpublic function onRun(): void\n\t{\n\t\t$this->publishProgress([0, \"Start\"]);\n\n\t\t$touchedChunks = array_map(static function ($chunk) {//todo add hash as key\n\t\t\treturn FastChunkSerializer::deserialize($chunk);\n\t\t}, unserialize($this->touchedChunks/*, ['allowed_classes' => false]*/));//TODO test pm4\n\n\t\t$manager = Shape::getChunkManager($touchedChunks);\n\t\tunset($touchedChunks);\n\n\t\t/** @var Selection $selection */\n\t\t$selection = unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\n\t\t/** @var SingleClipboard $clipboard */\n\t\t$clipboard = unserialize($this->clipboard/*, ['allowed_classes' => [SingleClipboard::class]]*/);//TODO test pm4\n\t\t$oldBlocks = iterator_to_array($this->execute($selection, $manager, $clipboard, $changed));\n\n\t\t$resultChunks = $manager->getChunks();\n\t\t$resultChunks = array_filter($resultChunks, static function (Chunk $chunk) {\n\t\t\treturn $chunk->isDirty();\n\t\t});\n\t\t$this->setResult(compact(\"resultChunks\", \"oldBlocks\", \"changed\"));\n\t}\n\n\t/**\n\t * @param Selection $selection\n\t * @param AsyncChunkManager $manager\n\t * @param SingleClipboard $clipboard\n\t * @param null|int $changed\n\t * @return Generator|array[]\n\t * @phpstan-return Generator<int, array{int, \\pocketmine\\world\\Position|null}, void, void>\n\t * @throws InvalidArgumentException\n\t */\n\tprivate function execute(Selection $selection, AsyncChunkManager $manager, SingleClipboard $clipboard, ?int &$changed): Generator\n\t{\n\t\t$blockCount = $clipboard->getTotalCount();\n\t\t$lastchunkx = $lastchunkz = $x = $y = $z = null;\n\t\t$lastprogress = 0;\n\t\t$i = 0;\n\t\t$changed = 0;\n\t\t$this->publishProgress([0, \"Running, changed $changed blocks out of $blockCount\"]);\n\t\t/** @var BlockEntry $entry */\n\t\tforeach ($clipboard->iterateEntries($x, $y, $z) as $entry) {\n\t\t\t#var_dump(\"at cb xyz $x $y $z: $entry\");\n\t\t\t$x += $this->offset->getFloorX();\n\t\t\t$y += $this->offset->getFloorY();\n\t\t\t$z += $this->offset->getFloorZ();\n\t\t\t#var_dump(\"add offset xyz $x $y $z\");\n\t\t\tif (($x >> 4 !== $lastchunkx && $z >> 4 !== $lastchunkz) || is_null($lastchunkx)) {\n\t\t\t\t$lastchunkx = $x >> 4;\n\t\t\t\t$lastchunkz = $z >> 4;\n\t\t\t\tif (is_null($manager->getChunk($x >> 4, $z >> 4))) {\n\t\t\t\t\tprint PHP_EOL . \"Paste chunk not found in async paste manager: \" . ($x >> 4) . \":\" . ($z >> 4) . PHP_EOL;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\t/*if (API::hasFlag($this->flags, API::FLAG_POSITION_RELATIVE)){\n\t\t\t\t$rel = $block->subtract($selection->shape->getPasteVector());\n\t\t\t\t$block = API::setComponents($block,$rel->x,$rel->y,$rel->z);//TODO COPY TO ALL TASKS\n\t\t\t}*/\n\t\t\t$new = $entry->toBlock();\n\t\t\t#$new->position(($pos = Position::fromObject(new Vector3($x, $y, $z)))->getWorld(), $pos->getX(), $pos->getY(), $pos->getZ());\n\t\t\t#$old->position(($pos = Position::fromObject(new Vector3($x, $y, $z)))->getWorld(), $pos->getX(), $pos->getY(), $pos->getZ());\n\t\t\t#var_dump(\"old\", $old, \"new\", $new);\n\t\t\tyield self::singleBlockToData(API::setComponents($manager->getBlockAt($x, $y, $z), (int)$x, (int)$y, (int)$z));\n\t\t\t$manager->setBlockAt($x, $y, $z, $new);\n\t\t\tif ($manager->getBlockArrayAt($x, $y, $z) !== [$manager->getBlockAt($x, $y, $z)->getId(), $manager->getBlockAt($x, $y, $z)->getMeta()]) {//TODO remove? Just useless waste imo\n\t\t\t\t$changed++;\n\t\t\t}\n\t\t\t///\n\t\t\t$i++;\n\t\t\t$progress = floor($i / $blockCount * 100);\n\t\t\tif ($lastprogress < $progress) {//this prevents spamming packets\n\t\t\t\t$this->publishProgress([$progress, \"Running, changed $changed blocks out of $blockCount\"]);\n\t\t\t\t$lastprogress = $progress;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @throws AssumptionFailedError\n\t * @throws InvalidArgumentException\n\t * @throws Exception\n\t * @throws Exception\n\t */\n\tpublic function onCompletion(): void\n\t{\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID(UUID::fromString($this->sessionUUID));\n\t\t\tif ($session instanceof UserSession) $session->getBossBar()->hideFromAll();\n\t\t} catch (SessionException $e) {\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\t$session = null;\n\t\t}\n\t\t$result = $this->getResult();\n\t\t/** @var Chunk[] $resultChunks */\n\t\t$resultChunks = $result[\"resultChunks\"];\n\t\t$undoChunks = array_map(static function ($chunk) {\n\t\t\treturn FastChunkSerializer::deserialize($chunk);\n\t\t}, unserialize($this->touchedChunks/*, ['allowed_classes' => false]*/));//TODO test pm4\n\t\t$oldBlocks = $result[\"oldBlocks\"];//already data array\n\t\t$changed = $result[\"changed\"];\n\t\t/** @var Selection $selection */\n\t\t$selection = unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\t\t$totalCount = $selection->getShape()->getTotalCount();\n\t\t$world = $selection->getWorld();\n\t\tforeach ($resultChunks as $hash => $chunk) {\n\t\t\tWorld::getXZ($hash, $x, $z);\n\t\t\t$world->setChunk($x, $z, $chunk, false);\n\t\t}\n\t\tif (!is_null($session)) {\n\t\t\t$session->sendMessage(TF::GREEN . $session->getLanguage()->translateString('task.fill.success', [$this->generateTookString(), $changed, $totalCount]));\n\t\t\t$session->addRevert(new RevertClipboard($selection->worldId, $undoChunks, $oldBlocks));\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/AsyncReplaceTask.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\task;\n\nuse Exception;\nuse Generator;\nuse InvalidArgumentException;\nuse pocketmine\\block\\Block;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\format\\Chunk;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\clipboard\\RevertClipboard;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\selection\\shape\\Shape;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass AsyncReplaceTask extends MWEAsyncTask\n{\n\t/** @var string */\n\tprivate $touchedChunks;\n\t/** @var string */\n\tprivate $selection;\n\t/** @var int */\n\tprivate $flags;\n\t/** @var string */\n\tprivate $replaceBlocks;\n\t/** @var string */\n\tprivate $newBlocks;\n\n\t/**\n\t * AsyncReplaceTask constructor.\n\t * @param Selection $selection\n\t * @param UUID $sessionUUID\n\t * @param string[] $touchedChunks serialized chunks\n     * @param Block[] $replaceBlocks\n     * @param Block[] $newBlocks\n     * @param int $flags\n     * @throws Exception\n     */\n    public function __construct(UUID $sessionUUID, Selection $selection, array $touchedChunks, array $replaceBlocks, array $newBlocks, int $flags)\n    {\n        $this->start = microtime(true);\n        $this->sessionUUID = $sessionUUID->toString();\n        $this->selection = serialize($selection);\n        $this->touchedChunks = serialize($touchedChunks);\n        $this->replaceBlocks = serialize($replaceBlocks);\n        $this->newBlocks = serialize($newBlocks);\n        $this->flags = $flags;\n    }\n\n    /**\n     * Actions to execute when run\n     *\n     * @return void\n     * @throws Exception\n     */\n    public function onRun(): void\n\t{\n\t\t$this->publishProgress([0, \"Start\"]);\n\n\t\t$touchedChunks = array_map(static function ($chunk) {\n\t\t\treturn FastChunkSerializer::deserialize($chunk);\n\t\t}, unserialize($this->touchedChunks/*, ['allowed_classes' => false]*/));//TODO test pm4\n\n\t\t$manager = Shape::getChunkManager($touchedChunks);\n\t\tunset($touchedChunks);\n\n\t\t/** @var Selection $selection */\n\t\t$selection = unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\n\t\t/** @var Block[] $replaceBlocks */\n\t\t$replaceBlocks = unserialize($this->replaceBlocks/*, ['allowed_classes' => [Block::class]]*/);//TODO test pm4\n\t\t/** @var Block[] $newBlocks */\n\t\t$newBlocks = unserialize($this->newBlocks/*, ['allowed_classes' => [Block::class]]*/);//TODO test pm4\n\n\t\t$oldBlocks = iterator_to_array($this->execute($selection, $manager, $replaceBlocks, $newBlocks, $changed));\n\n\t\t$resultChunks = $manager->getChunks();\n\t\t$resultChunks = array_filter($resultChunks, static function (Chunk $chunk) {\n\t\t\treturn $chunk->isDirty();\n\t\t});\n\t\t$this->setResult(compact(\"resultChunks\", \"oldBlocks\", \"changed\"));\n\t}\n\n    /**\n\t * @param Selection $selection\n\t * @param AsyncChunkManager $manager\n\t * @param array $replaceBlocks\n\t * @param Block[] $newBlocks\n\t * @param null|int $changed\n\t * @return Generator|array[]\n\t * @phpstan-return Generator<int, array{int, \\pocketmine\\world\\Position|null}, void, void>\n\t * @throws Exception\n\t */\n    private function execute(Selection $selection, AsyncChunkManager $manager, array $replaceBlocks, array $newBlocks, ?int &$changed): Generator\n    {\n        $blockCount = $selection->getShape()->getTotalCount();\n        $lastchunkx = $lastchunkz = null;\n        $lastprogress = 0;\n        $i = 0;\n        $changed = 0;\n        $this->publishProgress([0, \"Running, changed $changed blocks out of $blockCount\"]);\n        /** @var Block $block */\n        foreach ($selection->getShape()->getBlocks($manager, $replaceBlocks, $this->flags) as $block) {\n\t\t\tif (is_null($lastchunkx) || ($block->getPos()->x >> 4 !== $lastchunkx && $block->getPos()->z >> 4 !== $lastchunkz)) {\n\t\t\t\t$lastchunkx = $block->getPos()->x >> 4;\n\t\t\t\t$lastchunkz = $block->getPos()->z >> 4;\n\t\t\t\tif (is_null($manager->getChunk($block->getPos()->x >> 4, $block->getPos()->z >> 4))) {\n\t\t\t\t\t#print PHP_EOL . \"Not found: \" . strval($block->x >> 4) . \":\" . strval($block->z >> 4) . PHP_EOL;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\t$new = clone $newBlocks[array_rand($newBlocks)];\n\t\t\tif ($new->getId() === $block->getId() && $new->getMeta() === $block->getMeta()) continue;//skip same blocks\n\t\t\tyield self::singleBlockToData(API::setComponents($manager->getBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ()), (int)$block->getPos()->x, (int)$block->getPos()->y, (int)$block->getPos()->z));\n\t\t\t$manager->setBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ(), $new);\n\t\t\tif ($manager->getBlockArrayAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ()) !== [$block->getId(), $block->getMeta()]) {\n\t\t\t\t$changed++;\n\t\t\t}\n\t\t\t///\n\t\t\t$i++;\n\t\t\t$progress = floor($i / $blockCount * 100);\n\t\t\tif ($lastprogress < $progress) {//this prevents spamming packets\n\t\t\t\t$this->publishProgress([$progress, \"Running, changed $changed blocks out of $blockCount\"]);\n\t\t\t\t$lastprogress = $progress;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @throws InvalidArgumentException\n\t * @throws AssumptionFailedError\n\t * @throws Exception\n\t * @throws Exception\n\t */\n\tpublic function onCompletion(): void\n\t{\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID(UUID::fromString($this->sessionUUID));\n\t\t\tif ($session instanceof UserSession) $session->getBossBar()->hideFromAll();\n\t\t} catch (SessionException $e) {\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\t$session = null;\n\t\t}\n\t\t$result = $this->getResult();\n\t\t/** @var Chunk[] $resultChunks */\n\t\t$resultChunks = $result[\"resultChunks\"];\n\t\t$undoChunks = array_map(static function ($chunk) {\n\t\t\treturn FastChunkSerializer::deserialize($chunk);\n\t\t}, unserialize($this->touchedChunks/*, ['allowed_classes' => false]*/));//TODO test pm4\n\t\t$oldBlocks = $result[\"oldBlocks\"];//this is already as data\n\t\t$changed = $result[\"changed\"];\n\t\t/** @var Selection $selection */\n\t\t$selection = unserialize($this->selection/*, ['allowed_classes' => [Selection::class]]*/);//TODO test pm4\n\t\t$totalCount = $selection->getShape()->getTotalCount();\n\t\t$world = $selection->getWorld();\n\t\tforeach ($resultChunks as $hash => $chunk) {\n\t\t\tWorld::getXZ($hash, $x, $z);\n\t\t\t$world->setChunk($x, $z, $chunk, false);\n\t\t}\n\t\tif (!is_null($session)) {\n\t\t\t$session->sendMessage(TF::GREEN . $session->getLanguage()->translateString('task.replace.success', [$this->generateTookString(), $changed, $totalCount]));\n\t\t\t$session->addRevert(new RevertClipboard($selection->worldId, $undoChunks, $oldBlocks));\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/AsyncRevertTask.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\task;\n\nuse Exception;\nuse Generator;\nuse InvalidArgumentException;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\clipboard\\RevertClipboard;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nclass AsyncRevertTask extends MWEAsyncTask\n{\n\n\tpublic const TYPE_UNDO = 0;\n\tpublic const TYPE_REDO = 1;\n\n\t/** @var string */\n\tprivate $clipboard;\n\t/** @var int */\n\tprivate $type;\n\n\t/**\n\t * AsyncRevertTask constructor.\n\t * @param UUID $sessionUUID\n\t * @param RevertClipboard $clipboard\n\t * @param int $type The type of clipboard pasting.\n\t */\n\tpublic function __construct(UUID $sessionUUID, RevertClipboard $clipboard, $type = self::TYPE_UNDO)\n\t{\n\t\t$this->sessionUUID = $sessionUUID->toString();\n        $this->start = microtime(true);\n        $this->clipboard = serialize($clipboard);\n        $this->type = $type;\n    }\n\n    /**\n     * Actions to execute when run\n     *\n     * @return void\n     * @throws Exception\n     */\n    public function onRun(): void\n\t{\n\t\t$this->publishProgress([0, \"Start\"]);\n\t\t/** @var RevertClipboard $clipboard */\n\t\t$clipboard = unserialize($this->clipboard/*, ['allowed_classes' => [RevertClipboard::class]]*/);//TODO test pm4\n\t\t$totalCount = count($clipboard->blocksAfter);\n\t\t$manager = $clipboard::getChunkManager($clipboard->chunks);\n\t\t$oldBlocks = [];\n\t\tif ($this->type === self::TYPE_UNDO)\n\t\t\t$oldBlocks = iterator_to_array($this->undoChunks($manager, $clipboard));\n\t\tif ($this->type === self::TYPE_REDO)\n\t\t\t$oldBlocks = iterator_to_array($this->redoChunks($manager, $clipboard));\n\t\t$chunks = $manager->getChunks();\n\t\t$this->setResult(compact(\"chunks\", \"oldBlocks\", \"totalCount\"));\n\t}\n\n\t/**\n\t * @param AsyncChunkManager $manager\n\t * @param RevertClipboard $clipboard\n\t * @return Generator|array[]\n\t * @phpstan-return Generator<int, array{int, \\pocketmine\\world\\Position|null}, void, void>\n\t * @throws InvalidArgumentException\n\t */\n\tprivate function undoChunks(AsyncChunkManager $manager, RevertClipboard $clipboard): Generator\n\t{\n\t\t$count = count($clipboard->blocksAfter);\n\t\t$changed = 0;\n\t\t$this->publishProgress([0, \"Reverted $changed blocks out of $count\"]);\n\t\t//$block is \"data\" array\n\t\tforeach ($clipboard->blocksAfter as $block) {\n\t\t\tyield $block;\n\t\t\t$block = self::singleDataToBlock($block);//turn data into real block\n\t\t\t$manager->setBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ(), $block);\n\t\t\t$changed++;\n\t\t\t$this->publishProgress([$changed / $count, \"Reverted $changed blocks out of $count\"]);\n\t\t}\n\t}\n\n\t/**\n\t * @param AsyncChunkManager $manager\n\t * @param RevertClipboard $clipboard\n\t * @return Generator|array[]\n\t * @phpstan-return Generator<int, array{int, \\pocketmine\\world\\Position|null}, void, void>\n\t * @throws InvalidArgumentException\n\t */\n\tprivate function redoChunks(AsyncChunkManager $manager, RevertClipboard $clipboard): Generator\n\t{\n\t\t$count = count($clipboard->blocksAfter);\n\t\t$changed = 0;\n\t\t$this->publishProgress([0, \"Redone $changed blocks out of $count\"]);\n\t\t//$block is \"data\" array\n\t\tforeach ($clipboard->blocksAfter as $block) {\n\t\t\tyield $block;\n\t\t\t$block = self::singleDataToBlock($block);//turn data into real block\n\t\t\t$manager->setBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ(), $block);\n\t\t\t$changed++;\n\t\t\t$this->publishProgress([$changed / $count, \"Redone $changed blocks out of $count\"]);\n\t\t}\n\t}\n\n\t/**\n\t * @throws InvalidArgumentException\n\t * @throws AssumptionFailedError\n\t * @throws Exception\n\t */\n\tpublic function onCompletion(): void\n\t{\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID(UUID::fromString($this->sessionUUID));\n\t\t\tif ($session instanceof UserSession) $session->getBossBar()->hideFromAll();\n\t\t} catch (SessionException $e) {\n\t\t\tLoader::getInstance()->getLogger()->logException($e);\n\t\t\t$session = null;\n\t\t}\n\t\t$result = $this->getResult();\n\t\t/** @var RevertClipboard $clipboard */\n\t\t$clipboard = unserialize($this->clipboard/*, ['allowed_classes' => [RevertClipboard::class]]*/);//TODO test pm4\n\t\t$clipboard->chunks = $result[\"chunks\"];\n\t\t$totalCount = $result[\"totalCount\"];\n\t\t$changed = count($result[\"oldBlocks\"]);\n\t\t$clipboard->blocksAfter = $result[\"oldBlocks\"];//already is a array of data\n\t\t$world = $clipboard->getWorld();\n\t\tforeach ($clipboard->chunks as $hash => $chunk) {\n\t\t\tWorld::getXZ($hash, $x, $z);\n\t\t\t$world->setChunk($x, $z, $chunk, false);\n\t\t}\n\t\tif (!is_null($session)) {\n\t\t\tswitch ($this->type) {\n\t\t\t\tcase self::TYPE_UNDO:\n\t\t\t\t{\n\t\t\t\t\t$session->sendMessage(TF::GREEN . $session->getLanguage()->translateString('task.revert.undo.success', [$this->generateTookString(), $changed, $totalCount]));\n\t\t\t\t\t$session->redoHistory->push($clipboard);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase self::TYPE_REDO:\n                {\n                    $session->sendMessage(TF::GREEN . $session->getLanguage()->translateString('task.revert.redo.success', [$this->generateTookString(), $changed, $totalCount]));\n                    $session->undoHistory->push($clipboard);\n                    break;\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/MWEAsyncTask.php",
    "content": "<?php\n\nnamespace xenialdan\\MagicWE2\\task;\n\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockFactory;\nuse pocketmine\\scheduler\\AsyncTask;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\Position;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\session\\UserSession;\n\nabstract class MWEAsyncTask extends AsyncTask\n{\n\t/** @var string */\n\tpublic $sessionUUID;\n\t/** @var float */\n\tpublic $start;\n\n\tpublic function onProgressUpdate($progress): void\n\t{\n\t\tif (!$progress instanceof Progress) {//TODO Temp fix until all async tasks are modified\n\t\t\t$progress = new Progress($progress[0] / 100, $progress[1]);\n\t\t}\n\t\ttry {\n\t\t\t$session = SessionHelper::getSessionByUUID(UUID::fromString($this->sessionUUID));\n\t\t\t/** @var Progress $progress */\n\t\t\tif ($session instanceof UserSession) $session->getBossBar()->setPercentage($progress->progress)->setSubTitle(str_replace(\"%\", \"%%%%\", $progress->string . \" | \" . floor($progress->progress * 100) . \"%\"));\n\t\t\telse $session->sendMessage($progress->string . \" | \" . floor($progress->progress * 100) . \"%\");//TODO remove, debug\n\t\t} catch (SessionException $e) {\n\t\t\t//TODO log?\n\t\t}\n\t}\n\n\tpublic function generateTookString(): string\n\t{\n\t\treturn date(\"i:s:\", (int)(microtime(true) - $this->start)) . round(microtime(true) - $this->start, 1, PHP_ROUND_HALF_DOWN);\n\t}\n\n\t/**\n\t * Turns A block into an array that doesn't get fucked by anonymous classes when serialized\n\t * @param Block $block\n\t * @param Position|null $position\n\t * @return array{int, Position|null}\n\t */\n\tpublic static function singleBlockToData(Block $block, ?Position $position = null): array\n\t{\n\t\t/** @noinspection PhpInternalEntityUsedInspection */\n\t\treturn [$block->getFullId(), $position ?? $block->getPos()];\n\t}\n\n\t/**\n\t * Turns ALL blocks into an array that doesn't get fucked by anonymous classes when serialized\n\t * @param Block[] $blocks\n\t * @return array<array{int, Position|null}>\n\t */\n\tpublic static function multipleBlocksToData(array $blocks): array\n\t{\n\t\t$a = [];\n\t\tforeach ($blocks as $block)\n\t\t\t$a[] = self::singleBlockToData($block);\n\t\treturn $a;\n\t}\n\n\t/**\n\t * Turns a SINGLE array from singleBlockToData back into a block\n\t * @param array{int, Position|null} $data\n\t * @return Block\n\t */\n\tprotected static function singleDataToBlock(array $data): Block\n\t{\n\t\t$block = BlockFactory::getInstance()->fromFullBlock($data[0]);\n\t\t/** @var Position $pos */\n\t\t$pos = $data[1];\n\t\t$block->getPos()->world = $pos->world;\n\t\t$block->getPos()->x = $pos->x;\n\t\t$block->getPos()->y = $pos->y;\n\t\t$block->getPos()->z = $pos->z;\n\t\treturn $block;\n\t}\n\n\t/**\n\t * Turns back MULTIPLE data from singleBlockToData into blocks\n\t * @param array<array{int, Position|null}> $hackedBlockData\n\t * @return Block[]\n\t */\n\tpublic static function multipleDataToBlocks(array $hackedBlockData): array\n\t{\n\t\t$a = [];\n\t\tforeach ($hackedBlockData as $datum) {\n\t\t\t$a[] = self::singleDataToBlock($datum);\n\t\t}\n\t\treturn $a;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/ActionRegistry.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse xenialdan\\MagicWE2\\exception\\ActionNotFoundException;\n\nclass ActionRegistry\n{\n\t/** @var string[] */\n\tprivate static $actions = [];\n\n\tpublic function __construct()\n\t{\n\t\tself::registerAction(SetBlockAction::getName(), SetBlockAction::class);\n\t\t#self::registerAction(SetBiomeAction::getName(), SetBiomeAction::class);//TODO fix biome sending\n\t\t#self::registerAction(ThawAction::getName(), ThawAction::class);//TODO re-implement when i can ignore damage values in Shape::getBlocks\n\t\tself::registerAction(CountAction::getName(), CountAction::class);\n\t}\n\n\tpublic static function registerAction(string $name, string $class): void\n    {\n        self::$actions[$name] = $class;\n    }\n\n    /**\n     * @return array\n     */\n    public static function getActions(): array\n    {\n        return self::$actions;\n    }\n\n    /**\n     * @param string $name\n     * @return string\n     * @throws ActionNotFoundException\n     */\n    public static function getAction(string $name): string\n    {\n        if (isset(self::$actions[$name])) return self::$actions[$name];\n        throw new ActionNotFoundException(\"Action $name not found\");\n    }\n\n    /**\n     * @param string $actionClass\n     * @return string\n     * @throws ActionNotFoundException\n     */\n    public static function getActionName(string $actionClass): string\n    {\n        $names = array_flip(self::$actions);\n        if (isset($names[$actionClass])) return $names[$actionClass];\n        throw new ActionNotFoundException(\"Action $actionClass not found\");\n    }\n\n    public static function getDefaultActionProperties(string $className): array\n    {\n        return array_diff_key(get_class_vars($className), get_class_vars(TaskAction::class));\n    }\n\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/ClipboardAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse Generator;\nuse pocketmine\\math\\Vector3;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\selection\\Selection;\n\nabstract class ClipboardAction\n{\n\t/** @var string */\n\tpublic $prefix = \"\";\n\t/** @var string */\n\tpublic string $completionString = '{%name} succeed, took {%took}, {%changed} entries out of {%total} changed.';\n\t/** @var bool */\n\tpublic bool $addClipboard = false;\n\t/** @var null|Vector3 */\n\tpublic $clipboardVector;\n\n\t/**\n\t * @param string $sessionUUID\n\t * @param Selection $selection\n\t * @param null|int $changed\n\t * @param SingleClipboard $clipboard\n\t * @param string[] $messages\n\t * @return Generator|Progress[]\n\t */\n\tabstract public function execute(string $sessionUUID, Selection $selection, ?int &$changed, SingleClipboard &$clipboard, array &$messages = []): Generator;\n\n\tabstract public static function getName(): string;\n\n\t/**\n\t * @param Vector3|null $clipboardVector\n\t */\n\tpublic function setClipboardVector(?Vector3 $clipboardVector): void\n\t{\n\t\tif ($clipboardVector instanceof Vector3) $clipboardVector = $clipboardVector->asVector3()->floor();\n\t\t$this->clipboardVector = $clipboardVector;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/CountAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockFactory;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\selection\\Selection;\n\nclass CountAction extends TaskAction\n{\n\t/** @var bool */\n\tpublic $addRevert = false;\n\t/** @var string */\n\tpublic $completionString = '{%name} succeed, took {%took}, analyzed {%changed} blocks';\n\n\tpublic function __construct()\n\t{\n\t}\n\n\tpublic static function getName(): string\n\t{\n\t\treturn \"Analyze\";\n\t}\n\n    /**\n     * @param string $sessionUUID\n     * @param Selection $selection\n     * @param AsyncChunkManager $manager\n     * @param null|int $changed\n     * @param Block[] $newBlocks\n     * @param Block[] $blockFilter\n     * @param SingleClipboard $oldBlocksSingleClipboard blocks before the change\n     * @param string[] $messages\n     * @return Generator|Progress[]\n     * @throws Exception\n     */\n    public function execute(string $sessionUUID, Selection $selection, AsyncChunkManager $manager, ?int &$changed, array $newBlocks, array $blockFilter, SingleClipboard $oldBlocksSingleClipboard, array &$messages = []): Generator\n\t{\n\t\t$changed = 0;\n\t\t#$oldBlocks = [];\n\t\t$count = $selection->getShape()->getTotalCount();\n\t\t$lastProgress = new Progress(0, \"\");\n\t\t$counts = [];\n\t\tBlockFactory::getInstance();\n\t\tforeach ($selection->getShape()->getBlocks($manager, $newBlocks) as $block) {\n\t\t\t$block1 = $manager->getBlockArrayAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ());\n\t\t\t$tostring = (BlockFactory::getInstance()->get($block1[0], $block1[1]))->getName() . \" \" . $block1[0] . \":\" . $block1[1];\n\t\t\tif (!array_key_exists($tostring, $counts)) $counts[$tostring] = 0;\n\t\t\t$counts[$tostring]++;\n\t\t\t$changed++;\n\t\t\t$progress = new Progress($changed / $count, \"$changed blocks out of $count\");\n\t\t\tif (floor($progress->progress * 100) > floor($lastProgress->progress * 100)) {\n\t\t\t\tyield $progress;\n\t\t\t\t$lastProgress = $progress;\n            }\n        }\n        $messages[] = TF::DARK_AQUA . count($counts) . \" blocks found in a total of $count blocks\";\n        uasort($counts, static function ($a, $b) {\n\t\t\tif ($a === $b) return 0;\n\t\t\treturn ($a > $b) ? -1 : 1;\n\t\t});\n        foreach ($counts as $block => $countb) {\n            $messages[] = TF::AQUA . $countb . \"x | \" . round($countb / $count * 100) . \"% | \" . $block;\n        }\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/CutAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\BlockEntry;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\selection\\Selection;\n\nclass CutAction extends TaskAction\n{\n\t/** @var string */\n\tpublic $completionString = '{%name} succeed, took {%took}, {%changed} blocks out of {%total} cut.';\n#\t/** @var bool */\n#\tpublic $addRevert = true;\n\t/** @var bool */\n\tpublic $addClipboard = true;\n\n\tpublic function __construct()\n\t{\n\t}\n\n\tpublic static function getName(): string\n\t{\n\t\treturn \"Cut\";\n\t}\n\n    /**\n     * @param string $sessionUUID\n     * @param Selection $selection\n     * @param AsyncChunkManager $manager\n     * @param null|int $changed\n     * @param Block[] $newBlocks\n     * @param Block[] $blockFilter\n     * @param SingleClipboard $oldBlocksSingleClipboard blocks before the change\n     * @param string[] $messages\n     * @return Generator|Progress[]\n     * @throws Exception\n     */\n    public function execute(string $sessionUUID, Selection $selection, AsyncChunkManager $manager, ?int &$changed, array $newBlocks, array $blockFilter, SingleClipboard $oldBlocksSingleClipboard, array &$messages = []): Generator\n\t{\n\t\t$changed = 0;\n\t\t$i = 0;\n\t\t#$oldBlocks = [];\n\t\t$count = $selection->getShape()->getTotalCount();\n\t\t$lastProgress = new Progress(0, \"\");\n\t\t$min = $selection->getShape()->getMinVec3();\n\t\tforeach ($selection->getShape()->getBlocks($manager, $blockFilter) as $block) {\n\t\t\t$new = clone $newBlocks[array_rand($newBlocks)];\n\t\t\tif ($new->getId() === $block->getId() && $new->getMeta() === $block->getMeta()) continue;//skip same blocks\n\t\t\t#$oldBlocks[] = API::setComponents($manager->getBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ()),$block->x, $block->y, $block->z);\n\t\t\t$newv3 = $block->getPos()->subtractVector($min)->floor();//TODO check if only used for clipboard\n\t\t\t$oldBlocksSingleClipboard->addEntry($newv3->getFloorX(), $newv3->getFloorY(), $newv3->getFloorZ(), BlockEntry::fromBlock($block));\n\t\t\t$manager->setBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ(), $new);\n\t\t\tif ($manager->getBlockArrayAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ()) !== [$block->getId(), $block->getMeta()]) {\n\t\t\t\t$changed++;\n\t\t\t}\n\t\t\t$i++;\n\t\t\t$progress = new Progress($i / $count, \"Changed {$changed} blocks out of {$count}\");\n\t\t\tif (floor($progress->progress * 100) > floor($lastProgress->progress * 100)) {\n\t\t\t\tyield $progress;\n\t\t\t\t$lastProgress = $progress;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/FlipAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse Exception;\nuse Generator;\nuse InvalidArgumentException;\nuse pocketmine\\block\\BlockFactory;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\helper\\BlockEntry;\nuse xenialdan\\MagicWE2\\helper\\BlockStatesParser;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\selection\\Selection;\n\nclass FlipAction extends ClipboardAction\n{\n\tpublic const AXIS_X = \"x\";\n\tpublic const AXIS_Y = \"y\";\n\tpublic const AXIS_Z = \"z\";\n\tpublic const AXIS_XZ = \"xz\";\n\t/** @var bool */\n\tpublic bool $addClipboard = true;\n\t/** @var string */\n\tpublic string $completionString = '{%name} succeed, took {%took}, flipped {%changed} blocks out of {%total}';\n\t/** @var string */\n\tprivate $axis;\n\n\tpublic function __construct(string $axis)//TODO use pm Axis\n\t{\n\t\tif ($axis !== self::AXIS_X && $axis !== self::AXIS_Y && $axis !== self::AXIS_Z && $axis !== self::AXIS_XZ) throw new InvalidArgumentException(\"Invalid axis $axis given\");\n\t\t$this->axis = $axis;\n\t}\n\n\tpublic static function getName(): string\n\t{\n\t\treturn \"Flip\";\n\t}\n\n    /**\n     * @param string $sessionUUID\n     * @param Selection $selection\n     * @param null|int $changed\n     * @param SingleClipboard $clipboard\n     * @param string[] $messages\n     * @return Generator|Progress[]\n     * @throws Exception\n     */\n    public function execute(string $sessionUUID, Selection $selection, ?int &$changed, SingleClipboard &$clipboard, array &$messages = []): Generator\n\t{\n\t\t//TODO modify position. For now, just flip the blocks around their own axis\n\t\t$changed = 0;\n\t\t#$oldBlocks = [];\n\t\t$count = $selection->getShape()->getTotalCount();\n\t\t$lastProgress = new Progress(0, \"\");\n\t\tBlockFactory::getInstance();\n\t\t$clonedClipboard = clone $clipboard;\n\t\t$x = $y = $z = null;\n\t\t$maxX = $clipboard->selection->getSizeX() - 1;\n        $maxY = $clipboard->selection->getSizeY() - 1;\n        $maxZ = $clipboard->selection->getSizeZ() - 1;\n        foreach ($clipboard->iterateEntries($x, $y, $z) as $blockEntry) {\n            #var_dump(\"$x $y $z\");\n            if ($this->axis === self::AXIS_Z || $this->axis === self::AXIS_XZ)\n                $x = $maxX - $x;\n            if ($this->axis === self::AXIS_X || $this->axis === self::AXIS_XZ)\n                $z = $maxZ - $z;\n            if ($this->axis === self::AXIS_Y)\n                $y = $maxY - $y;\n            #var_dump(\"$x $y $z\");\n\t\t\t$block1 = $blockEntry->toBlock();\n\t\t\t$blockStatesEntry = BlockStatesParser::getInstance()::getStateByBlock($block1);\n\t\t\t$mirrored = $blockStatesEntry->mirror($this->axis);\n            $block = $mirrored->toBlock();\n            $entry = BlockEntry::fromBlock($block);\n\t\t\t//var_dump($blockStatesEntry->__toString(), $mirrored->__toString(), $block);\n            /** @var int $x */\n            /** @var int $y */\n            /** @var int $z */\n            $clonedClipboard->addEntry($x, $y, $z, $entry);\n            $changed++;\n            $progress = new Progress($changed / $count, \"$changed/$count\");\n            if (floor($progress->progress * 100) > floor($lastProgress->progress * 100)) {\n                yield $progress;\n                $lastProgress = $progress;\n            }\n        }\n        $clipboard = $clonedClipboard;\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/RotateAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse Exception;\nuse Generator;\nuse InvalidArgumentException;\nuse pocketmine\\block\\BlockFactory;\nuse pocketmine\\math\\Vector3;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\helper\\BlockEntry;\nuse xenialdan\\MagicWE2\\helper\\BlockStatesParser;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\selection\\Selection;\nuse xenialdan\\MagicWE2\\selection\\shape\\Cuboid;\n\nclass RotateAction extends ClipboardAction\n{\n\tpublic const ROTATE_90 = 90;\n\tpublic const ROTATE_180 = 180;\n\tpublic const ROTATE_270 = 270;\n\t/** @var bool */\n\tpublic bool $addClipboard = true;\n\t/** @var string */\n\tpublic string $completionString = '{%name} succeed, took {%took}, rotated {%changed} blocks out of {%total}';\n\t/** @var int */\n\tprivate int $rotation;\n\t/** @var bool */\n\tpublic bool $aroundOrigin = true;\n\n\tpublic function __construct(int $rotation, bool $aroundOrigin = true)\n\t{\n\t\tif ($rotation !== self::ROTATE_90 && $rotation !== self::ROTATE_180 && $rotation !== self::ROTATE_270) throw new InvalidArgumentException(\"Invalid rotation $rotation given\");\n\t\t$this->rotation = $rotation;\n\t\t$this->addClipboard = $aroundOrigin;\n\t}\n\n\tpublic static function getName(): string\n\t{\n        return \"Rotate\";\n    }\n\n    /**\n     * @param string $sessionUUID\n     * @param Selection $selection\n     * @param null|int $changed\n     * @param SingleClipboard $clipboard\n     * @param string[] $messages\n     * @return Generator|Progress[]\n     * @throws Exception\n     */\n\tpublic function execute(string $sessionUUID, Selection $selection, ?int &$changed, SingleClipboard &$clipboard, array &$messages = []): Generator\n\t{\n\t\t//TODO modify position. For now, just flip the blocks around their own axis\n\t\t$changed = 0;\n\t\t#$oldBlocks = [];\n\t\t$count = $selection->getShape()->getTotalCount();\n\t\t$lastProgress = new Progress(0, \"\");\n\t\tBlockFactory::getInstance();\n\t\t$clonedClipboard = clone $clipboard;\n\t\t$clonedClipboard->clear();\n\t\t$x = $y = $z = null;\n\t\t$maxX = $clipboard->selection->getSizeX() - 1;\n\t\t$maxZ = $clipboard->selection->getSizeZ() - 1;\n\t\tforeach ($clipboard->iterateEntries($x, $y, $z) as $blockEntry) {//only fully works if xyz is positive //TODO make sure this is always positive, see next comment\n\t\t\t#var_dump(\"$x $y $z\");\n\t\t\t$newX = $x;\n\t\t\t$newZ = $z;\n\t\t\t//TODO if aroundOrigin is true (or false, unsure right now), modify the paste vector instead, and always keep the blocks in the positive range?\n\t\t\tif ($this->rotation === self::ROTATE_90) {\n\t\t\t\t$newX = -$z;\n\t\t\t\t$newZ = $x;\n\t\t\t\tif ($this->aroundOrigin) {\n\t\t\t\t\t$newX += $maxZ;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($this->rotation === self::ROTATE_180) {\n\t\t\t\t$newX = -$x;\n\t\t\t\t$newZ = -$z;\n\t\t\t\tif ($this->aroundOrigin) {\n\t\t\t\t\t$newX += $maxX;\n\t\t\t\t\t$newZ += $maxZ;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ($this->rotation === self::ROTATE_270) {\n\t\t\t\t$newX = $z;\n\t\t\t\t$newZ = -$x;\n\t\t\t\tif ($this->aroundOrigin) {\n\t\t\t\t\t$newZ += $maxX;\n\t\t\t\t}\n\t\t\t}\n\t\t\t#var_dump(\"$newX $y $newZ\");\n\t\t\t$block1 = $blockEntry->toBlock();\n\t\t\t/** @var BlockStatesParser $instance */\n\t\t\t$instance = BlockStatesParser::getInstance();\n\t\t\t$blockStatesEntry = $instance::getStateByBlock($block1);\n\t\t\t$rotated = $blockStatesEntry->rotate($this->rotation);\n\t\t\t$block = $rotated->toBlock();\n\t\t\t$entry = BlockEntry::fromBlock($block);\n\t\t\t#var_dump($blockStatesEntry->__toString(), $rotated->__toString(), $entry);\n\t\t\t/** @var int $y */\n\t\t\t$clonedClipboard->addEntry($newX, $y, $newZ, $entry);\n\t\t\t$changed++;\n\t\t\t$progress = new Progress($changed / $count, \"$changed/$count\");\n\t\t\tif (floor($progress->progress * 100) > floor($lastProgress->progress * 100)) {\n\t\t\t\tyield $progress;\n\t\t\t\t$lastProgress = $progress;\n\t\t\t}\n\t\t}\n\n\t\t$clonedSelection = $clonedClipboard->selection;\n\t\t$pos1 = $clonedSelection->pos1;\n\t\t$pos2 = $clonedSelection->pos2;\n\t\tif ($this->rotation === self::ROTATE_90) {//TODO rewrite to be cleaner\n\t\t\t#$pos2 = $pos2->setComponents($pos1->x, $pos2->y, $pos1->z + $maxX);\n\t\t\t$pos2 = new Vector3($pos1->x, $pos2->y, $pos1->z + $maxX);\n\t\t\t$pos1 = $pos1->subtract($maxZ, 0, 0);\n\t\t\tif ($this->aroundOrigin) {\n\t\t\t\t$pos1 = $pos1->add($maxZ, 0, 0);\n\t\t\t\t$pos2 = $pos2->add($maxZ, 0, 0);\n\t\t\t}\n\t\t}\n\t\tif ($this->rotation === self::ROTATE_180) {\n\t\t\tif (!$this->aroundOrigin) {\n\t\t\t\t$pos1 = $pos1->subtract($maxX, 0, $maxZ);\n\t\t\t\t$pos2 = $pos2->subtract($maxX, 0, $maxZ);\n\t\t\t}\n\t\t}\n\t\tif ($this->rotation === self::ROTATE_270) {//TODO rewrite to be cleaner\n\t\t\t#$pos2 = $pos2->setComponents($pos1->x + $maxZ, $pos2->y, $pos1->z);\n\t\t\t$pos2 = new Vector3($pos1->x + $maxZ, $pos2->y, $pos1->z);\n\t\t\t$pos1 = $pos1->subtract(0, 0, $maxX);\n\t\t\tif ($this->aroundOrigin) {\n\t\t\t\t$pos1 = $pos1->add(0, 0, $maxX);\n\t\t\t\t$pos2 = $pos2->add(0, 0, $maxX);\n\t\t\t}\n\t\t}\n\t\t$clonedSelection->shape = (Cuboid::constructFromPositions($pos1, $pos2));//TODO figure out how to keep the shape (not always Cuboid)\n\t\t$clonedClipboard->selection = $clonedSelection;\n\t\t$clipboard = $clonedClipboard;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/SetBiomeAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\selection\\Selection;\n\nclass SetBiomeAction extends TaskAction\n{\n\t/** @var bool */\n\tpublic $addRevert = false;\n\t/** @var int */\n\tprivate $biomeId;\n\n\tpublic function __construct(int $biomeId)\n\t{\n\t\t$this->biomeId = $biomeId;\n\t}\n\n\tpublic static function getName(): string\n\t{\n\t\treturn \"Set biome\";\n\t}\n\n    /**\n     * @param string $sessionUUID\n     * @param Selection $selection\n     * @param AsyncChunkManager $manager\n     * @param null|int $changed\n     * @param Block[] $newBlocks\n     * @param Block[] $blockFilter\n     * @param SingleClipboard $oldBlocksSingleClipboard blocks before the change\n     * @param string[] $messages\n     * @return Generator|Progress[]\n     * @throws Exception\n     */\n    public function execute(string $sessionUUID, Selection $selection, AsyncChunkManager $manager, ?int &$changed, array $newBlocks, array $blockFilter, SingleClipboard $oldBlocksSingleClipboard, array &$messages = []): Generator\n\t{\n\t\t$changed = 0;\n\t\t#$oldBlocks = [];\n\t\t$count = null;\n\t\t$lastProgress = new Progress(0, \"\");\n\t\tforeach (($all = $selection->getShape()->getLayer($manager)) as $vec2) {\n\t\t\tif (is_null($count)) $count = count(iterator_to_array($all));\n\t\t\t$manager->getChunk($vec2->x >> 4, $vec2->y >> 4)->setBiomeId($vec2->x % 16, $vec2->y % 16, $this->biomeId);\n\t\t\t$changed++;\n\t\t\t$progress = new Progress($changed / $count, \"Changed Biome for $changed/$count blocks\");\n            if (floor($progress->progress * 100) > floor($lastProgress->progress * 100)) {\n                yield $progress;\n                $lastProgress = $progress;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/SetBlockAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\BlockEntry;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\selection\\Selection;\n\nclass SetBlockAction extends TaskAction\n{\n\n    public function __construct()\n    {\n    }\n\n    public static function getName(): string\n    {\n        return \"Set block\";\n    }\n\n    /**\n     * @param string $sessionUUID\n     * @param Selection $selection\n     * @param AsyncChunkManager $manager\n     * @param null|int $changed\n     * @param Block[] $newBlocks\n     * @param Block[] $blockFilter\n     * @param SingleClipboard $oldBlocksSingleClipboard blocks before the change\n     * @param string[] $messages\n     * @return Generator|Progress[]\n     * @throws Exception\n     */\n    public function execute(string $sessionUUID, Selection $selection, AsyncChunkManager $manager, ?int &$changed, array $newBlocks, array $blockFilter, SingleClipboard $oldBlocksSingleClipboard, array &$messages = []): Generator\n\t{\n\t\t$changed = 0;\n\t\t$i = 0;\n\t\t#$oldBlocks = [];\n\t\t$count = $selection->getShape()->getTotalCount();\n\t\t$lastProgress = new Progress(0, \"\");\n\t\tforeach ($selection->getShape()->getBlocks($manager, $blockFilter) as $block) {\n\t\t\t$new = clone $newBlocks[array_rand($newBlocks)];\n\t\t\tif ($new->getId() === $block->getId() && $new->getMeta() === $block->getMeta()) continue;//skip same blocks\n\t\t\t#$oldBlocks[] = API::setComponents($manager->getBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ()),$block->x, $block->y, $block->z);\n            $oldBlocksSingleClipboard->addEntry($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ(), BlockEntry::fromBlock($block));\n            $manager->setBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ(), $new);\n            if ($manager->getBlockArrayAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ()) !== [$block->getId(), $block->getMeta()]) {\n                $changed++;\n            }\n            $i++;\n            $progress = new Progress($i / $count, \"Changed {$changed} blocks out of {$count}\");\n            if (floor($progress->progress * 100) > floor($lastProgress->progress * 100)) {\n                yield $progress;\n                $lastProgress = $progress;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/TaskAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\math\\Vector3;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\selection\\Selection;\n\nabstract class TaskAction\n{\n\t/** @var string */\n\tpublic $prefix = \"\";\n\t/** @var bool */\n\tpublic $addRevert = true;\n\t/** @var string */\n\tpublic $completionString = '{%name} succeed, took {%took}, {%changed} blocks out of {%total} changed.';\n\t/** @var bool */\n\tpublic $addClipboard = false;\n\t/** @var null|Vector3 */\n\tpublic $clipboardVector;\n\t//TODO add $flags and define available flags in child classes\n\t//public $flags\n\t//protected const AVAILABLE_FLAGS = [];(can be overwritten), access with static::AVAILABLE_FLAGS\n\n\t/**\n\t * @param string $sessionUUID\n\t * @param Selection $selection\n\t * @param AsyncChunkManager $manager\n\t * @param null|int $changed\n\t * @param Block[] $newBlocks\n\t * @param Block[] $blockFilter\n\t * @param SingleClipboard $oldBlocksSingleClipboard blocks before the change\n\t * @param string[] $messages\n     * @return Generator|Progress[]\n     */\n\tabstract public function execute(string $sessionUUID, Selection $selection, AsyncChunkManager $manager, ?int &$changed, array $newBlocks, array $blockFilter, SingleClipboard $oldBlocksSingleClipboard, array &$messages = []): Generator;\n\n\tabstract public static function getName(): string;\n\n    /**\n     * @param Vector3|null $clipboardVector\n     */\n    public function setClipboardVector(?Vector3 $clipboardVector): void\n    {\n        if ($clipboardVector instanceof Vector3) $clipboardVector = $clipboardVector->asVector3()->floor();\n        $this->clipboardVector = $clipboardVector;\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/TestAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse pocketmine\\block\\BlockFactory;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\selection\\Selection;\n\nclass TestAction extends TaskAction\n{\n\t/** @var bool */\n\tpublic $addRevert = false;\n\t/** @var string */\n\tpublic $completionString = '{%name} succeed, took {%took}, tested {%changed} blocks';\n\n\tpublic function __construct()\n\t{\n\t}\n\n\tpublic static function getName(): string\n\t{\n\t\treturn \"Test\";\n\t}\n\n    /**\n     * @param string $sessionUUID\n     * @param Selection $selection\n     * @param AsyncChunkManager $manager\n     * @param null|int $changed\n     * @param Block[] $newBlocks\n     * @param Block[] $blockFilter\n     * @param SingleClipboard $oldBlocksSingleClipboard blocks before the change\n     * @param string[] $messages\n     * @return Generator|Progress[]\n     * @throws Exception\n     */\n    public function execute(string $sessionUUID, Selection $selection, AsyncChunkManager $manager, ?int &$changed, array $newBlocks, array $blockFilter, SingleClipboard $oldBlocksSingleClipboard, array &$messages = []): Generator\n\t{\n\t\t$changed = 0;\n\t\t#$oldBlocks = [];\n\t\t$count = $selection->getShape()->getTotalCount();\n\t\t$lastProgress = new Progress(0, \"\");\n\t\tBlockFactory::getInstance();\n\t\tforeach ($selection->getShape()->getBlocks($manager, []) as $block) {\n\t\t\t$changed++;\n\t\t\t$messages[] = $block->getPos()->asVector3()->__toString() . \" \" . $block->getName();\n\t\t\t$progress = new Progress($changed / $count, \"$changed/$count\");\n\t\t\tif (floor($progress->progress * 100) > floor($lastProgress->progress * 100)) {\n\t\t\t\tyield $progress;\n\t\t\t\t$lastProgress = $progress;\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/task/action/ThawAction.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\task\\action;\n\nuse Exception;\nuse Generator;\nuse pocketmine\\block\\Block;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\clipboard\\SingleClipboard;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\nuse xenialdan\\MagicWE2\\helper\\BlockEntry;\nuse xenialdan\\MagicWE2\\helper\\Progress;\nuse xenialdan\\MagicWE2\\selection\\Selection;\n\nclass ThawAction extends TaskAction\n{\n\n    public function __construct()\n    {\n    }\n\n    public static function getName(): string\n    {\n        return \"Thaw\";\n    }\n\n    /**\n\t * @param string $sessionUUID\n\t * @param Selection $selection\n\t * @param AsyncChunkManager $manager\n\t * @param null|int $changed\n\t * @param Block[] $newBlocks\n\t * @param Block[] $blockFilter\n\t * @param SingleClipboard $oldBlocksSingleClipboard blocks before the change\n\t * @param string[] $messages\n\t * @return Generator|Progress[]\n\t * @throws Exception\n\t * @noinspection SuspiciousAssignmentsInspection\n\t */\n\tpublic function execute(string $sessionUUID, Selection $selection, AsyncChunkManager $manager, ?int &$changed, array $newBlocks, array $blockFilter, SingleClipboard $oldBlocksSingleClipboard, array &$messages = []): Generator\n\t{\n\t\t$changed = 0;\n\t\t$i = 0;\n\t\t#$oldBlocks = [];\n\t\t$count = $selection->getShape()->getTotalCount();\n\t\t$lastProgress = new Progress(0, \"\");\n\n\t\t$m = [];\n\t\t$e = false;\n\t\t$blockFilter = API::blockParser(\"snow_block,snow_layer,ice\", $m, $e);\n\t\t$newBlocks = API::blockParser(\"air,air,water\", $m, $e);\n\t\tforeach ($blockFilter as $ib => $blockF) {\n\t\t\tforeach ($selection->getShape()->getBlocks($manager, [$blockF]) as $block) {\n\t\t\t\t$new = clone $newBlocks[$ib];\n\t\t\t\t#$oldBlocks[] = API::setComponents($manager->getBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ()),$block->x, $block->y, $block->z);\n\t\t\t\t$oldBlocksSingleClipboard->addEntry($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ(), BlockEntry::fromBlock($block));\n\t\t\t\t$manager->setBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ(), $new);\n\t\t\t\tif ($manager->getBlockAt($block->getPos()->getFloorX(), $block->getPos()->getFloorY(), $block->getPos()->getFloorZ())->getId() !== $block->getId()) {\n\t\t\t\t\t$changed++;\n\t\t\t\t}\n\t\t\t\t$i++;\n\t\t\t\t$progress = new Progress($i / $count, \"Changed {$changed} blocks out of {$count}\");\n\t\t\t\tif (floor($progress->progress * 100) > floor($lastProgress->progress * 100)) {\n\t\t\t\t\tyield $progress;\n\t\t\t\t\t$lastProgress = $progress;\n\t\t\t\t}\n\t\t\t}\n        }\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/tool/Brush.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\tool;\n\nuse Exception;\nuse InvalidArgumentException;\nuse JsonException;\nuse pocketmine\\data\\bedrock\\BiomeIds;\nuse pocketmine\\item\\Durable;\nuse pocketmine\\item\\enchantment\\EnchantmentInstance;\nuse pocketmine\\item\\Item;\nuse pocketmine\\item\\ItemFactory;\nuse pocketmine\\item\\ItemIds;\nuse pocketmine\\nbt\\tag\\CompoundTag;\nuse pocketmine\\player\\Player;\nuse pocketmine\\utils\\AssumptionFailedError;\nuse pocketmine\\utils\\TextFormat as TF;\nuse pocketmine\\uuid\\UUID;\nuse pocketmine\\world\\biome\\BiomeRegistry;\nuse ReflectionClass;\nuse TypeError;\nuse xenialdan\\customui\\elements\\Dropdown;\nuse xenialdan\\customui\\elements\\Input;\nuse xenialdan\\customui\\elements\\Label;\nuse xenialdan\\customui\\elements\\Toggle;\nuse xenialdan\\customui\\windows\\CustomForm;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\exception\\ActionNotFoundException;\nuse xenialdan\\MagicWE2\\exception\\SessionException;\nuse xenialdan\\MagicWE2\\exception\\ShapeNotFoundException;\nuse xenialdan\\MagicWE2\\helper\\SessionHelper;\nuse xenialdan\\MagicWE2\\Loader;\nuse xenialdan\\MagicWE2\\selection\\shape\\ShapeRegistry;\nuse xenialdan\\MagicWE2\\session\\UserSession;\nuse xenialdan\\MagicWE2\\task\\action\\ActionRegistry;\n\nclass Brush extends WETool\n{\n\tpublic const TAG_BRUSH_ID = \"id\";\n\tpublic const TAG_BRUSH_PROPERTIES = \"properties\";\n\n\t/** @var BrushProperties */\n\tpublic $properties;\n\n\t/**\n\t * Brush constructor.\n\t * @param BrushProperties $properties\n\t */\n\tpublic function __construct(BrushProperties $properties)\n\t{\n\t\t$this->properties = $properties;\n\t}\n\n\tpublic function getName(): string\n\t{\n\t\treturn $this->properties->getName();\n\t}\n\n\t/**\n\t * @return Item\n\t * @throws ActionNotFoundException\n\t * @throws InvalidArgumentException\n\t * @throws ShapeNotFoundException\n\t * @throws JsonException\n\t * @throws TypeError\n\t */\n\tpublic function toItem(): Item\n\t{\n\t\t/** @var Durable $item */\n\t\t$item = ItemFactory::getInstance()->get(ItemIds::WOODEN_SHOVEL);\n\t\t$item->addEnchantment(new EnchantmentInstance(Loader::$ench));\n\t\t$uuid = $this->properties->uuid ?? UUID::fromRandom()->toString();\n\t\t$this->properties->uuid = $uuid;\n\t\t$properties = json_encode($this->properties, JSON_THROW_ON_ERROR);\n\t\tif (!is_string($properties)) throw new InvalidArgumentException(\"Brush properties could not be decoded\");\n\t\t$item->getNamedTag()->setTag(API::TAG_MAGIC_WE_BRUSH,\n\t\t\tCompoundTag::create()\n\t\t\t\t->setString(\"id\", $uuid)\n\t\t\t\t->setInt(\"version\", $this->properties->version)\n\t\t\t\t->setString(\"properties\", $properties)\n\t\t);\n\t\t$item->setCustomName(Loader::PREFIX . TF::BOLD . TF::DARK_PURPLE . $this->getName());\n\t\t$item->setLore($this->properties->generateLore());\n\t\t$item->setUnbreakable();\n\t\treturn $item;\n\t}\n\n\t/**\n\t * @param bool $new true if creating new brush\n\t * @param array $errors\n\t * @return CustomForm\n\t * @throws Exception\n\t * @throws AssumptionFailedError\n\t */\n\tpublic function getForm(bool $new = true, array $errors = []): CustomForm\n\t{\n\t\ttry {\n\t\t\t$errors = array_map(static function ($value): string {\n\t\t\t\treturn TF::EOL . TF::RED . $value;\n\t\t\t}, $errors);\n\t\t\t$brushProperties = $this->properties ?? new BrushProperties();\n\t\t\t$form = new CustomForm(\"Brush settings\");\n\t\t\t// Shape\n\t\t\t#$form->addElement(new Label((isset($errors['shape']) ? TF::RED : \"\") . \"Shape\" . ($errors['shape'] ?? \"\")));\n\t\t\tif ($new) {\n\t\t\t\t$dropdownShape = new Dropdown((isset($errors['shape']) ? TF::RED : \"\") . \"Shape\" . ($errors['shape'] ?? \"\"));\n\t\t\t\tforeach (Loader::getShapeRegistry()::getShapes() as $name => $class) {\n\t\t\t\t\tif ($name === ShapeRegistry::CUSTOM) continue;\n                    $dropdownShape->addOption($name, $class === $brushProperties->shape);\n                }\n                $form->addElement($dropdownShape);\n            } else {\n                $form->addElement(new Label($brushProperties->getShapeName()));\n            }\n            // Action\n            $dropdownAction = new Dropdown(\"Action\");\n            foreach (ActionRegistry::getActions() as $name => $class) {\n                $dropdownAction->addOption($name, $class === $brushProperties->action);\n\t\t\t}\n\t\t\t$form->addElement($dropdownAction);\n\t\t\t// Name\n\t\t\t$form->addElement(new Input(\"Name\", \"Name\", $new ? \"\" : $this->getName()));\n\t\t\t// Blocks\n\t\t\t$form->addElement(new Input((isset($errors['blocks']) ? TF::RED : \"\") . \"Blocks\" . ($errors['blocks'] ?? \"\"), \"grass,stone:1\", $brushProperties->blocks));\n\t\t\t// Filter\n\t\t\t$form->addElement(new Input((isset($errors['filter']) ? TF::RED : \"\") . \"Filter\" . ($errors['filter'] ?? \"\"), \"air\", $brushProperties->filter));\n\t\t\t// Biome\n\t\t\t$dropdownBiome = new Dropdown((isset($errors['biome']) ? TF::RED : \"\") . \"Biome\" . ($errors['biome'] ?? \"\"));\n\t\t\tforeach ((new ReflectionClass(BiomeIds::class))->getConstants() as $name => $value) {\n\t\t\t\tif ($value === BiomeIds::HELL) continue;\n\t\t\t\t$dropdownBiome->addOption(BiomeRegistry::getInstance()->getBiome($value)->getName(), $value === $brushProperties->biomeId);\n\t\t\t}\n\t\t\t$form->addElement($dropdownBiome);\n\t\t\t// Hollow\n\t\t\t$form->addElement(new Toggle(\"Hollow\", $brushProperties->hollow));\n\t\t\t// Extra properties\n\t\t\tif (!$new) {\n\t\t\t\tforeach ($this->getExtradataForm($brushProperties->shape)->getContent() as $element) {\n\t\t\t\t\t$form->addElement($element);\n\t\t\t\t}\n\t\t\t}\n            // Function\n            $form->setCallable(function (Player $player, $data) use ($form, $new) {\n                #var_dump(__LINE__, $data);\n                #$data = array_slice($data, 0, 7);\n                [$shape, $action, $name, $blocks, $filter, $biome, $hollow] = $data;\n                $extraData = [];\n                #var_dump(__LINE__, array_slice($data, 7));\n                $base = ShapeRegistry::getDefaultShapeProperties(ShapeRegistry::getShape($shape));\n\t\t\t\tforeach (array_slice($data, 7, null, true) as $i => $value) {\n\t\t\t\t\t#var_dump($i, $value, gettype($value), gettype($base[lcfirst($form->getElement($i)->getText())]));\n\t\t\t\t\tif (is_int($base[lcfirst($form->getElement($i)->getText())])) $value = (int)$value;\n\t\t\t\t\t$extraData[lcfirst($form->getElement($i)->getText())] = $value;//TODO\n\t\t\t\t}\n\t\t\t\t#var_dump(__LINE__, $extraData);\n\t\t\t\t//prepare data\n\t\t\t\t$blocks = trim(TF::clean($blocks));\n\t\t\t\t$filter = trim(TF::clean($filter));\n\n\t\t\t\t$biomeNames = (new ReflectionClass(BiomeIds::class))->getConstants();\n\t\t\t\t$biomeNames = array_flip($biomeNames);\n\t\t\t\tunset($biomeNames[BiomeIds::HELL]);\n\t\t\t\tarray_walk($biomeNames, static function (&$value, $key) {\n\t\t\t\t\t$value = BiomeRegistry::getInstance()->getBiome($key)->getName();\n\t\t\t\t});\n\t\t\t\t$biomeId = array_search($biome, $biomeNames, true);\n\n\t\t\t\t//error checks\n\t\t\t\t$error = [];\n\t\t\t\ttry {\n\t\t\t\t\t$m = [];\n\t\t\t\t\t$e = false;\n\t\t\t\t\tAPI::blockParser($blocks, $m, $e);\n\t\t\t\t\tif ($e) throw new InvalidArgumentException(implode(TF::EOL, $m));\n\t\t\t\t\tif (empty($blocks)) throw new AssumptionFailedError(\"Blocks cannot be empty!\");\n\t\t\t\t} catch (Exception $ex) {\n                    $error['blocks'] = $ex->getMessage();\n                }\n                try {\n                    $m = [];\n                    $e = false;\n                    API::blockParser($filter, $m, $e);\n\t\t\t\t\tif ($e) throw new InvalidArgumentException(implode(TF::EOL, $m));\n                } catch (Exception $ex) {\n                    $error['filter'] = $ex->getMessage();\n                }\n                try {\n                    $shape = Loader::getShapeRegistry()::getShape($shape);\n                } catch (Exception $ex) {\n                    $error['shape'] = $ex->getMessage();\n                }\n                try {\n                    $action = Loader::getActionRegistry()::getAction($action);\n                } catch (Exception $ex) {\n                    $error['action'] = $ex->getMessage();\n                }\n                try {\n\t\t\t\t\tif (!is_int($biomeId)) throw new AssumptionFailedError(\"Biome not found\");\n                } catch (Exception $ex) {\n                    $error['biome'] = $ex->getMessage();\n                }\n\n                //Set properties (called before resending, so form contains errors)\n                if (!empty(trim(TF::clean($name)))) $this->properties->customName = $name;\n                if (!isset($error['shape'])) {\n                    $this->properties->shape = $shape;\n                    if (!$new && !empty($extraData))\n                        $this->properties->shapeProperties = $extraData;\n                }\n                if (!isset($error['action'])) $this->properties->action = $action;\n                /*if (!isset($error['blocks']))*/\n                $this->properties->blocks = $blocks;\n                /*if (!isset($error['filter']))*/\n                $this->properties->filter = $filter;\n                $this->properties->hollow = $hollow;\n\n                //Resend form upon error\n                if (!empty($error)) {\n                    $player->sendForm($this->getForm($new, $error));\n                    return;\n                }\n\n                //Debug\n                #print_r($extraData);\n                try {\n                    $brush = $this;\n                    $session = SessionHelper::getUserSession($player);\n                    if (!$session instanceof UserSession) {\n\t\t\t\t\t\tthrow new SessionException(Loader::getInstance()->getLanguage()->translateString('error.nosession', [Loader::getInstance()->getName()]));\n                    }\n                    if (!$new) {\n                        $session->replaceBrush($brush);\n                    } else {\n                        $player->sendForm($this->getExtradataForm($this->properties->shape));\n                    }\n                } catch (Exception $ex) {\n                    $player->sendMessage($ex->getMessage());\n                    Loader::getInstance()->getLogger()->logException($ex);\n                }\n            });\n            return $form;\n        } catch (Exception $e) {\n\t\t\tthrow new AssumptionFailedError(\"Could not create brush form\");\n        }\n    }\n\n    private function getExtradataForm(string $shapeClass): CustomForm\n    {\n        $form = new CustomForm(\"Shape settings\");\n        #foreach (($defaultReplaced = array_merge(ShapeRegistry::getDefaultShapeProperties($shapeClass), $this->properties->shapeProperties)) as $name => $value) {\n        $base = ShapeRegistry::getDefaultShapeProperties($shapeClass);\n        foreach (($defaultReplaced = array_replace($base, array_intersect_key($this->properties->shapeProperties, $base))) as $name => $value) {\n\t\t\tif (is_bool($value)) $form->addElement(new Toggle(ucfirst($name), $value));\n\t\t\telse $form->addElement(new Input(ucfirst($name), $name . \" (\" . gettype($value) . \")\", (string)$value));\n\t\t}\n        #var_dump($this->properties->shapeProperties);\n        #var_dump('Base', $base);\n        #var_dump('Default Replaced', $defaultReplaced);\n        $form->setCallable(function (Player $player, $data) use ($defaultReplaced, $base) {\n            //TODO validation, resending etc.\n            $extraData = [];\n            $names = array_keys($defaultReplaced);\n            foreach ($data as $index => $value) {\n\t\t\t\tif (is_int($base[$names[$index]])) $value = (int)$value;\n                $extraData[$names[$index]] = $value;\n            }\n            $this->properties->shapeProperties = $extraData;\n\n            $brush = $this;\n            $session = SessionHelper::getUserSession($player);\n            if (!$session instanceof UserSession) {\n\t\t\t\tthrow new SessionException(Loader::getInstance()->getLanguage()->translateString('error.nosession', [Loader::getInstance()->getName()]));\n            }\n            $this->properties->uuid = UUID::fromRandom()->toString();\n            $session->addBrush($brush);\n            $player->getInventory()->addItem($brush->toItem());\n        });\n        return $form;\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/tool/BrushProperties.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\tool;\n\nuse InvalidArgumentException;\nuse JsonSerializable;\nuse pocketmine\\data\\bedrock\\BiomeIds;\nuse pocketmine\\utils\\TextFormat as TF;\nuse xenialdan\\MagicWE2\\exception\\ActionNotFoundException;\nuse xenialdan\\MagicWE2\\exception\\ShapeNotFoundException;\nuse xenialdan\\MagicWE2\\selection\\shape\\Shape;\nuse xenialdan\\MagicWE2\\selection\\shape\\ShapeRegistry;\nuse xenialdan\\MagicWE2\\selection\\shape\\Sphere;\nuse xenialdan\\MagicWE2\\task\\action\\ActionRegistry;\nuse xenialdan\\MagicWE2\\task\\action\\SetBlockAction;\nuse xenialdan\\MagicWE2\\task\\action\\TaskAction;\n\nclass BrushProperties implements JsonSerializable\n{\n\n\tpublic const VERSION = 1;\n\t/** @var int */\n\tpublic $version = self::VERSION;\n\t/** @var string */\n\tpublic $customName = \"\";\n\t/** @var string */\n\tpublic $shape = Sphere::class;\n\t/** @var array */\n\tpublic $shapeProperties = [];\n\t/** @var string */\n\tpublic $action = SetBlockAction::class;\n\t/** @var array */\n\tpublic $actionProperties = [];\n\t/** @var bool */\n\tpublic $hollow = false;//TODO consider moving into shape properties\n\t/** @var string */\n\tpublic $blocks = \"stone\";\n\t/** @var string */\n\tpublic $filter = \"\";\n\t/** @var int */\n\tpublic $biomeId = BiomeIds::PLAINS;\n\t/** @var string */\n\tpublic $uuid;\n\n\t/**\n\t * Specify data which should be serialized to JSON\n\t * @link http://php.net/manual/en/jsonserializable.jsonserialize.php\n\t * @return mixed data which can be serialized by <b>json_encode</b>,\n\t * which is a value of any type other than a resource.\n\t * @since 5.4.0\n\t */\n\tpublic function jsonSerialize()\n\t{\n        return (array)$this;\n    }\n\n    /**\n     * @param array $json\n     * @return BrushProperties\n     * @throws InvalidArgumentException\n     */\n    public static function fromJson(array $json): BrushProperties\n    {\n        if (($json[\"version\"] ?? 0) !== self::VERSION) throw new InvalidArgumentException(\"Version mismatch\");\n        $properties = new self;\n        foreach ($json as $key => $value) {\n            $properties->$key = $value;\n        }\n        return $properties;\n    }\n\n    public function getName(): string\n    {\n        $str = \"\";\n        try {\n            $str = trim(($this->hasCustomName() ? $this->customName : $this->getShapeName()) /*. \" \" . $this->action->getName() . */);\n        } catch (ShapeNotFoundException $e) {\n        }\n        if (stripos(TF::clean($str), \"brush\") === false) {\n            $str .= \" Brush\";\n        }\n        return $str;\n    }\n\n    /**\n     * @return string\n     * @throws ShapeNotFoundException\n     */\n    public function getShapeName(): string\n    {\n        return is_subclass_of($this->shape, Shape::class) ? ShapeRegistry::getShapeName($this->shape) : \"\";\n    }\n\n    /**\n     * @return string\n     * @throws ActionNotFoundException\n     */\n    public function getActionName(): string\n    {\n        return is_subclass_of($this->action, TaskAction::class) ? ActionRegistry::getActionName($this->action) : \"\";\n    }\n\n    public function hasCustomName(): bool\n    {\n        return !empty($this->customName);\n    }\n\n    /**\n     * @param string $customName If empty, the name will be reset\n     */\n    public function setCustomName(string $customName = \"\"): void\n    {\n        $this->customName = $customName;\n    }\n\n    /**\n\t * @return array\n\t * @throws ActionNotFoundException\n\t * @throws ShapeNotFoundException\n\t * @noinspection NestedTernaryOperatorInspection\n\t */\n    public function generateLore(): array\n    {\n        $shapeProperties = array_map(static function ($k, $v): string {\n\t\t\treturn TF::GOLD . \"  \" . ucfirst($k) . \" = \" . (is_bool($v) ? ($v ? \"Yes\" : \"No\") : $v);\n\t\t}, array_keys($this->shapeProperties), $this->shapeProperties);\n\t\t$actionProperties = array_map(static function ($k, $v): string {\n\t\t\treturn TF::GOLD . \"  \" . ucfirst($k) . \" = \" . (is_bool($v) ? ($v ? \"Yes\" : \"No\") : $v);\n\t\t}, array_keys($this->actionProperties), $this->actionProperties);\n        return array_merge(\n            [\n                TF::GOLD . \"Shape: {$this->getShapeName()}\",\n            ],\n            $shapeProperties,\n            [\n                TF::GOLD . \"Action: {$this->getActionName()}\",\n            ],\n            $actionProperties,\n            [\n                TF::GOLD . \"Blocks: {$this->blocks}\",\n                TF::GOLD . \"Filter: {$this->filter}\",\n                TF::GOLD . \"Biome: {$this->biomeId}\",\n                TF::GOLD . \"Hollow: \" . ($this->hollow ? \"Yes\" : \"No\"),\n                //TF::GOLD . \"UUID: {$this->uuid}\",\n            ]\n        );\n    }\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/tool/Flood.php",
    "content": "<?php /** @noinspection PhpPrivateFieldCanBeLocalVariableInspection */\n\nnamespace xenialdan\\MagicWE2\\tool;\n\nuse Exception;\nuse Generator;\nuse InvalidArgumentException;\nuse pocketmine\\block\\Block;\nuse pocketmine\\math\\Facing;\nuse pocketmine\\math\\Vector2;\nuse pocketmine\\math\\Vector3;\nuse pocketmine\\world\\format\\Chunk;\nuse pocketmine\\world\\format\\io\\FastChunkSerializer;\nuse pocketmine\\world\\World;\nuse xenialdan\\MagicWE2\\API;\nuse xenialdan\\MagicWE2\\helper\\AsyncChunkManager;\n\nclass Flood extends WETool\n{\n\t/** @var int */\n\tprivate $limit;\n\t/** @var Block[] */\n\tprivate $walked = [];\n\t/** @var Block[] */\n\tprivate $nextToCheck = [];\n\t/** @var int */\n\tprivate $y;\n\n\t/**\n\t * Square constructor.\n\t * @param int $limit\n\t */\n\tpublic function __construct(int $limit)\n\t{\n\t\t$this->limit = $limit;\n\t}\n\n\t/**\n\t * Returns the blocks by their actual position\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param Block[] $filterblocks If not empty, applying a filter on the block list\n\t * @param int $flags\n\t * @return Generator|Block[]\n\t * @throws Exception\n\t */\n\tpublic function getBlocks($manager, array $filterblocks = [], int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\t$this->y = $this->getCenter()->getFloorY();\n\t\t$block = $manager->getBlockAt($this->getCenter()->getFloorX(), $this->getCenter()->getFloorY(), $this->getCenter()->getFloorZ());\n\t\t//$block = API::setComponents($block,$this->getCenter()->getFloorX(), $this->getCenter()->getFloorY(), $this->getCenter()->getFloorZ());\n\t\t$this->walked[] = $block;\n\t\t$this->nextToCheck = $this->walked;\n\t\tforeach ($this->walk($manager) as $block) {\n\t\t\tyield $block;\n\t\t}\n\t}\n\n\t/**\n\t * Returns a flat layer of all included x z positions in selection\n\t * @param World|AsyncChunkManager $manager The world or AsyncChunkManager\n\t * @param int $flags\n\t * @return Generator|Vector2[]\n\t * @throws Exception\n\t */\n\tpublic function getLayer($manager, int $flags = API::FLAG_BASE): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\tforeach ($this->getBlocks($manager, []) as $block) {\n\t\t\tyield new Vector2($block->getPos()->x, $block->getPos()->z);\n\t\t}\n\t}\n\n\t/**\n\t * @param World|AsyncChunkManager $manager\n\t * @return Block[]\n\t * @throws InvalidArgumentException\n\t * @noinspection SlowArrayOperationsInLoopInspection\n\t */\n\tprivate function walk($manager): array\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\t/** @var Block[] $walkTo */\n\t\t$walkTo = [];\n\t\tforeach ($this->nextToCheck as $next) {\n\t\t\t$sides = iterator_to_array($this->getHorizontalSides($manager, $next->getPos()));\n\t\t\t$walkTo = array_merge($walkTo, array_filter($sides, function (Block $side) use ($walkTo) {\n\t\t\t\treturn $side->getId() === 0 && !in_array($side, $walkTo, true) && !in_array($side, $this->walked, true) && !in_array($side, $this->nextToCheck, true) && $side->getPos()->distanceSquared($this->getCenter()) <= ($this->limit / M_PI);\n\t\t\t}));\n\t\t}\n\t\t$this->walked = array_merge($this->walked, $walkTo);\n\t\t$this->nextToCheck = $walkTo;\n\t\tif (!empty($this->nextToCheck)) $this->walk($manager);\n\t\treturn $this->walked;\n\t}\n\n\t/**\n\t * @param World|AsyncChunkManager $manager\n\t * @param Vector3 $vector3\n\t * @return Generator|Block[]\n\t * @throws InvalidArgumentException\n\t */\n\tprivate function getHorizontalSides($manager, Vector3 $vector3): Generator\n\t{\n\t\t$this->validateChunkManager($manager);\n\t\tforeach ([Facing::NORTH, Facing::SOUTH, Facing::WEST, Facing::EAST] as $vSide) {\n\t\t\t$side = $vector3->getSide($vSide);\n\t\t\tif ($manager->getChunk($side->x >> 4, $side->z >> 4) === null) continue;\n\t\t\t//$block = API::setComponents($block,$side->x, $side->y, $side->z);\n\t\t\tyield $manager->getBlockAt($side->getFloorX(), $side->getFloorY(), $side->getFloorZ());\n\t\t}\n\t}\n\n\tpublic function getTotalCount(): int\n\t{\n\t\treturn $this->limit;\n\t}\n\n\t/**\n\t * @param World|AsyncChunkManager $chunkManager\n\t * @return array\n\t * @throws InvalidArgumentException\n\t */\n\tpublic function getTouchedChunks($chunkManager): array\n\t{\n\t\t$this->validateChunkManager($chunkManager);\n\t\t$maxRadius = sqrt($this->limit / M_PI);\n\t\t$v2center = new Vector2($this->getCenter()->x, $this->getCenter()->z);\n\t\t$cv2center = new Vector2($this->getCenter()->x >> 4, $this->getCenter()->z >> 4);\n\t\t$maxX = ($v2center->x + $maxRadius) >> 4;\n\t\t$minX = ($v2center->x - $maxRadius) >> 4;\n\t\t$maxZ = ($v2center->y + $maxRadius) >> 4;\n\t\t$minZ = ($v2center->y - $maxRadius) >> 4;\n\t\t$cmaxRadius = $cv2center->distanceSquared($minX - 0.5, $minZ - 0.5);\n\t\t#print \"from $minX:$minZ to $maxX:$maxZ\" . PHP_EOL;\n\t\t$touchedChunks = [];\n\t\tfor ($x = $minX - 1; $x <= $maxX + 1; $x++) {\n\t\t\tfor ($z = $minZ - 1; $z <= $maxZ + 1; $z++) {\n\t\t\t\tif ($cv2center->distanceSquared($x, $z) > $cmaxRadius) continue;\n\t\t\t\t$chunk = $chunkManager->getChunk($x, $z);\n\t\t\t\tif ($chunk === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t#print \"Touched Chunk at: $x:$z\" . PHP_EOL;\n\t\t\t\t$touchedChunks[World::chunkHash($x, $z)] = FastChunkSerializer::serialize($chunk);\n\t\t\t}\n\t\t}\n\t\t#print \"Touched chunks count: \" . count($touchedChunks) . PHP_EOL;;\n\t\treturn $touchedChunks;\n\t}\n\n\tpublic function getName(): string\n\t{\n\t\treturn \"Flood Fill\";\n\t}\n\n\t/**\n\t * @param mixed $manager\n\t * @throws InvalidArgumentException\n\t */\n\tpublic function validateChunkManager($manager): void\n\t{\n\t\tif (!$manager instanceof World && !$manager instanceof AsyncChunkManager) throw new InvalidArgumentException(get_class($manager) . \" is not an instance of World or AsyncChunkManager\");\n\t}\n\n\tprivate function getCenter(): Vector3\n\t{\n\t\t//UGLY HACK TO IGNORE ERRORS FOR NOW\n\t\treturn new Vector3(0, 0, 0);\n\t}\n\n\t/**\n\t * Creates a chunk manager used for async editing\n\t * @param Chunk[] $chunks\n\t * @phpstan-param array<int, Chunk> $chunks\n\t * @return AsyncChunkManager\n\t */\n\tpublic static function getChunkManager(array $chunks): AsyncChunkManager\n\t{\n\t\t$manager = new AsyncChunkManager();\n\t\tforeach ($chunks as $hash => $chunk) {\n\t\t\tWorld::getXZ($hash, $x, $z);\n\t\t\t$manager->setChunk($x, $z, $chunk);\n\t\t}\n\t\treturn $manager;\n\t}\n}"
  },
  {
    "path": "src/xenialdan/MagicWE2/tool/WETool.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace xenialdan\\MagicWE2\\tool;\n\nabstract class WETool\n{\n\n    abstract public function getName(): string;\n\n}"
  }
]