├── .editorconfig ├── .gitignore ├── .poggit.yml ├── LICENSE ├── README.md ├── composer.json ├── composer.lock ├── phpstan.neon.dist ├── src └── SOFe │ └── AwaitStd │ ├── Await.php │ ├── AwaitStd.php │ ├── DisposableListener.php │ ├── DisposableSpec.php │ ├── DisposeException.php │ ├── EventAwaiter.php │ ├── EventQueueEntry.php │ └── PromiseRejectedException.php └── virion.yml /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.php] 4 | indent_style = tab 5 | indent_size = 4 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | -------------------------------------------------------------------------------- /.poggit.yml: -------------------------------------------------------------------------------- 1 | --- # Poggit-CI Manifest. Open the CI at https://poggit.pmmp.io/ci/SOF3/await-std 2 | build-by-default: true 3 | branches: 4 | - master 5 | projects: 6 | await-std: 7 | path: "" 8 | model: virion 9 | type: library 10 | libs: 11 | - src: SOF3/await-generator/await-generator 12 | version: "^3.3.0" 13 | epitope: .random 14 | ... 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # await-std 2 | Writing user-friendly PocketMine plugins fluently with await-generator style 3 | 4 | # ARCHIVED 5 | await-std contains several unrelated features 6 | that don't really fit well in the same repo. 7 | Maintaining such a bloated virion with the same versioning scheme 8 | is not exactly a good idea, 9 | especially when it is 10 | 11 | If you would like to continue maintaining this repo, 12 | feel free to fork it. 13 | However, I would recommend creating separate virions dedicated for each feature instead, 14 | e.g. an `await-event` virion and a `sleep` virion. 15 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sof3/await-std", 3 | "type": "library", 4 | "description": "Writing user-friendly PocketMine plugins fluently with await-generator style", 5 | "license": "Apache-2.0", 6 | "require": { 7 | "pocketmine/pocketmine-mp": "^4.0.0", 8 | "sof3/await-generator": "^3.3.0" 9 | }, 10 | "autoload": { 11 | "psr-0": { 12 | "SOFe\\AwaitStd\\": "src/" 13 | } 14 | }, 15 | "require-dev": { 16 | "phpstan/phpstan": "^0.12.84" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "ba5a4cb997286b30231d06678cd76539", 8 | "packages": [ 9 | { 10 | "name": "adhocore/json-comment", 11 | "version": "1.2.1", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/adhocore/php-json-comment.git", 15 | "reference": "651023f9fe52e9efa2198cbaf6e481d1968e2377" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/adhocore/php-json-comment/zipball/651023f9fe52e9efa2198cbaf6e481d1968e2377", 20 | "reference": "651023f9fe52e9efa2198cbaf6e481d1968e2377", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "ext-ctype": "*", 25 | "php": ">=7.0" 26 | }, 27 | "require-dev": { 28 | "phpunit/phpunit": "^6.5 || ^7.5 || ^8.5" 29 | }, 30 | "type": "library", 31 | "autoload": { 32 | "psr-4": { 33 | "Ahc\\Json\\": "src/" 34 | } 35 | }, 36 | "notification-url": "https://packagist.org/downloads/", 37 | "license": [ 38 | "MIT" 39 | ], 40 | "authors": [ 41 | { 42 | "name": "Jitendra Adhikari", 43 | "email": "jiten.adhikary@gmail.com" 44 | } 45 | ], 46 | "description": "Lightweight JSON comment stripper library for PHP", 47 | "keywords": [ 48 | "comment", 49 | "json", 50 | "strip-comment" 51 | ], 52 | "support": { 53 | "issues": "https://github.com/adhocore/php-json-comment/issues", 54 | "source": "https://github.com/adhocore/php-json-comment/tree/1.2.1" 55 | }, 56 | "funding": [ 57 | { 58 | "url": "https://paypal.me/ji10", 59 | "type": "custom" 60 | }, 61 | { 62 | "url": "https://github.com/adhocore", 63 | "type": "github" 64 | } 65 | ], 66 | "time": "2022-10-02T11:22:07+00:00" 67 | }, 68 | { 69 | "name": "brick/math", 70 | "version": "0.11.0", 71 | "source": { 72 | "type": "git", 73 | "url": "https://github.com/brick/math.git", 74 | "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" 75 | }, 76 | "dist": { 77 | "type": "zip", 78 | "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", 79 | "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", 80 | "shasum": "" 81 | }, 82 | "require": { 83 | "php": "^8.0" 84 | }, 85 | "require-dev": { 86 | "php-coveralls/php-coveralls": "^2.2", 87 | "phpunit/phpunit": "^9.0", 88 | "vimeo/psalm": "5.0.0" 89 | }, 90 | "type": "library", 91 | "autoload": { 92 | "psr-4": { 93 | "Brick\\Math\\": "src/" 94 | } 95 | }, 96 | "notification-url": "https://packagist.org/downloads/", 97 | "license": [ 98 | "MIT" 99 | ], 100 | "description": "Arbitrary-precision arithmetic library", 101 | "keywords": [ 102 | "Arbitrary-precision", 103 | "BigInteger", 104 | "BigRational", 105 | "arithmetic", 106 | "bigdecimal", 107 | "bignum", 108 | "brick", 109 | "math" 110 | ], 111 | "support": { 112 | "issues": "https://github.com/brick/math/issues", 113 | "source": "https://github.com/brick/math/tree/0.11.0" 114 | }, 115 | "funding": [ 116 | { 117 | "url": "https://github.com/BenMorel", 118 | "type": "github" 119 | } 120 | ], 121 | "time": "2023-01-15T23:15:59+00:00" 122 | }, 123 | { 124 | "name": "fgrosse/phpasn1", 125 | "version": "v2.5.0", 126 | "source": { 127 | "type": "git", 128 | "url": "https://github.com/fgrosse/PHPASN1.git", 129 | "reference": "42060ed45344789fb9f21f9f1864fc47b9e3507b" 130 | }, 131 | "dist": { 132 | "type": "zip", 133 | "url": "https://api.github.com/repos/fgrosse/PHPASN1/zipball/42060ed45344789fb9f21f9f1864fc47b9e3507b", 134 | "reference": "42060ed45344789fb9f21f9f1864fc47b9e3507b", 135 | "shasum": "" 136 | }, 137 | "require": { 138 | "php": "^7.1 || ^8.0" 139 | }, 140 | "require-dev": { 141 | "php-coveralls/php-coveralls": "~2.0", 142 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" 143 | }, 144 | "suggest": { 145 | "ext-bcmath": "BCmath is the fallback extension for big integer calculations", 146 | "ext-curl": "For loading OID information from the web if they have not bee defined statically", 147 | "ext-gmp": "GMP is the preferred extension for big integer calculations", 148 | "phpseclib/bcmath_compat": "BCmath polyfill for servers where neither GMP nor BCmath is available" 149 | }, 150 | "type": "library", 151 | "extra": { 152 | "branch-alias": { 153 | "dev-master": "2.0.x-dev" 154 | } 155 | }, 156 | "autoload": { 157 | "psr-4": { 158 | "FG\\": "lib/" 159 | } 160 | }, 161 | "notification-url": "https://packagist.org/downloads/", 162 | "license": [ 163 | "MIT" 164 | ], 165 | "authors": [ 166 | { 167 | "name": "Friedrich Große", 168 | "email": "friedrich.grosse@gmail.com", 169 | "homepage": "https://github.com/FGrosse", 170 | "role": "Author" 171 | }, 172 | { 173 | "name": "All contributors", 174 | "homepage": "https://github.com/FGrosse/PHPASN1/contributors" 175 | } 176 | ], 177 | "description": "A PHP Framework that allows you to encode and decode arbitrary ASN.1 structures using the ITU-T X.690 Encoding Rules.", 178 | "homepage": "https://github.com/FGrosse/PHPASN1", 179 | "keywords": [ 180 | "DER", 181 | "asn.1", 182 | "asn1", 183 | "ber", 184 | "binary", 185 | "decoding", 186 | "encoding", 187 | "x.509", 188 | "x.690", 189 | "x509", 190 | "x690" 191 | ], 192 | "support": { 193 | "issues": "https://github.com/fgrosse/PHPASN1/issues", 194 | "source": "https://github.com/fgrosse/PHPASN1/tree/v2.5.0" 195 | }, 196 | "abandoned": true, 197 | "time": "2022-12-19T11:08:26+00:00" 198 | }, 199 | { 200 | "name": "netresearch/jsonmapper", 201 | "version": "v4.2.0", 202 | "source": { 203 | "type": "git", 204 | "url": "https://github.com/cweiske/jsonmapper.git", 205 | "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" 206 | }, 207 | "dist": { 208 | "type": "zip", 209 | "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", 210 | "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", 211 | "shasum": "" 212 | }, 213 | "require": { 214 | "ext-json": "*", 215 | "ext-pcre": "*", 216 | "ext-reflection": "*", 217 | "ext-spl": "*", 218 | "php": ">=7.1" 219 | }, 220 | "require-dev": { 221 | "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", 222 | "squizlabs/php_codesniffer": "~3.5" 223 | }, 224 | "type": "library", 225 | "autoload": { 226 | "psr-0": { 227 | "JsonMapper": "src/" 228 | } 229 | }, 230 | "notification-url": "https://packagist.org/downloads/", 231 | "license": [ 232 | "OSL-3.0" 233 | ], 234 | "authors": [ 235 | { 236 | "name": "Christian Weiske", 237 | "email": "cweiske@cweiske.de", 238 | "homepage": "http://github.com/cweiske/jsonmapper/", 239 | "role": "Developer" 240 | } 241 | ], 242 | "description": "Map nested JSON structures onto PHP classes", 243 | "support": { 244 | "email": "cweiske@cweiske.de", 245 | "issues": "https://github.com/cweiske/jsonmapper/issues", 246 | "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" 247 | }, 248 | "time": "2023-04-09T17:37:40+00:00" 249 | }, 250 | { 251 | "name": "pocketmine/bedrock-block-upgrade-schema", 252 | "version": "2.1.0", 253 | "source": { 254 | "type": "git", 255 | "url": "https://github.com/pmmp/BedrockBlockUpgradeSchema.git", 256 | "reference": "1c07ced86be7d185551082441b5a2b9b7fbd6b21" 257 | }, 258 | "dist": { 259 | "type": "zip", 260 | "url": "https://api.github.com/repos/pmmp/BedrockBlockUpgradeSchema/zipball/1c07ced86be7d185551082441b5a2b9b7fbd6b21", 261 | "reference": "1c07ced86be7d185551082441b5a2b9b7fbd6b21", 262 | "shasum": "" 263 | }, 264 | "type": "library", 265 | "notification-url": "https://packagist.org/downloads/", 266 | "license": [ 267 | "CC0-1.0" 268 | ], 269 | "description": "Schemas describing how to upgrade saved block data in older Minecraft: Bedrock Edition world saves", 270 | "support": { 271 | "issues": "https://github.com/pmmp/BedrockBlockUpgradeSchema/issues", 272 | "source": "https://github.com/pmmp/BedrockBlockUpgradeSchema/tree/2.1.0" 273 | }, 274 | "time": "2023-04-19T17:58:49+00:00" 275 | }, 276 | { 277 | "name": "pocketmine/bedrock-data", 278 | "version": "2.2.0+bedrock-1.19.80", 279 | "source": { 280 | "type": "git", 281 | "url": "https://github.com/pmmp/BedrockData.git", 282 | "reference": "33dd83601442b377af42ac91473278243cafd576" 283 | }, 284 | "dist": { 285 | "type": "zip", 286 | "url": "https://api.github.com/repos/pmmp/BedrockData/zipball/33dd83601442b377af42ac91473278243cafd576", 287 | "reference": "33dd83601442b377af42ac91473278243cafd576", 288 | "shasum": "" 289 | }, 290 | "type": "library", 291 | "notification-url": "https://packagist.org/downloads/", 292 | "license": [ 293 | "CC0-1.0" 294 | ], 295 | "description": "Blobs of data generated from Minecraft: Bedrock Edition, used by PocketMine-MP", 296 | "support": { 297 | "issues": "https://github.com/pmmp/BedrockData/issues", 298 | "source": "https://github.com/pmmp/BedrockData/tree/bedrock-1.19.80" 299 | }, 300 | "time": "2023-04-26T20:00:35+00:00" 301 | }, 302 | { 303 | "name": "pocketmine/bedrock-item-upgrade-schema", 304 | "version": "1.2.0", 305 | "source": { 306 | "type": "git", 307 | "url": "https://github.com/pmmp/BedrockItemUpgradeSchema.git", 308 | "reference": "dd804c3f2b1e8990434812627e62eb5bde9670a5" 309 | }, 310 | "dist": { 311 | "type": "zip", 312 | "url": "https://api.github.com/repos/pmmp/BedrockItemUpgradeSchema/zipball/dd804c3f2b1e8990434812627e62eb5bde9670a5", 313 | "reference": "dd804c3f2b1e8990434812627e62eb5bde9670a5", 314 | "shasum": "" 315 | }, 316 | "type": "library", 317 | "notification-url": "https://packagist.org/downloads/", 318 | "license": [ 319 | "CC0-1.0" 320 | ], 321 | "description": "JSON schemas for upgrading items found in older Minecraft: Bedrock world saves", 322 | "support": { 323 | "issues": "https://github.com/pmmp/BedrockItemUpgradeSchema/issues", 324 | "source": "https://github.com/pmmp/BedrockItemUpgradeSchema/tree/1.2.0" 325 | }, 326 | "time": "2023-04-19T18:16:14+00:00" 327 | }, 328 | { 329 | "name": "pocketmine/bedrock-protocol", 330 | "version": "21.0.1+bedrock-1.19.80", 331 | "source": { 332 | "type": "git", 333 | "url": "https://github.com/pmmp/BedrockProtocol.git", 334 | "reference": "981ea2e76e207a25c1361df858c639feba5cf348" 335 | }, 336 | "dist": { 337 | "type": "zip", 338 | "url": "https://api.github.com/repos/pmmp/BedrockProtocol/zipball/981ea2e76e207a25c1361df858c639feba5cf348", 339 | "reference": "981ea2e76e207a25c1361df858c639feba5cf348", 340 | "shasum": "" 341 | }, 342 | "require": { 343 | "ext-json": "*", 344 | "netresearch/jsonmapper": "^4.0", 345 | "php": "^8.0", 346 | "pocketmine/binaryutils": "^0.2.0", 347 | "pocketmine/color": "^0.2.0 || ^0.3.0", 348 | "pocketmine/math": "^0.3.0 || ^0.4.0", 349 | "pocketmine/nbt": "^0.3.0", 350 | "ramsey/uuid": "^4.1" 351 | }, 352 | "require-dev": { 353 | "phpstan/phpstan": "1.10.7", 354 | "phpstan/phpstan-phpunit": "^1.0.0", 355 | "phpstan/phpstan-strict-rules": "^1.0.0", 356 | "phpunit/phpunit": "^9.5" 357 | }, 358 | "type": "library", 359 | "autoload": { 360 | "psr-4": { 361 | "pocketmine\\network\\mcpe\\protocol\\": "src/" 362 | } 363 | }, 364 | "notification-url": "https://packagist.org/downloads/", 365 | "license": [ 366 | "LGPL-3.0" 367 | ], 368 | "description": "An implementation of the Minecraft: Bedrock Edition protocol in PHP", 369 | "support": { 370 | "issues": "https://github.com/pmmp/BedrockProtocol/issues", 371 | "source": "https://github.com/pmmp/BedrockProtocol/tree/21.0.1+bedrock-1.19.80" 372 | }, 373 | "time": "2023-04-26T21:00:01+00:00" 374 | }, 375 | { 376 | "name": "pocketmine/binaryutils", 377 | "version": "0.2.4", 378 | "source": { 379 | "type": "git", 380 | "url": "https://github.com/pmmp/BinaryUtils.git", 381 | "reference": "5ac7eea91afbad8dc498f5ce34ce6297d5e6ea9a" 382 | }, 383 | "dist": { 384 | "type": "zip", 385 | "url": "https://api.github.com/repos/pmmp/BinaryUtils/zipball/5ac7eea91afbad8dc498f5ce34ce6297d5e6ea9a", 386 | "reference": "5ac7eea91afbad8dc498f5ce34ce6297d5e6ea9a", 387 | "shasum": "" 388 | }, 389 | "require": { 390 | "php": "^7.4 || ^8.0", 391 | "php-64bit": "*" 392 | }, 393 | "require-dev": { 394 | "phpstan/extension-installer": "^1.0", 395 | "phpstan/phpstan": "1.3.0", 396 | "phpstan/phpstan-phpunit": "^1.0", 397 | "phpstan/phpstan-strict-rules": "^1.0.0", 398 | "phpunit/phpunit": "^9.5" 399 | }, 400 | "type": "library", 401 | "autoload": { 402 | "psr-4": { 403 | "pocketmine\\utils\\": "src/" 404 | } 405 | }, 406 | "notification-url": "https://packagist.org/downloads/", 407 | "license": [ 408 | "LGPL-3.0" 409 | ], 410 | "description": "Classes and methods for conveniently handling binary data", 411 | "support": { 412 | "issues": "https://github.com/pmmp/BinaryUtils/issues", 413 | "source": "https://github.com/pmmp/BinaryUtils/tree/0.2.4" 414 | }, 415 | "time": "2022-01-12T18:06:33+00:00" 416 | }, 417 | { 418 | "name": "pocketmine/callback-validator", 419 | "version": "1.0.3", 420 | "source": { 421 | "type": "git", 422 | "url": "https://github.com/pmmp/CallbackValidator.git", 423 | "reference": "64787469766bcaa7e5885242e85c23c25e8c55a2" 424 | }, 425 | "dist": { 426 | "type": "zip", 427 | "url": "https://api.github.com/repos/pmmp/CallbackValidator/zipball/64787469766bcaa7e5885242e85c23c25e8c55a2", 428 | "reference": "64787469766bcaa7e5885242e85c23c25e8c55a2", 429 | "shasum": "" 430 | }, 431 | "require": { 432 | "ext-reflection": "*", 433 | "php": "^7.1 || ^8.0" 434 | }, 435 | "replace": { 436 | "daverandom/callback-validator": "*" 437 | }, 438 | "require-dev": { 439 | "phpstan/extension-installer": "^1.0", 440 | "phpstan/phpstan": "0.12.59", 441 | "phpstan/phpstan-strict-rules": "^0.12.4", 442 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" 443 | }, 444 | "type": "library", 445 | "autoload": { 446 | "psr-4": { 447 | "DaveRandom\\CallbackValidator\\": "src/" 448 | } 449 | }, 450 | "notification-url": "https://packagist.org/downloads/", 451 | "license": [ 452 | "MIT" 453 | ], 454 | "authors": [ 455 | { 456 | "name": "Chris Wright", 457 | "email": "cw@daverandom.com" 458 | } 459 | ], 460 | "description": "Fork of daverandom/callback-validator - Tools for validating callback signatures", 461 | "support": { 462 | "issues": "https://github.com/pmmp/CallbackValidator/issues", 463 | "source": "https://github.com/pmmp/CallbackValidator/tree/1.0.3" 464 | }, 465 | "time": "2020-12-11T01:45:37+00:00" 466 | }, 467 | { 468 | "name": "pocketmine/classloader", 469 | "version": "0.2.0", 470 | "source": { 471 | "type": "git", 472 | "url": "https://github.com/pmmp/ClassLoader.git", 473 | "reference": "49ea303993efdfb39cd302e2156d50aa78209e78" 474 | }, 475 | "dist": { 476 | "type": "zip", 477 | "url": "https://api.github.com/repos/pmmp/ClassLoader/zipball/49ea303993efdfb39cd302e2156d50aa78209e78", 478 | "reference": "49ea303993efdfb39cd302e2156d50aa78209e78", 479 | "shasum": "" 480 | }, 481 | "require": { 482 | "ext-pthreads": "~3.2.0 || ^4.0", 483 | "ext-reflection": "*", 484 | "php": "^8.0" 485 | }, 486 | "conflict": { 487 | "pocketmine/spl": "<0.4" 488 | }, 489 | "require-dev": { 490 | "phpstan/extension-installer": "^1.0", 491 | "phpstan/phpstan": "0.12.99", 492 | "phpstan/phpstan-strict-rules": "^0.12.4", 493 | "phpunit/phpunit": "^9.5" 494 | }, 495 | "type": "library", 496 | "autoload": { 497 | "classmap": [ 498 | "./src" 499 | ] 500 | }, 501 | "notification-url": "https://packagist.org/downloads/", 502 | "license": [ 503 | "LGPL-3.0" 504 | ], 505 | "description": "Ad-hoc autoloading components used by PocketMine-MP", 506 | "support": { 507 | "issues": "https://github.com/pmmp/ClassLoader/issues", 508 | "source": "https://github.com/pmmp/ClassLoader/tree/0.2.0" 509 | }, 510 | "time": "2021-11-01T20:17:27+00:00" 511 | }, 512 | { 513 | "name": "pocketmine/color", 514 | "version": "0.3.1", 515 | "source": { 516 | "type": "git", 517 | "url": "https://github.com/pmmp/Color.git", 518 | "reference": "a0421f1e9e0b0c619300fb92d593283378f6a5e1" 519 | }, 520 | "dist": { 521 | "type": "zip", 522 | "url": "https://api.github.com/repos/pmmp/Color/zipball/a0421f1e9e0b0c619300fb92d593283378f6a5e1", 523 | "reference": "a0421f1e9e0b0c619300fb92d593283378f6a5e1", 524 | "shasum": "" 525 | }, 526 | "require": { 527 | "php": "^8.0" 528 | }, 529 | "require-dev": { 530 | "phpstan/phpstan": "1.10.3", 531 | "phpstan/phpstan-strict-rules": "^1.2.0" 532 | }, 533 | "type": "library", 534 | "autoload": { 535 | "psr-4": { 536 | "pocketmine\\color\\": "src/" 537 | } 538 | }, 539 | "notification-url": "https://packagist.org/downloads/", 540 | "license": [ 541 | "LGPL-3.0" 542 | ], 543 | "description": "Color handling library used by PocketMine-MP and related projects", 544 | "support": { 545 | "issues": "https://github.com/pmmp/Color/issues", 546 | "source": "https://github.com/pmmp/Color/tree/0.3.1" 547 | }, 548 | "time": "2023-04-10T11:38:05+00:00" 549 | }, 550 | { 551 | "name": "pocketmine/errorhandler", 552 | "version": "0.6.0", 553 | "source": { 554 | "type": "git", 555 | "url": "https://github.com/pmmp/ErrorHandler.git", 556 | "reference": "dae214a04348b911e8219ebf125ff1c5589cc878" 557 | }, 558 | "dist": { 559 | "type": "zip", 560 | "url": "https://api.github.com/repos/pmmp/ErrorHandler/zipball/dae214a04348b911e8219ebf125ff1c5589cc878", 561 | "reference": "dae214a04348b911e8219ebf125ff1c5589cc878", 562 | "shasum": "" 563 | }, 564 | "require": { 565 | "php": "^8.0" 566 | }, 567 | "require-dev": { 568 | "phpstan/phpstan": "0.12.99", 569 | "phpstan/phpstan-strict-rules": "^0.12.2", 570 | "phpunit/phpunit": "^9.5" 571 | }, 572 | "type": "library", 573 | "autoload": { 574 | "psr-4": { 575 | "pocketmine\\errorhandler\\": "src/" 576 | } 577 | }, 578 | "notification-url": "https://packagist.org/downloads/", 579 | "license": [ 580 | "LGPL-3.0" 581 | ], 582 | "description": "Utilities to handle nasty PHP E_* errors in a usable way", 583 | "support": { 584 | "issues": "https://github.com/pmmp/ErrorHandler/issues", 585 | "source": "https://github.com/pmmp/ErrorHandler/tree/0.6.0" 586 | }, 587 | "time": "2022-01-08T21:05:46+00:00" 588 | }, 589 | { 590 | "name": "pocketmine/locale-data", 591 | "version": "2.19.5", 592 | "source": { 593 | "type": "git", 594 | "url": "https://github.com/pmmp/Language.git", 595 | "reference": "71af5f9bd23b4e4bad8920dac7f4fe08e5205f7d" 596 | }, 597 | "dist": { 598 | "type": "zip", 599 | "url": "https://api.github.com/repos/pmmp/Language/zipball/71af5f9bd23b4e4bad8920dac7f4fe08e5205f7d", 600 | "reference": "71af5f9bd23b4e4bad8920dac7f4fe08e5205f7d", 601 | "shasum": "" 602 | }, 603 | "type": "library", 604 | "notification-url": "https://packagist.org/downloads/", 605 | "description": "Language resources used by PocketMine-MP", 606 | "support": { 607 | "issues": "https://github.com/pmmp/Language/issues", 608 | "source": "https://github.com/pmmp/Language/tree/2.19.5" 609 | }, 610 | "time": "2023-03-19T16:45:15+00:00" 611 | }, 612 | { 613 | "name": "pocketmine/log", 614 | "version": "0.4.0", 615 | "source": { 616 | "type": "git", 617 | "url": "https://github.com/pmmp/Log.git", 618 | "reference": "e6c912c0f9055c81d23108ec2d179b96f404c043" 619 | }, 620 | "dist": { 621 | "type": "zip", 622 | "url": "https://api.github.com/repos/pmmp/Log/zipball/e6c912c0f9055c81d23108ec2d179b96f404c043", 623 | "reference": "e6c912c0f9055c81d23108ec2d179b96f404c043", 624 | "shasum": "" 625 | }, 626 | "require": { 627 | "php": "^7.4 || ^8.0" 628 | }, 629 | "conflict": { 630 | "pocketmine/spl": "<0.4" 631 | }, 632 | "require-dev": { 633 | "phpstan/phpstan": "0.12.88", 634 | "phpstan/phpstan-strict-rules": "^0.12.2" 635 | }, 636 | "type": "library", 637 | "autoload": { 638 | "classmap": [ 639 | "./src" 640 | ] 641 | }, 642 | "notification-url": "https://packagist.org/downloads/", 643 | "license": [ 644 | "LGPL-3.0" 645 | ], 646 | "description": "Logging components used by PocketMine-MP and related projects", 647 | "support": { 648 | "issues": "https://github.com/pmmp/Log/issues", 649 | "source": "https://github.com/pmmp/Log/tree/0.4.0" 650 | }, 651 | "time": "2021-06-18T19:08:09+00:00" 652 | }, 653 | { 654 | "name": "pocketmine/log-pthreads", 655 | "version": "0.4.0", 656 | "source": { 657 | "type": "git", 658 | "url": "https://github.com/pmmp/LogPthreads.git", 659 | "reference": "61f709e8cf36bcc24e4efe02acded680a1ce23cd" 660 | }, 661 | "dist": { 662 | "type": "zip", 663 | "url": "https://api.github.com/repos/pmmp/LogPthreads/zipball/61f709e8cf36bcc24e4efe02acded680a1ce23cd", 664 | "reference": "61f709e8cf36bcc24e4efe02acded680a1ce23cd", 665 | "shasum": "" 666 | }, 667 | "require": { 668 | "ext-pthreads": "~3.2.0 || ^4.0", 669 | "php": "^7.4 || ^8.0", 670 | "pocketmine/log": "^0.4.0" 671 | }, 672 | "conflict": { 673 | "pocketmine/spl": "<0.4" 674 | }, 675 | "require-dev": { 676 | "phpstan/extension-installer": "^1.0", 677 | "phpstan/phpstan": "0.12.88", 678 | "phpstan/phpstan-strict-rules": "^0.12.4" 679 | }, 680 | "type": "library", 681 | "autoload": { 682 | "classmap": [ 683 | "./src" 684 | ] 685 | }, 686 | "notification-url": "https://packagist.org/downloads/", 687 | "license": [ 688 | "LGPL-3.0" 689 | ], 690 | "description": "Logging components specialized for pthreads used by PocketMine-MP and related projects", 691 | "support": { 692 | "issues": "https://github.com/pmmp/LogPthreads/issues", 693 | "source": "https://github.com/pmmp/LogPthreads/tree/0.4.0" 694 | }, 695 | "time": "2021-11-01T21:42:09+00:00" 696 | }, 697 | { 698 | "name": "pocketmine/math", 699 | "version": "0.4.3", 700 | "source": { 701 | "type": "git", 702 | "url": "https://github.com/pmmp/Math.git", 703 | "reference": "47a243d320b01c8099d65309967934c188111549" 704 | }, 705 | "dist": { 706 | "type": "zip", 707 | "url": "https://api.github.com/repos/pmmp/Math/zipball/47a243d320b01c8099d65309967934c188111549", 708 | "reference": "47a243d320b01c8099d65309967934c188111549", 709 | "shasum": "" 710 | }, 711 | "require": { 712 | "php": "^8.0", 713 | "php-64bit": "*" 714 | }, 715 | "require-dev": { 716 | "phpstan/extension-installer": "^1.0", 717 | "phpstan/phpstan": "1.8.2", 718 | "phpstan/phpstan-strict-rules": "^1.0", 719 | "phpunit/phpunit": "^8.5 || ^9.5" 720 | }, 721 | "type": "library", 722 | "autoload": { 723 | "psr-4": { 724 | "pocketmine\\math\\": "src/" 725 | } 726 | }, 727 | "notification-url": "https://packagist.org/downloads/", 728 | "license": [ 729 | "LGPL-3.0" 730 | ], 731 | "description": "PHP library containing math related code used in PocketMine-MP", 732 | "support": { 733 | "issues": "https://github.com/pmmp/Math/issues", 734 | "source": "https://github.com/pmmp/Math/tree/0.4.3" 735 | }, 736 | "time": "2022-08-25T18:43:37+00:00" 737 | }, 738 | { 739 | "name": "pocketmine/nbt", 740 | "version": "0.3.4", 741 | "source": { 742 | "type": "git", 743 | "url": "https://github.com/pmmp/NBT.git", 744 | "reference": "62c02464c6708b2467c1e1a2af01af09d5114eda" 745 | }, 746 | "dist": { 747 | "type": "zip", 748 | "url": "https://api.github.com/repos/pmmp/NBT/zipball/62c02464c6708b2467c1e1a2af01af09d5114eda", 749 | "reference": "62c02464c6708b2467c1e1a2af01af09d5114eda", 750 | "shasum": "" 751 | }, 752 | "require": { 753 | "php": "^7.4 || ^8.0", 754 | "php-64bit": "*", 755 | "pocketmine/binaryutils": "^0.2.0" 756 | }, 757 | "require-dev": { 758 | "phpstan/extension-installer": "^1.0", 759 | "phpstan/phpstan": "1.10.3", 760 | "phpstan/phpstan-strict-rules": "^1.0", 761 | "phpunit/phpunit": "^9.5" 762 | }, 763 | "type": "library", 764 | "autoload": { 765 | "psr-4": { 766 | "pocketmine\\nbt\\": "src/" 767 | } 768 | }, 769 | "notification-url": "https://packagist.org/downloads/", 770 | "license": [ 771 | "LGPL-3.0" 772 | ], 773 | "description": "PHP library for working with Named Binary Tags", 774 | "support": { 775 | "issues": "https://github.com/pmmp/NBT/issues", 776 | "source": "https://github.com/pmmp/NBT/tree/0.3.4" 777 | }, 778 | "time": "2023-04-10T11:31:20+00:00" 779 | }, 780 | { 781 | "name": "pocketmine/pocketmine-mp", 782 | "version": "4.20.4", 783 | "source": { 784 | "type": "git", 785 | "url": "https://github.com/pmmp/PocketMine-MP.git", 786 | "reference": "c3ceeeace712f4eac380b78d1851e7dfb89f557c" 787 | }, 788 | "dist": { 789 | "type": "zip", 790 | "url": "https://api.github.com/repos/pmmp/PocketMine-MP/zipball/c3ceeeace712f4eac380b78d1851e7dfb89f557c", 791 | "reference": "c3ceeeace712f4eac380b78d1851e7dfb89f557c", 792 | "shasum": "" 793 | }, 794 | "require": { 795 | "adhocore/json-comment": "^1.1", 796 | "composer-runtime-api": "^2.0", 797 | "ext-chunkutils2": "^0.3.1", 798 | "ext-crypto": "^0.3.1", 799 | "ext-ctype": "*", 800 | "ext-curl": "*", 801 | "ext-date": "*", 802 | "ext-gmp": "*", 803 | "ext-hash": "*", 804 | "ext-igbinary": "^3.0.1", 805 | "ext-json": "*", 806 | "ext-leveldb": "^0.2.1 || ^0.3.0", 807 | "ext-mbstring": "*", 808 | "ext-morton": "^0.1.0", 809 | "ext-openssl": "*", 810 | "ext-pcre": "*", 811 | "ext-phar": "*", 812 | "ext-pthreads": "^4.0", 813 | "ext-reflection": "*", 814 | "ext-simplexml": "*", 815 | "ext-sockets": "*", 816 | "ext-spl": "*", 817 | "ext-yaml": ">=2.0.0", 818 | "ext-zip": "*", 819 | "ext-zlib": ">=1.2.11", 820 | "fgrosse/phpasn1": "^2.3", 821 | "netresearch/jsonmapper": "^4.0", 822 | "php": "^8.0", 823 | "php-64bit": "*", 824 | "pocketmine/bedrock-block-upgrade-schema": "~2.1.0+bedrock-1.19.80", 825 | "pocketmine/bedrock-data": "~2.2.0+bedrock-1.19.80", 826 | "pocketmine/bedrock-item-upgrade-schema": "~1.2.0+bedrock-1.19.80", 827 | "pocketmine/bedrock-protocol": "~21.0.0+bedrock-1.19.80", 828 | "pocketmine/binaryutils": "^0.2.1", 829 | "pocketmine/callback-validator": "^1.0.2", 830 | "pocketmine/classloader": "^0.2.0", 831 | "pocketmine/color": "^0.3.0", 832 | "pocketmine/errorhandler": "^0.6.0", 833 | "pocketmine/locale-data": "~2.19.0", 834 | "pocketmine/log": "^0.4.0", 835 | "pocketmine/log-pthreads": "^0.4.0", 836 | "pocketmine/math": "^0.4.0", 837 | "pocketmine/nbt": "^0.3.2", 838 | "pocketmine/raklib": "^0.14.2", 839 | "pocketmine/raklib-ipc": "^0.1.0", 840 | "pocketmine/snooze": "^0.3.0", 841 | "ramsey/uuid": "^4.1", 842 | "symfony/filesystem": "^5.4", 843 | "webmozart/path-util": "^2.3" 844 | }, 845 | "require-dev": { 846 | "phpstan/phpstan": "1.10.14", 847 | "phpstan/phpstan-phpunit": "^1.1.0", 848 | "phpstan/phpstan-strict-rules": "^1.2.0", 849 | "phpunit/phpunit": "^9.2" 850 | }, 851 | "type": "project", 852 | "autoload": { 853 | "files": [ 854 | "src/CoreConstants.php" 855 | ], 856 | "psr-4": { 857 | "pocketmine\\": "src/" 858 | } 859 | }, 860 | "notification-url": "https://packagist.org/downloads/", 861 | "license": [ 862 | "LGPL-3.0" 863 | ], 864 | "description": "A server software for Minecraft: Bedrock Edition written in PHP", 865 | "homepage": "https://pmmp.io", 866 | "support": { 867 | "issues": "https://github.com/pmmp/PocketMine-MP/issues", 868 | "source": "https://github.com/pmmp/PocketMine-MP/tree/4.20.4" 869 | }, 870 | "funding": [ 871 | { 872 | "url": "https://github.com/pmmp/PocketMine-MP#donate", 873 | "type": "custom" 874 | }, 875 | { 876 | "url": "https://www.patreon.com/pocketminemp", 877 | "type": "patreon" 878 | } 879 | ], 880 | "time": "2023-05-06T17:20:18+00:00" 881 | }, 882 | { 883 | "name": "pocketmine/raklib", 884 | "version": "0.14.6", 885 | "source": { 886 | "type": "git", 887 | "url": "https://github.com/pmmp/RakLib.git", 888 | "reference": "aeca667d5ecc4cc18fded612f29e3511bbf62f42" 889 | }, 890 | "dist": { 891 | "type": "zip", 892 | "url": "https://api.github.com/repos/pmmp/RakLib/zipball/aeca667d5ecc4cc18fded612f29e3511bbf62f42", 893 | "reference": "aeca667d5ecc4cc18fded612f29e3511bbf62f42", 894 | "shasum": "" 895 | }, 896 | "require": { 897 | "ext-sockets": "*", 898 | "php": "^8.0", 899 | "php-64bit": "*", 900 | "php-ipv6": "*", 901 | "pocketmine/binaryutils": "^0.2.0", 902 | "pocketmine/log": "^0.3.0 || ^0.4.0" 903 | }, 904 | "require-dev": { 905 | "phpstan/phpstan": "1.9.17", 906 | "phpstan/phpstan-strict-rules": "^1.0" 907 | }, 908 | "type": "library", 909 | "autoload": { 910 | "psr-4": { 911 | "raklib\\": "src/" 912 | } 913 | }, 914 | "notification-url": "https://packagist.org/downloads/", 915 | "license": [ 916 | "GPL-3.0" 917 | ], 918 | "description": "A RakNet server implementation written in PHP", 919 | "support": { 920 | "issues": "https://github.com/pmmp/RakLib/issues", 921 | "source": "https://github.com/pmmp/RakLib/tree/0.14.6" 922 | }, 923 | "time": "2023-03-07T15:10:23+00:00" 924 | }, 925 | { 926 | "name": "pocketmine/raklib-ipc", 927 | "version": "0.1.1", 928 | "source": { 929 | "type": "git", 930 | "url": "https://github.com/pmmp/RakLibIpc.git", 931 | "reference": "922a6444b0c6c7daaa5aa5a832107e1ec4738aed" 932 | }, 933 | "dist": { 934 | "type": "zip", 935 | "url": "https://api.github.com/repos/pmmp/RakLibIpc/zipball/922a6444b0c6c7daaa5aa5a832107e1ec4738aed", 936 | "reference": "922a6444b0c6c7daaa5aa5a832107e1ec4738aed", 937 | "shasum": "" 938 | }, 939 | "require": { 940 | "php": "^7.4 || ^8.0", 941 | "php-64bit": "*", 942 | "pocketmine/binaryutils": "^0.2.0", 943 | "pocketmine/raklib": "^0.13.1 || ^0.14.0" 944 | }, 945 | "require-dev": { 946 | "phpstan/phpstan": "0.12.81", 947 | "phpstan/phpstan-strict-rules": "^0.12.2" 948 | }, 949 | "type": "library", 950 | "autoload": { 951 | "psr-4": { 952 | "raklib\\server\\ipc\\": "src/" 953 | } 954 | }, 955 | "notification-url": "https://packagist.org/downloads/", 956 | "license": [ 957 | "GPL-3.0" 958 | ], 959 | "description": "Channel-based protocols for inter-thread/inter-process communication with RakLib", 960 | "support": { 961 | "issues": "https://github.com/pmmp/RakLibIpc/issues", 962 | "source": "https://github.com/pmmp/RakLibIpc/tree/0.1.1" 963 | }, 964 | "time": "2021-09-22T17:01:12+00:00" 965 | }, 966 | { 967 | "name": "pocketmine/snooze", 968 | "version": "0.3.1", 969 | "source": { 970 | "type": "git", 971 | "url": "https://github.com/pmmp/Snooze.git", 972 | "reference": "0ac8fc2a781c419a1f64ebca4d5835028f59e29b" 973 | }, 974 | "dist": { 975 | "type": "zip", 976 | "url": "https://api.github.com/repos/pmmp/Snooze/zipball/0ac8fc2a781c419a1f64ebca4d5835028f59e29b", 977 | "reference": "0ac8fc2a781c419a1f64ebca4d5835028f59e29b", 978 | "shasum": "" 979 | }, 980 | "require": { 981 | "ext-pthreads": "~3.2.0 || ^4.0", 982 | "php-64bit": "^7.3 || ^8.0" 983 | }, 984 | "require-dev": { 985 | "phpstan/extension-installer": "^1.0", 986 | "phpstan/phpstan": "0.12.99", 987 | "phpstan/phpstan-strict-rules": "^0.12.4" 988 | }, 989 | "type": "library", 990 | "autoload": { 991 | "psr-4": { 992 | "pocketmine\\snooze\\": "src/" 993 | } 994 | }, 995 | "notification-url": "https://packagist.org/downloads/", 996 | "license": [ 997 | "LGPL-3.0" 998 | ], 999 | "description": "Thread notification management library for code using the pthreads extension", 1000 | "support": { 1001 | "issues": "https://github.com/pmmp/Snooze/issues", 1002 | "source": "https://github.com/pmmp/Snooze/tree/0.3.1" 1003 | }, 1004 | "time": "2021-11-01T20:50:08+00:00" 1005 | }, 1006 | { 1007 | "name": "ramsey/collection", 1008 | "version": "2.0.0", 1009 | "source": { 1010 | "type": "git", 1011 | "url": "https://github.com/ramsey/collection.git", 1012 | "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" 1013 | }, 1014 | "dist": { 1015 | "type": "zip", 1016 | "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", 1017 | "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", 1018 | "shasum": "" 1019 | }, 1020 | "require": { 1021 | "php": "^8.1" 1022 | }, 1023 | "require-dev": { 1024 | "captainhook/plugin-composer": "^5.3", 1025 | "ergebnis/composer-normalize": "^2.28.3", 1026 | "fakerphp/faker": "^1.21", 1027 | "hamcrest/hamcrest-php": "^2.0", 1028 | "jangregor/phpstan-prophecy": "^1.0", 1029 | "mockery/mockery": "^1.5", 1030 | "php-parallel-lint/php-console-highlighter": "^1.0", 1031 | "php-parallel-lint/php-parallel-lint": "^1.3", 1032 | "phpcsstandards/phpcsutils": "^1.0.0-rc1", 1033 | "phpspec/prophecy-phpunit": "^2.0", 1034 | "phpstan/extension-installer": "^1.2", 1035 | "phpstan/phpstan": "^1.9", 1036 | "phpstan/phpstan-mockery": "^1.1", 1037 | "phpstan/phpstan-phpunit": "^1.3", 1038 | "phpunit/phpunit": "^9.5", 1039 | "psalm/plugin-mockery": "^1.1", 1040 | "psalm/plugin-phpunit": "^0.18.4", 1041 | "ramsey/coding-standard": "^2.0.3", 1042 | "ramsey/conventional-commits": "^1.3", 1043 | "vimeo/psalm": "^5.4" 1044 | }, 1045 | "type": "library", 1046 | "extra": { 1047 | "captainhook": { 1048 | "force-install": true 1049 | }, 1050 | "ramsey/conventional-commits": { 1051 | "configFile": "conventional-commits.json" 1052 | } 1053 | }, 1054 | "autoload": { 1055 | "psr-4": { 1056 | "Ramsey\\Collection\\": "src/" 1057 | } 1058 | }, 1059 | "notification-url": "https://packagist.org/downloads/", 1060 | "license": [ 1061 | "MIT" 1062 | ], 1063 | "authors": [ 1064 | { 1065 | "name": "Ben Ramsey", 1066 | "email": "ben@benramsey.com", 1067 | "homepage": "https://benramsey.com" 1068 | } 1069 | ], 1070 | "description": "A PHP library for representing and manipulating collections.", 1071 | "keywords": [ 1072 | "array", 1073 | "collection", 1074 | "hash", 1075 | "map", 1076 | "queue", 1077 | "set" 1078 | ], 1079 | "support": { 1080 | "issues": "https://github.com/ramsey/collection/issues", 1081 | "source": "https://github.com/ramsey/collection/tree/2.0.0" 1082 | }, 1083 | "funding": [ 1084 | { 1085 | "url": "https://github.com/ramsey", 1086 | "type": "github" 1087 | }, 1088 | { 1089 | "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", 1090 | "type": "tidelift" 1091 | } 1092 | ], 1093 | "time": "2022-12-31T21:50:55+00:00" 1094 | }, 1095 | { 1096 | "name": "ramsey/uuid", 1097 | "version": "4.7.4", 1098 | "source": { 1099 | "type": "git", 1100 | "url": "https://github.com/ramsey/uuid.git", 1101 | "reference": "60a4c63ab724854332900504274f6150ff26d286" 1102 | }, 1103 | "dist": { 1104 | "type": "zip", 1105 | "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", 1106 | "reference": "60a4c63ab724854332900504274f6150ff26d286", 1107 | "shasum": "" 1108 | }, 1109 | "require": { 1110 | "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", 1111 | "ext-json": "*", 1112 | "php": "^8.0", 1113 | "ramsey/collection": "^1.2 || ^2.0" 1114 | }, 1115 | "replace": { 1116 | "rhumsaa/uuid": "self.version" 1117 | }, 1118 | "require-dev": { 1119 | "captainhook/captainhook": "^5.10", 1120 | "captainhook/plugin-composer": "^5.3", 1121 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", 1122 | "doctrine/annotations": "^1.8", 1123 | "ergebnis/composer-normalize": "^2.15", 1124 | "mockery/mockery": "^1.3", 1125 | "paragonie/random-lib": "^2", 1126 | "php-mock/php-mock": "^2.2", 1127 | "php-mock/php-mock-mockery": "^1.3", 1128 | "php-parallel-lint/php-parallel-lint": "^1.1", 1129 | "phpbench/phpbench": "^1.0", 1130 | "phpstan/extension-installer": "^1.1", 1131 | "phpstan/phpstan": "^1.8", 1132 | "phpstan/phpstan-mockery": "^1.1", 1133 | "phpstan/phpstan-phpunit": "^1.1", 1134 | "phpunit/phpunit": "^8.5 || ^9", 1135 | "ramsey/composer-repl": "^1.4", 1136 | "slevomat/coding-standard": "^8.4", 1137 | "squizlabs/php_codesniffer": "^3.5", 1138 | "vimeo/psalm": "^4.9" 1139 | }, 1140 | "suggest": { 1141 | "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", 1142 | "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", 1143 | "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", 1144 | "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", 1145 | "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." 1146 | }, 1147 | "type": "library", 1148 | "extra": { 1149 | "captainhook": { 1150 | "force-install": true 1151 | } 1152 | }, 1153 | "autoload": { 1154 | "files": [ 1155 | "src/functions.php" 1156 | ], 1157 | "psr-4": { 1158 | "Ramsey\\Uuid\\": "src/" 1159 | } 1160 | }, 1161 | "notification-url": "https://packagist.org/downloads/", 1162 | "license": [ 1163 | "MIT" 1164 | ], 1165 | "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", 1166 | "keywords": [ 1167 | "guid", 1168 | "identifier", 1169 | "uuid" 1170 | ], 1171 | "support": { 1172 | "issues": "https://github.com/ramsey/uuid/issues", 1173 | "source": "https://github.com/ramsey/uuid/tree/4.7.4" 1174 | }, 1175 | "funding": [ 1176 | { 1177 | "url": "https://github.com/ramsey", 1178 | "type": "github" 1179 | }, 1180 | { 1181 | "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", 1182 | "type": "tidelift" 1183 | } 1184 | ], 1185 | "time": "2023-04-15T23:01:58+00:00" 1186 | }, 1187 | { 1188 | "name": "sof3/await-generator", 1189 | "version": "3.5.2", 1190 | "source": { 1191 | "type": "git", 1192 | "url": "https://github.com/SOF3/await-generator.git", 1193 | "reference": "3a8286c5240695cc8bfdd5495160ebb247e6ee8e" 1194 | }, 1195 | "dist": { 1196 | "type": "zip", 1197 | "url": "https://api.github.com/repos/SOF3/await-generator/zipball/3a8286c5240695cc8bfdd5495160ebb247e6ee8e", 1198 | "reference": "3a8286c5240695cc8bfdd5495160ebb247e6ee8e", 1199 | "shasum": "" 1200 | }, 1201 | "require": { 1202 | "ext-bcmath": "*", 1203 | "php": "^8.0" 1204 | }, 1205 | "require-dev": { 1206 | "composer/package-versions-deprecated": "1.11.99.1", 1207 | "infection/infection": "^0.18.2 || ^0.20.2 || ^0.26.0", 1208 | "phpstan/phpstan": "^0.12.84", 1209 | "phpunit/phpunit": "^9" 1210 | }, 1211 | "type": "library", 1212 | "extra": { 1213 | "virion": { 1214 | "spec": "3.0", 1215 | "namespace-root": "SOFe\\AwaitGenerator" 1216 | } 1217 | }, 1218 | "autoload": { 1219 | "psr-0": { 1220 | "SOFe\\AwaitGenerator\\": "await-generator/src/" 1221 | } 1222 | }, 1223 | "notification-url": "https://packagist.org/downloads/", 1224 | "license": [ 1225 | "apache-2.0" 1226 | ], 1227 | "authors": [ 1228 | { 1229 | "name": "SOFe", 1230 | "email": "sofe2038@gmail.com" 1231 | } 1232 | ], 1233 | "description": "Use async/await in PHP using generators", 1234 | "support": { 1235 | "issues": "https://github.com/SOF3/await-generator/issues", 1236 | "source": "https://github.com/SOF3/await-generator/tree/3.5.2" 1237 | }, 1238 | "time": "2023-05-01T10:02:37+00:00" 1239 | }, 1240 | { 1241 | "name": "symfony/filesystem", 1242 | "version": "v5.4.23", 1243 | "source": { 1244 | "type": "git", 1245 | "url": "https://github.com/symfony/filesystem.git", 1246 | "reference": "b2f79d86cd9e7de0fff6d03baa80eaed7a5f38b5" 1247 | }, 1248 | "dist": { 1249 | "type": "zip", 1250 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/b2f79d86cd9e7de0fff6d03baa80eaed7a5f38b5", 1251 | "reference": "b2f79d86cd9e7de0fff6d03baa80eaed7a5f38b5", 1252 | "shasum": "" 1253 | }, 1254 | "require": { 1255 | "php": ">=7.2.5", 1256 | "symfony/polyfill-ctype": "~1.8", 1257 | "symfony/polyfill-mbstring": "~1.8", 1258 | "symfony/polyfill-php80": "^1.16" 1259 | }, 1260 | "type": "library", 1261 | "autoload": { 1262 | "psr-4": { 1263 | "Symfony\\Component\\Filesystem\\": "" 1264 | }, 1265 | "exclude-from-classmap": [ 1266 | "/Tests/" 1267 | ] 1268 | }, 1269 | "notification-url": "https://packagist.org/downloads/", 1270 | "license": [ 1271 | "MIT" 1272 | ], 1273 | "authors": [ 1274 | { 1275 | "name": "Fabien Potencier", 1276 | "email": "fabien@symfony.com" 1277 | }, 1278 | { 1279 | "name": "Symfony Community", 1280 | "homepage": "https://symfony.com/contributors" 1281 | } 1282 | ], 1283 | "description": "Provides basic utilities for the filesystem", 1284 | "homepage": "https://symfony.com", 1285 | "support": { 1286 | "source": "https://github.com/symfony/filesystem/tree/v5.4.23" 1287 | }, 1288 | "funding": [ 1289 | { 1290 | "url": "https://symfony.com/sponsor", 1291 | "type": "custom" 1292 | }, 1293 | { 1294 | "url": "https://github.com/fabpot", 1295 | "type": "github" 1296 | }, 1297 | { 1298 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1299 | "type": "tidelift" 1300 | } 1301 | ], 1302 | "time": "2023-03-02T11:38:35+00:00" 1303 | }, 1304 | { 1305 | "name": "symfony/polyfill-ctype", 1306 | "version": "v1.27.0", 1307 | "source": { 1308 | "type": "git", 1309 | "url": "https://github.com/symfony/polyfill-ctype.git", 1310 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" 1311 | }, 1312 | "dist": { 1313 | "type": "zip", 1314 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", 1315 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", 1316 | "shasum": "" 1317 | }, 1318 | "require": { 1319 | "php": ">=7.1" 1320 | }, 1321 | "provide": { 1322 | "ext-ctype": "*" 1323 | }, 1324 | "suggest": { 1325 | "ext-ctype": "For best performance" 1326 | }, 1327 | "type": "library", 1328 | "extra": { 1329 | "branch-alias": { 1330 | "dev-main": "1.27-dev" 1331 | }, 1332 | "thanks": { 1333 | "name": "symfony/polyfill", 1334 | "url": "https://github.com/symfony/polyfill" 1335 | } 1336 | }, 1337 | "autoload": { 1338 | "files": [ 1339 | "bootstrap.php" 1340 | ], 1341 | "psr-4": { 1342 | "Symfony\\Polyfill\\Ctype\\": "" 1343 | } 1344 | }, 1345 | "notification-url": "https://packagist.org/downloads/", 1346 | "license": [ 1347 | "MIT" 1348 | ], 1349 | "authors": [ 1350 | { 1351 | "name": "Gert de Pagter", 1352 | "email": "BackEndTea@gmail.com" 1353 | }, 1354 | { 1355 | "name": "Symfony Community", 1356 | "homepage": "https://symfony.com/contributors" 1357 | } 1358 | ], 1359 | "description": "Symfony polyfill for ctype functions", 1360 | "homepage": "https://symfony.com", 1361 | "keywords": [ 1362 | "compatibility", 1363 | "ctype", 1364 | "polyfill", 1365 | "portable" 1366 | ], 1367 | "support": { 1368 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" 1369 | }, 1370 | "funding": [ 1371 | { 1372 | "url": "https://symfony.com/sponsor", 1373 | "type": "custom" 1374 | }, 1375 | { 1376 | "url": "https://github.com/fabpot", 1377 | "type": "github" 1378 | }, 1379 | { 1380 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1381 | "type": "tidelift" 1382 | } 1383 | ], 1384 | "time": "2022-11-03T14:55:06+00:00" 1385 | }, 1386 | { 1387 | "name": "symfony/polyfill-mbstring", 1388 | "version": "v1.27.0", 1389 | "source": { 1390 | "type": "git", 1391 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1392 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" 1393 | }, 1394 | "dist": { 1395 | "type": "zip", 1396 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 1397 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 1398 | "shasum": "" 1399 | }, 1400 | "require": { 1401 | "php": ">=7.1" 1402 | }, 1403 | "provide": { 1404 | "ext-mbstring": "*" 1405 | }, 1406 | "suggest": { 1407 | "ext-mbstring": "For best performance" 1408 | }, 1409 | "type": "library", 1410 | "extra": { 1411 | "branch-alias": { 1412 | "dev-main": "1.27-dev" 1413 | }, 1414 | "thanks": { 1415 | "name": "symfony/polyfill", 1416 | "url": "https://github.com/symfony/polyfill" 1417 | } 1418 | }, 1419 | "autoload": { 1420 | "files": [ 1421 | "bootstrap.php" 1422 | ], 1423 | "psr-4": { 1424 | "Symfony\\Polyfill\\Mbstring\\": "" 1425 | } 1426 | }, 1427 | "notification-url": "https://packagist.org/downloads/", 1428 | "license": [ 1429 | "MIT" 1430 | ], 1431 | "authors": [ 1432 | { 1433 | "name": "Nicolas Grekas", 1434 | "email": "p@tchwork.com" 1435 | }, 1436 | { 1437 | "name": "Symfony Community", 1438 | "homepage": "https://symfony.com/contributors" 1439 | } 1440 | ], 1441 | "description": "Symfony polyfill for the Mbstring extension", 1442 | "homepage": "https://symfony.com", 1443 | "keywords": [ 1444 | "compatibility", 1445 | "mbstring", 1446 | "polyfill", 1447 | "portable", 1448 | "shim" 1449 | ], 1450 | "support": { 1451 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" 1452 | }, 1453 | "funding": [ 1454 | { 1455 | "url": "https://symfony.com/sponsor", 1456 | "type": "custom" 1457 | }, 1458 | { 1459 | "url": "https://github.com/fabpot", 1460 | "type": "github" 1461 | }, 1462 | { 1463 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1464 | "type": "tidelift" 1465 | } 1466 | ], 1467 | "time": "2022-11-03T14:55:06+00:00" 1468 | }, 1469 | { 1470 | "name": "symfony/polyfill-php80", 1471 | "version": "v1.27.0", 1472 | "source": { 1473 | "type": "git", 1474 | "url": "https://github.com/symfony/polyfill-php80.git", 1475 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" 1476 | }, 1477 | "dist": { 1478 | "type": "zip", 1479 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 1480 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 1481 | "shasum": "" 1482 | }, 1483 | "require": { 1484 | "php": ">=7.1" 1485 | }, 1486 | "type": "library", 1487 | "extra": { 1488 | "branch-alias": { 1489 | "dev-main": "1.27-dev" 1490 | }, 1491 | "thanks": { 1492 | "name": "symfony/polyfill", 1493 | "url": "https://github.com/symfony/polyfill" 1494 | } 1495 | }, 1496 | "autoload": { 1497 | "files": [ 1498 | "bootstrap.php" 1499 | ], 1500 | "psr-4": { 1501 | "Symfony\\Polyfill\\Php80\\": "" 1502 | }, 1503 | "classmap": [ 1504 | "Resources/stubs" 1505 | ] 1506 | }, 1507 | "notification-url": "https://packagist.org/downloads/", 1508 | "license": [ 1509 | "MIT" 1510 | ], 1511 | "authors": [ 1512 | { 1513 | "name": "Ion Bazan", 1514 | "email": "ion.bazan@gmail.com" 1515 | }, 1516 | { 1517 | "name": "Nicolas Grekas", 1518 | "email": "p@tchwork.com" 1519 | }, 1520 | { 1521 | "name": "Symfony Community", 1522 | "homepage": "https://symfony.com/contributors" 1523 | } 1524 | ], 1525 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 1526 | "homepage": "https://symfony.com", 1527 | "keywords": [ 1528 | "compatibility", 1529 | "polyfill", 1530 | "portable", 1531 | "shim" 1532 | ], 1533 | "support": { 1534 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" 1535 | }, 1536 | "funding": [ 1537 | { 1538 | "url": "https://symfony.com/sponsor", 1539 | "type": "custom" 1540 | }, 1541 | { 1542 | "url": "https://github.com/fabpot", 1543 | "type": "github" 1544 | }, 1545 | { 1546 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1547 | "type": "tidelift" 1548 | } 1549 | ], 1550 | "time": "2022-11-03T14:55:06+00:00" 1551 | }, 1552 | { 1553 | "name": "webmozart/assert", 1554 | "version": "1.11.0", 1555 | "source": { 1556 | "type": "git", 1557 | "url": "https://github.com/webmozarts/assert.git", 1558 | "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" 1559 | }, 1560 | "dist": { 1561 | "type": "zip", 1562 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", 1563 | "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", 1564 | "shasum": "" 1565 | }, 1566 | "require": { 1567 | "ext-ctype": "*", 1568 | "php": "^7.2 || ^8.0" 1569 | }, 1570 | "conflict": { 1571 | "phpstan/phpstan": "<0.12.20", 1572 | "vimeo/psalm": "<4.6.1 || 4.6.2" 1573 | }, 1574 | "require-dev": { 1575 | "phpunit/phpunit": "^8.5.13" 1576 | }, 1577 | "type": "library", 1578 | "extra": { 1579 | "branch-alias": { 1580 | "dev-master": "1.10-dev" 1581 | } 1582 | }, 1583 | "autoload": { 1584 | "psr-4": { 1585 | "Webmozart\\Assert\\": "src/" 1586 | } 1587 | }, 1588 | "notification-url": "https://packagist.org/downloads/", 1589 | "license": [ 1590 | "MIT" 1591 | ], 1592 | "authors": [ 1593 | { 1594 | "name": "Bernhard Schussek", 1595 | "email": "bschussek@gmail.com" 1596 | } 1597 | ], 1598 | "description": "Assertions to validate method input/output with nice error messages.", 1599 | "keywords": [ 1600 | "assert", 1601 | "check", 1602 | "validate" 1603 | ], 1604 | "support": { 1605 | "issues": "https://github.com/webmozarts/assert/issues", 1606 | "source": "https://github.com/webmozarts/assert/tree/1.11.0" 1607 | }, 1608 | "time": "2022-06-03T18:03:27+00:00" 1609 | }, 1610 | { 1611 | "name": "webmozart/path-util", 1612 | "version": "2.3.0", 1613 | "source": { 1614 | "type": "git", 1615 | "url": "https://github.com/webmozart/path-util.git", 1616 | "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" 1617 | }, 1618 | "dist": { 1619 | "type": "zip", 1620 | "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", 1621 | "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", 1622 | "shasum": "" 1623 | }, 1624 | "require": { 1625 | "php": ">=5.3.3", 1626 | "webmozart/assert": "~1.0" 1627 | }, 1628 | "require-dev": { 1629 | "phpunit/phpunit": "^4.6", 1630 | "sebastian/version": "^1.0.1" 1631 | }, 1632 | "type": "library", 1633 | "extra": { 1634 | "branch-alias": { 1635 | "dev-master": "2.3-dev" 1636 | } 1637 | }, 1638 | "autoload": { 1639 | "psr-4": { 1640 | "Webmozart\\PathUtil\\": "src/" 1641 | } 1642 | }, 1643 | "notification-url": "https://packagist.org/downloads/", 1644 | "license": [ 1645 | "MIT" 1646 | ], 1647 | "authors": [ 1648 | { 1649 | "name": "Bernhard Schussek", 1650 | "email": "bschussek@gmail.com" 1651 | } 1652 | ], 1653 | "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", 1654 | "support": { 1655 | "issues": "https://github.com/webmozart/path-util/issues", 1656 | "source": "https://github.com/webmozart/path-util/tree/2.3.0" 1657 | }, 1658 | "abandoned": "symfony/filesystem", 1659 | "time": "2015-12-17T08:42:14+00:00" 1660 | } 1661 | ], 1662 | "packages-dev": [ 1663 | { 1664 | "name": "phpstan/phpstan", 1665 | "version": "0.12.100", 1666 | "source": { 1667 | "type": "git", 1668 | "url": "https://github.com/phpstan/phpstan.git", 1669 | "reference": "48236ddf823547081b2b153d1cd2994b784328c3" 1670 | }, 1671 | "dist": { 1672 | "type": "zip", 1673 | "url": "https://api.github.com/repos/phpstan/phpstan/zipball/48236ddf823547081b2b153d1cd2994b784328c3", 1674 | "reference": "48236ddf823547081b2b153d1cd2994b784328c3", 1675 | "shasum": "" 1676 | }, 1677 | "require": { 1678 | "php": "^7.1|^8.0" 1679 | }, 1680 | "conflict": { 1681 | "phpstan/phpstan-shim": "*" 1682 | }, 1683 | "bin": [ 1684 | "phpstan", 1685 | "phpstan.phar" 1686 | ], 1687 | "type": "library", 1688 | "extra": { 1689 | "branch-alias": { 1690 | "dev-master": "0.12-dev" 1691 | } 1692 | }, 1693 | "autoload": { 1694 | "files": [ 1695 | "bootstrap.php" 1696 | ] 1697 | }, 1698 | "notification-url": "https://packagist.org/downloads/", 1699 | "license": [ 1700 | "MIT" 1701 | ], 1702 | "description": "PHPStan - PHP Static Analysis Tool", 1703 | "support": { 1704 | "issues": "https://github.com/phpstan/phpstan/issues", 1705 | "source": "https://github.com/phpstan/phpstan/tree/0.12.100" 1706 | }, 1707 | "funding": [ 1708 | { 1709 | "url": "https://github.com/ondrejmirtes", 1710 | "type": "github" 1711 | }, 1712 | { 1713 | "url": "https://github.com/phpstan", 1714 | "type": "github" 1715 | }, 1716 | { 1717 | "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", 1718 | "type": "tidelift" 1719 | } 1720 | ], 1721 | "time": "2022-11-01T09:52:08+00:00" 1722 | } 1723 | ], 1724 | "aliases": [], 1725 | "minimum-stability": "stable", 1726 | "stability-flags": [], 1727 | "prefer-stable": false, 1728 | "prefer-lowest": false, 1729 | "platform": [], 1730 | "platform-dev": [], 1731 | "plugin-api-version": "2.3.0" 1732 | } 1733 | -------------------------------------------------------------------------------- /phpstan.neon.dist: -------------------------------------------------------------------------------- 1 | parameters: 2 | level: 8 3 | paths: 4 | - src 5 | -------------------------------------------------------------------------------- /src/SOFe/AwaitStd/Await.php: -------------------------------------------------------------------------------- 1 | plugin = $plugin; 26 | $self->eventAwaiter = new EventAwaiter($plugin); 27 | return $self; 28 | } 29 | 30 | private function __construct() { 31 | } 32 | 33 | /** 34 | * @return Generator 35 | */ 36 | public function sleep(int $ticks) : Generator { 37 | yield from Await::promise(function(Closure $callback) use($ticks): void{ 38 | $task = new ClosureTask(fn() => $callback()); 39 | $this->plugin->getScheduler()->scheduleDelayedTask($task, $ticks); 40 | }); 41 | } 42 | 43 | /** 44 | * @return Generator 45 | */ 46 | public function consumeNextChat(Player $player, int $priority = EventPriority::NORMAL) : Generator { 47 | /** @var PlayerChatEvent $event */ 48 | $event = yield from $this->awaitEvent( 49 | PlayerChatEvent::class, 50 | fn($event) => $event->getPlayer() === $player, 51 | true, 52 | $priority, 53 | false, 54 | $player, 55 | ); 56 | $event->cancel(); 57 | return $event; 58 | } 59 | 60 | /** 61 | * @return Generator 62 | */ 63 | public function consumeNextInteract(Player $player, int $priority = EventPriority::NORMAL) : Generator { 64 | /** @var PlayerInteractEvent $event */ 65 | $event = yield from $this->awaitEvent( 66 | PlayerInteractEvent::class, 67 | fn($event) => $event->getPlayer() === $player, 68 | true, 69 | $priority, 70 | false, 71 | $player, 72 | ); 73 | $event->cancel(); 74 | return $event; 75 | } 76 | 77 | /** 78 | * @template T 79 | * @template U 80 | * @param Generator $promise 81 | * @param U $onTimeout 82 | * @return Generator 83 | */ 84 | public function timeout(Generator $promise, int $ticks, $onTimeout = null) : Generator { 85 | $sleep = $this->sleep($ticks); 86 | [$which, $ret] = yield from Await::safeRace([$sleep, $promise]); 87 | return match($which) { 88 | 0 => $onTimeout, 89 | 1 => $ret, 90 | default => throw new AssertionError("unreachable"), 91 | }; 92 | } 93 | 94 | /** 95 | * @template E of Event 96 | * @param class-string $event 97 | * @param Closure(E):bool $eventFilter 98 | * @return Generator 99 | */ 100 | public function awaitEvent(string $event, Closure $eventFilter, bool $consume, int $priority, bool $handleCancelled, object ...$disposables) : Generator { 101 | return yield from $this->eventAwaiter->await($event, $eventFilter, $consume, $priority, $handleCancelled, $disposables); 102 | } 103 | 104 | /** 105 | * Converts a Promise to a Generator by mapping onCompletion and 106 | * onError. 107 | * 108 | * @template V The promise's value 109 | * @throws PromiseRejectedException if the promise gets rejected 110 | * @param Promise $promise 111 | * @return Generator 112 | */ 113 | public static function promiseToGenerator(Promise $promise): Generator { 114 | return yield from Await::promise( 115 | static function($resolve, $reject) use ($promise) { 116 | $promise->onCompletion($resolve, static function() use ($reject) { 117 | $reject(new PromiseRejectedException('Promise was rejected!')); 118 | }); 119 | } 120 | ); 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /src/SOFe/AwaitStd/DisposableListener.php: -------------------------------------------------------------------------------- 1 | */ 19 | private SplObjectStorage $finalizers; 20 | /** @var array */ 21 | private array $disposableSpecs = []; 22 | /** @var array, true> */ 23 | private array $listenersSet = []; 24 | 25 | public function __construct(Plugin $plugin) { 26 | $this->plugin = $plugin; 27 | $this->finalizers = new SplObjectStorage; 28 | 29 | $this->specifyDisposable( 30 | Player::class, 31 | PlayerQuitEvent::class, 32 | fn($event) => $event->getPlayer(), 33 | fn($player) => "player {$player->getName()} quit" 34 | ); 35 | $this->specifyDisposable(World::class, 36 | WorldUnloadEvent::class, 37 | fn($event) => $event->getWorld(), 38 | fn($world) => "world {$world->getName()} unload" 39 | ); 40 | } 41 | 42 | /** 43 | * @template T 44 | * @template E of Event 45 | * @param class-string $disposableClass 46 | * @param class-string $eventClass 47 | * @param Closure(E):T $eventToDisposable 48 | * @param Closure(T):string $eventDescription 49 | */ 50 | private function specifyDisposable(string $disposableClass, string $eventClass, Closure $eventToDisposable, Closure $eventDescription) : void { 51 | /** @phpstan-ignore-next-line */ 52 | $spec = new DisposableSpec($eventClass, $eventToDisposable, $eventDescription); 53 | $this->disposableSpecs[$disposableClass] = $spec; 54 | } 55 | 56 | /** 57 | * @var Closure():void $closure */ 58 | public function addFinalizer(object $disposable, Closure $closure) : void { 59 | $spec = $this->getSpec($disposable); 60 | $this->setupListener($spec); 61 | if(!$this->finalizers->contains($disposable)) { 62 | $this->finalizers->attach($disposable, []); 63 | } 64 | 65 | $finalizersOfDisposable = $this->finalizers[$disposable] ?? []; 66 | $finalizersOfDisposable[] = $closure; 67 | $this->finalizers[$disposable] = $finalizersOfDisposable; 68 | } 69 | 70 | private function triggerFinalizers(object $object) : void { 71 | if(isset($this->finalizers[$object])) { 72 | foreach($this->finalizers[$object] as $closure) { 73 | $closure(); 74 | } 75 | $this->finalizers->detach($object); 76 | } 77 | } 78 | 79 | private function getSpec(object $disposable) : DisposableSpec { 80 | if(isset($this->disposableSpecs[get_class($disposable)])) { 81 | return $this->disposableSpecs[get_class($disposable)]; 82 | } 83 | 84 | foreach($this->disposableSpecs as $class => $spec) { 85 | if($disposable instanceof $class) { 86 | return $spec; 87 | } 88 | } 89 | 90 | $class = get_class($disposable); 91 | throw new \InvalidArgumentException("$class is not a disposable"); 92 | } 93 | 94 | private function setupListener(DisposableSpec $spec) : void { 95 | if(array_key_exists($spec->getEvent(), $this->listenersSet)) { 96 | return; 97 | } 98 | 99 | $this->listenersSet[$spec->getEvent()] = true; 100 | Server::getInstance()->getPluginManager()->registerEvent($spec->getEvent(), function($event) use($spec) : void { 101 | $disposable = $spec->eventToDisposable($event); 102 | $this->triggerFinalizers($disposable); 103 | }, EventPriority::MONITOR, $this->plugin); 104 | } 105 | 106 | public function getEventDescription(object $disposable) : string { 107 | $spec = $this->getSpec($disposable); 108 | return $spec->eventDescription($disposable); 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /src/SOFe/AwaitStd/DisposableSpec.php: -------------------------------------------------------------------------------- 1 | */ 10 | private string $event; 11 | /** @var Closure(Event):object */ 12 | private Closure $eventToDisposable; 13 | /** @var Closure(object):string */ 14 | private Closure $eventDescription; 15 | 16 | /** 17 | * @param class-string $event 18 | * @param Closure(Event):object $eventToDisposable 19 | * @param Closure(object):string $eventDescription 20 | */ 21 | public function __construct(string $event, Closure $eventToDisposable, Closure $eventDescription) { 22 | $this->event = $event; 23 | $this->eventToDisposable = $eventToDisposable; 24 | $this->eventDescription = $eventDescription; 25 | } 26 | 27 | /** 28 | * @return class-string 29 | */ 30 | public function getEvent() : string { 31 | return $this->event; 32 | } 33 | 34 | public function eventToDisposable(Event $event) : object { 35 | return ($this->eventToDisposable)($event); 36 | } 37 | 38 | public function eventDescription(object $disposable) : string { 39 | return ($this->eventDescription)($disposable); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/SOFe/AwaitStd/DisposeException.php: -------------------------------------------------------------------------------- 1 | getName()} did not handle the case of $eventDescription when awaiting its events"); 23 | $this->disposable = $disposable; 24 | } 25 | 26 | /** 27 | * @return object 28 | */ 29 | public function getDisposable() { 30 | return $this->disposable; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/SOFe/AwaitStd/EventAwaiter.php: -------------------------------------------------------------------------------- 1 | >> */ 17 | private array $queues = []; 18 | 19 | public function __construct(Plugin $plugin) { 20 | $this->plugin = $plugin; 21 | $this->disposableListener = new DisposableListener($plugin); 22 | } 23 | 24 | /** 25 | * @template E of Event 26 | * @param class-string $eventClass 27 | * @param Closure(E):bool $eventFilter 28 | * @param list $disposables 29 | * @return Generator 30 | */ 31 | public function await(string $eventClass, Closure $eventFilter, bool $consume, int $priority, bool $handleCancelled, array $disposables) : Generator { 32 | $id = $this->nextHandlerId++; 33 | 34 | $queueKey = $this->ensureListener($eventClass, $priority, $handleCancelled); 35 | 36 | return yield from Await::promise(function(Closure $resolve, Closure $fail) use ($queueKey, $id, $eventFilter, $disposables, $consume): void{ 37 | $this->queues[$queueKey][$id] = new EventQueueEntry($eventFilter, $resolve, $consume); 38 | 39 | foreach($disposables as $disposable) { 40 | $this->disposableListener->addFinalizer($disposable, function () use ($queueKey, $disposable, $id, $fail) : void { 41 | if (isset($this->queues[$queueKey][$id])) { 42 | unset($this->queues[$queueKey][$id]); 43 | $fail(new DisposeException($this->plugin, $this->disposableListener->getEventDescription($disposable), $disposable)); 44 | } 45 | }); 46 | } 47 | }); 48 | } 49 | 50 | /** 51 | * @param class-string $eventClass 52 | */ 53 | private function ensureListener(string $eventClass, int $priority, bool $handleCancelled) : string { 54 | $queueKey = "$eventClass:$priority:$handleCancelled"; 55 | 56 | if(array_key_exists($queueKey, $this->queues)) { 57 | return $queueKey; 58 | } 59 | 60 | $this->queues[$queueKey] = []; 61 | Server::getInstance()->getPluginManager()->registerEvent($eventClass, function(Event $event) use($queueKey) : void { 62 | foreach($this->queues[$queueKey] as $handlerId => $entry) { 63 | if($entry->filter($event)) { 64 | if($entry->isConsume()) { 65 | unset($this->queues[$queueKey][$handlerId]); 66 | } 67 | $entry->resolve($event); 68 | } 69 | } 70 | }, $priority, $this->plugin, $handleCancelled); 71 | 72 | return $queueKey; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/SOFe/AwaitStd/EventQueueEntry.php: -------------------------------------------------------------------------------- 1 | filter = $filter; 24 | $this->resolve = $resolve; 25 | $this->consume = $consume; 26 | } 27 | 28 | /** 29 | * @param E $event 30 | */ 31 | public function filter(Event $event) : bool { 32 | return ($this->filter)($event); 33 | } 34 | 35 | /** 36 | * @param E $event 37 | */ 38 | public function resolve(Event $event) : void { 39 | ($this->resolve)($event); 40 | } 41 | 42 | public function isConsume() : bool { 43 | return $this->consume; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/SOFe/AwaitStd/PromiseRejectedException.php: -------------------------------------------------------------------------------- 1 |