You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PocketMine-MP 4.0.0实现世界边界(限制玩家越界)?

PocketMine-MP 4.0.0 实现世界边界功能

核心思路

通过监听玩家移动事件,实时校验玩家坐标是否超出设定范围,若超出则强制将玩家位置修正到边界内,阻止越界移动。

具体实现步骤

  • 注册事件监听器:在插件主类的onEnable()方法中注册PlayerMoveEvent监听
  • 定义边界参数:设置世界边界的最小/最大X、Z坐标(Y轴限制可选)
  • 坐标校验逻辑:在事件回调中获取玩家当前位置,判断是否越界,越界则修正位置

完整代码示例

<?php

namespace YourPluginNamespace;

use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerMoveEvent;
use pocketmine\math\Vector3;

class Main extends PluginBase implements Listener {

    // 定义世界边界坐标(可按需修改)
    private const MIN_X = -100;
    private const MAX_X = 100;
    private const MIN_Z = -100;
    private const MAX_Z = 100;
    // 可选:添加Y轴高度限制
    // private const MIN_Y = 0;
    // private const MAX_Y = 256;

    public function onEnable(): void {
        $this->getServer()->getPluginManager()->registerEvents($this, $this);
        $this->getLogger()->info("世界边界功能已启用");
    }

    public function onPlayerMove(PlayerMoveEvent $event): void {
        $player = $event->getPlayer();
        $newPos = $event->getTo();

        // 修正X坐标到边界范围内
        $x = max(self::MIN_X, min(self::MAX_X, $newPos->getX()));
        // 修正Z坐标到边界范围内
        $z = max(self::MIN_Z, min(self::MAX_Z, $newPos->getZ()));
        // 可选:修正Y坐标
        // $y = max(self::MIN_Y, min(self::MAX_Y, $newPos->getY()));

        // 若坐标存在修正,取消原移动并传送玩家到边界内
        if($x !== $newPos->getX() || $z !== $newPos->getZ()){
            $event->setCancelled();
            // 保留原Y坐标,替换X/Z为边界内数值
            $player->teleport(new Vector3($x, $newPos->getY(), $z));
            // 可选:给玩家发送提示
            // $player->sendMessage("已到达世界边界,无法继续前进");
        }
    }
}

注意事项

  • 替换YourPluginNamespace为你的插件实际命名空间
  • 可根据需求调整边界坐标数值,或添加Y轴高度限制
  • 若需要针对特定世界生效,可在事件中加入$player->getWorld()->getName()的判断逻辑

内容的提问来源于stack exchange,提问作者NotU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:31:42