Custom server software for Minecraft: Bedrock, built from scratch in PHP, C and C++

分支14Tags471
文件最后提交记录最后更新时间
Bump the github-actions group across 1 directory with 7 updates (#7038) Bumps the github-actions group with 7 updates in the / directory: | Package | From | To | | --- | --- | --- | | [actions/create-github-app-token](https://github.com/actions/create-github-app-token) | `2` | `3` | | [shivammathur/setup-php](https://github.com/shivammathur/setup-php) | `2.36.0` | `2.37.0` | | [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `3` | `4` | | [docker/build-push-action](https://github.com/docker/build-push-action) | `6.19.2` | `7.1.0` | | [docker/login-action](https://github.com/docker/login-action) | `3` | `4` | | [ncipollo/release-action](https://github.com/ncipollo/release-action) | `1.20.0` | `1.21.0` | | [actions/github-script](https://github.com/actions/github-script) | `8` | `9` | Updates `actions/create-github-app-token` from 2 to 3 - [Release notes](https://github.com/actions/create-github-app-token/releases) - [Commits](https://github.com/actions/create-github-app-token/compare/v2...v3) Updates `shivammathur/setup-php` from 2.36.0 to 2.37.0 - [Release notes](https://github.com/shivammathur/setup-php/releases) - [Commits](https://github.com/shivammathur/setup-php/compare/2.36.0...2.37.0) Updates `docker/setup-buildx-action` from 3 to 4 - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4) Updates `docker/build-push-action` from 6.19.2 to 7.1.0 - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.19.2...v7.1.0) Updates `docker/login-action` from 3 to 4 - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v3...v4) Updates `ncipollo/release-action` from 1.20.0 to 1.21.0 - [Release notes](https://github.com/ncipollo/release-action/releases) - [Commits](https://github.com/ncipollo/release-action/compare/v1.20.0...v1.21.0) Updates `actions/github-script` from 8 to 9 - [Release notes](https://github.com/actions/github-script/releases) - [Commits](https://github.com/actions/github-script/compare/v8...v9) --- updated-dependencies: - dependency-name: actions/create-github-app-token dependency-version: '3' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: shivammathur/setup-php dependency-version: 2.37.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: docker/setup-buildx-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: docker/build-push-action dependency-version: 7.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: docker/login-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions - dependency-name: ncipollo/release-action dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: github-actions - dependency-name: actions/github-script dependency-version: '9' dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>20 天前
Make changelogs less infuriating in PhpStorm 2 年前
CS 2 个月前
5.43.1 (#7042)13 天前
Merge branch 'stable' into minor-next 4 个月前
Fully generated registry accessor classes (#6905) This is a new take on RegistryTrait. While this is a major change internally, outwardly it should work exactly the same for the vast majority of plugins. However, any plugins that were using reflection to mess with Vanilla* (e.g. to override blocks) will break due to internal design changes. Compared to RegistryTrait, this has various advantages: - Performance - simple (non-cloning) registry accessors such as VanillaEffects are over 300% faster - cloning registry accessors like VanillaItems are 30-40% faster - registry accessors are now regular functions instead of using __callStatic(), meaning that JIT and Opcache optimizations can improve their performance even further - Robustness - while the member values of registries can still be tampered with via reflection, their types are now strictly enforced, which forces plugins to use a class that matches the original type if they want to e.g. hack in a custom class for a block - plugins cannot add new registry cases via reflection, making it clear that these are not meant to be modified - Separation of gencode from source code: this makes it clearer to contributors which files are not to be touched - Doxygen can now understand VanillaBlocks et al and generate proper docs entries, since it didn't understand the @method tags used previously How it works: - A class extending RegistrySource is declared - Members are declared in setup() as before, using register() or registerDelayed() depending on the needs of the code - build/generate-registry-interface.php src generated - Generated classes with many functions and initialization logic are placed in the generated/ folder - When first accessed, the generated class invokes YourRegistrySource->setup() to get the values to assign to its internal members The main downside to this change is that the generated registry accessor class cannot have custom code added to it. This pattern was never used by PocketMine-MP, but grepPlugins reveals that plugin developers sometimes add custom utility functions to RegistryTrait-using classes, which is not possible with this new system. However, this seems like a small price to pay for the major improvements this system enables. Such functions can always be moved to a separate utility class. This might be revisited in the future if there's a demand for custom functions on the generated output class. This change also opens the potential for allowing proper overrides of blocks and items, since the gencode is able to enforce class types and ensure type compatibility with code using these functions. I'm not sure if this is something we'll actually allow, but it's a lot less work to safely allow it with this design than with the legacy RegistryTrait. RegistryTrait would have had to do manual type verification, while this design just works like normal code. There are some minor caveats with this approach, however. Since the accessor functions don't necessarily exist during setup() (as it may be called during codegen), anything that wants to access something via a generated registry interface must use registerDelayed() instead of register(). This is seen in a few places in VanillaItems where items need to reference VanillaBlocks. In this case, the type of the generated registry accessor is based on the return type of the closure given to registerDelayed(), instead of being taken directly from the value. This allows the gencode script to operate without fully initializing the registry, which would cause a circular dependency problem. TLDR: New registry system, much fast, big improve, many robust, very wow!4 个月前
More script plugin doc updates 6 个月前
Bedrock 1.26.20 (#7040)14 天前
New translations from Crowdin (stable) (#7025) Co-authored-by: pmmp-admin-bot[bot] <188621379+pmmp-admin-bot[bot]@users.noreply.github.com>2 个月前
Player: fix several bed bugs - player becoming invisible when leaving bed far from 0,0,0 - player staying stuck in sleep state when bed is destroyed closes #7000 12 天前
Update PHPStan 1 个月前
Bedrock 1.26.20 (#7040)14 天前
Use 2 space indents in YAML files this is (mostly) a backport of #2593 to 3.5. Closes #2593. 7 年前
Merge the Language repo into the main PM repo the separated language repository has long been a source of inconvenience and annoyance, particularly for PR contributors, because having to sync two PRs across different repos for no reason adds unnecessary friction. In addition, having the language files separate creates unnecessary requirements for versioning and branching, which could all be avoided if the language strings were managed directly in this repository. This change will make it much easier to do new features that require adding new translation strings, as well as getting rid of the inconvenience of cleaning up older strings. Translation updates from Crowdin should also be able to be merged more quickly, since they will have higher visibility on this repository. 7 个月前
Merged PocketMine-Docker repo into the main repo I don't think it ever made sense for these to be separated. It just gets in the way of testing. Not least the fact that the Docker image can't be built from an untagged commit... 5 个月前
Change submodule reference to https 5 个月前
Fully generated registry accessor classes (#6905) This is a new take on RegistryTrait. While this is a major change internally, outwardly it should work exactly the same for the vast majority of plugins. However, any plugins that were using reflection to mess with Vanilla* (e.g. to override blocks) will break due to internal design changes. Compared to RegistryTrait, this has various advantages: - Performance - simple (non-cloning) registry accessors such as VanillaEffects are over 300% faster - cloning registry accessors like VanillaItems are 30-40% faster - registry accessors are now regular functions instead of using __callStatic(), meaning that JIT and Opcache optimizations can improve their performance even further - Robustness - while the member values of registries can still be tampered with via reflection, their types are now strictly enforced, which forces plugins to use a class that matches the original type if they want to e.g. hack in a custom class for a block - plugins cannot add new registry cases via reflection, making it clear that these are not meant to be modified - Separation of gencode from source code: this makes it clearer to contributors which files are not to be touched - Doxygen can now understand VanillaBlocks et al and generate proper docs entries, since it didn't understand the @method tags used previously How it works: - A class extending RegistrySource is declared - Members are declared in setup() as before, using register() or registerDelayed() depending on the needs of the code - build/generate-registry-interface.php src generated - Generated classes with many functions and initialization logic are placed in the generated/ folder - When first accessed, the generated class invokes YourRegistrySource->setup() to get the values to assign to its internal members The main downside to this change is that the generated registry accessor class cannot have custom code added to it. This pattern was never used by PocketMine-MP, but grepPlugins reveals that plugin developers sometimes add custom utility functions to RegistryTrait-using classes, which is not possible with this new system. However, this seems like a small price to pay for the major improvements this system enables. Such functions can always be moved to a separate utility class. This might be revisited in the future if there's a demand for custom functions on the generated output class. This change also opens the potential for allowing proper overrides of blocks and items, since the gencode is able to enforce class types and ensure type compatibility with code using these functions. I'm not sure if this is something we'll actually allow, but it's a lot less work to safely allow it with this design than with the legacy RegistryTrait. RegistryTrait would have had to do manual type verification, while this design just works like normal code. There are some minor caveats with this approach, however. Since the accessor functions don't necessarily exist during setup() (as it may be called during codegen), anything that wants to access something via a generated registry interface must use registerDelayed() instead of register(). This is seen in a few places in VanillaItems where items need to reference VanillaBlocks. In this case, the type of the generated registry accessor is based on the return type of the closure given to registerDelayed(), instead of being taken directly from the value. This allows the gencode script to operate without fully initializing the registry, which would cause a circular dependency problem. TLDR: New registry system, much fast, big improve, many robust, very wow!4 个月前
Prepare for PHP 8.2 as primary version 2 年前
when did I get so bad at punctuation4 个月前
oops, wrong move 13 年前
Updated Bitcoin donation address 8 个月前
Update security policy4 个月前
Fixed self-signed authentication for 1.26.20 13 天前
Bump phpstan/phpstan-strict-rules in the phpstan group (#7039) Bumps the phpstan group with 1 update: [phpstan/phpstan-strict-rules](https://github.com/phpstan/phpstan-strict-rules). Updates `phpstan/phpstan-strict-rules` from 2.0.10 to 2.0.11 - [Release notes](https://github.com/phpstan/phpstan-strict-rules/releases) - [Commits](https://github.com/phpstan/phpstan-strict-rules/compare/2.0.10...2.0.11) --- updated-dependencies: - dependency-name: phpstan/phpstan-strict-rules dependency-version: 2.0.11 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: phpstan ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>12 天前
Merge the Language repo into the main PM repo the separated language repository has long been a source of inconvenience and annoyance, particularly for PR contributors, because having to sync two PRs across different repos for no reason adds unnecessary friction. In addition, having the language files separate creates unnecessary requirements for versioning and branching, which could all be avoided if the language strings were managed directly in this repository. This change will make it much easier to do new features that require adding new translation strings, as well as getting rid of the inconvenience of cleaning up older strings. Translation updates from Crowdin should also be able to be merged more quickly, since they will have higher visibility on this repository. 7 个月前
install-local-protocol: fix permissions 3 个月前
Fully generated registry accessor classes (#6905) This is a new take on RegistryTrait. While this is a major change internally, outwardly it should work exactly the same for the vast majority of plugins. However, any plugins that were using reflection to mess with Vanilla* (e.g. to override blocks) will break due to internal design changes. Compared to RegistryTrait, this has various advantages: - Performance - simple (non-cloning) registry accessors such as VanillaEffects are over 300% faster - cloning registry accessors like VanillaItems are 30-40% faster - registry accessors are now regular functions instead of using __callStatic(), meaning that JIT and Opcache optimizations can improve their performance even further - Robustness - while the member values of registries can still be tampered with via reflection, their types are now strictly enforced, which forces plugins to use a class that matches the original type if they want to e.g. hack in a custom class for a block - plugins cannot add new registry cases via reflection, making it clear that these are not meant to be modified - Separation of gencode from source code: this makes it clearer to contributors which files are not to be touched - Doxygen can now understand VanillaBlocks et al and generate proper docs entries, since it didn't understand the @method tags used previously How it works: - A class extending RegistrySource is declared - Members are declared in setup() as before, using register() or registerDelayed() depending on the needs of the code - build/generate-registry-interface.php src generated - Generated classes with many functions and initialization logic are placed in the generated/ folder - When first accessed, the generated class invokes YourRegistrySource->setup() to get the values to assign to its internal members The main downside to this change is that the generated registry accessor class cannot have custom code added to it. This pattern was never used by PocketMine-MP, but grepPlugins reveals that plugin developers sometimes add custom utility functions to RegistryTrait-using classes, which is not possible with this new system. However, this seems like a small price to pay for the major improvements this system enables. Such functions can always be moved to a separate utility class. This might be revisited in the future if there's a demand for custom functions on the generated output class. This change also opens the potential for allowing proper overrides of blocks and items, since the gencode is able to enforce class types and ensure type compatibility with code using these functions. I'm not sure if this is something we'll actually allow, but it's a lot less work to safely allow it with this design than with the legacy RegistryTrait. RegistryTrait would have had to do manual type verification, while this design just works like normal code. There are some minor caveats with this approach, however. Since the accessor functions don't necessarily exist during setup() (as it may be called during codegen), anything that wants to access something via a generated registry interface must use registerDelayed() instead of register(). This is seen in a few places in VanillaItems where items need to reference VanillaBlocks. In this case, the type of the generated registry accessor is based on the return type of the closure given to registerDelayed(), instead of being taken directly from the value. This allows the gencode script to operate without fully initializing the registry, which would cause a circular dependency problem. TLDR: New registry system, much fast, big improve, many robust, very wow!4 个月前
start.cmd: prevent idiotic behaviour when paths contain characters such as brackets god I hate this shit so much 4 年前
Make nicer errors for PHP binary not being found 4 年前
start.sh: print warnings on unusual exit codes from the server process (#6497) 1 年前


一款高度可定制的开源服务器软件,适用于 Minecraft: Bedrock Edition,采用 PHP 编写

CI GitHub release (latest SemVer) Discord
GitHub all releases GitHub release (latest by SemVer)

这是什么?

PocketMine-MP 是一款高度可定制的 Minecraft: Bedrock Edition 服务器软件,完全采用 PHP 从零构建,拥有超过 10 年的发展历史。

如果您希望创建一个具备自定义功能的 Minecraft: Bedrock 服务器,那么这里就是您的不二之选。

  • 🧩 强大的插件 API - 按照您的需求扩展和定制游戏玩法
  • 🗺️ 丰富的生态系统庞大的开发者社区 - 轻松找到所需插件,并学习开发自己的插件
  • 🌐 多世界支持 - 无需将玩家转移到其他服务器节点,即可为他们提供更多样化的游戏体验
  • 🏎️ 性能表现 - 单服务器可支持 100 多名玩家(具体取决于硬件和插件情况)
  • ⤴️ 持续更新 - 通常在数天内即可支持 Minecraft 的新版本

❌ PocketMine-MP 并非原版 Minecraft 服务器软件。

它不太适合用于搭建原版生存服务器。 它缺少许多原版游戏中的功能,例如原版世界生成、红石系统、生物 AI 以及其他各种特性。

如果您只想玩 原版多人联机生存,建议使用 官方 Minecraft: Bedrock 服务器软件,而非 PocketMine-MP。

如果官方软件不适用,您可以尝试通过 Poggit 上的插件来补充 PocketMine-MP 缺失的部分功能,或者自行编写插件来实现这些功能。

入门指南

社区与支持

加入我们的 Discord 服务器,与其他用户和开发者交流。

您也可以在 StackOverflow 上使用 pocketmine 标签提问。

开发插件

如果您想编写自己的插件,以下资源可能会有所帮助。 如果需要帮助,随时可以向我们的社区提问。

为 PocketMine-MP 做贡献

PocketMine-MP 接受社区贡献!如果您想为 PocketMine-MP 贡献代码,以下资源会很有用。

刚接触?可以查看带有 "Easy task" 标签的 issues,通过解决这些问题来熟悉代码库。

捐赠

PocketMine-MP 是免费的,但它的开发需要 unpaid volunteers 投入大量时间和精力。捐赠能帮助我们持续为新版本提供支持,并添加玩家喜爱的功能。

您可以通过以下方式支持开发:

  • Patreon
  • Bitcoin (BTC):bc1q2v5ngyf8ugyd55kqa9ep35g2rv342ueqm6ks33
  • Stellar Lumens (XLM):GAAC5WZ33HCTE3BFJFZJXONMEIBNHFLBXM2HJVAZHXXPYA3HP5XPPS7T

感谢您的支持!

许可信息

本项目采用 LGPL-3.0 许可。详情请参见 LICENSE 文件。

pmmp/PocketMine 与 Mojang 无关联。所有品牌和商标均归其各自所有者所有。PocketMine-MP 并非 Mojang 认可的软件,也与 Mojang 无关联。

项目介绍

一款用PHP语言编写的面向Minecraft: Bedrock Edition的服务器软件【此简介由AI生成】

定制我的领域
2383.52 K1.64 K访问 GitHub

下载使用量

0

项目总下载次数(含Clone、Pull、 zip 包及 release 下载),每日凌晨更新

语言类型

PHP99.8%
Shell0.12%
Dockerfile0.04%
Batchfile0.02%
PowerShell0.02%