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

如何为Pocketmine-MP自定义实体添加随机移动功能?

复用Pocketmine-MP原版实体随机移动逻辑的实现方案

核心实现步骤

  • 更换父类简化逻辑:不要直接继承Entity基类,改成继承Creature类(原版生物的通用父类),如果你的恐龙是被动生物,还可以进一步继承Animal类。这两个类已经封装好了随机移动、寻路、重力处理等全套基础逻辑,不需要自己从零实现。
  • 正确初始化构造函数:如果坚持继承Entity,必须在构造函数中调用父类构造方法,同时初始化移动相关属性:
    public function __construct(World $world, CompoundTag $nbt){
        parent::__construct($world, $nbt);
        $this->movementSpeed = 0.2; // 设置移动速度
        $this->setScale(1.0); // 可选,调整实体大小
    }
    
  • 复用原版移动更新逻辑:在你的DinosaurEntity类中重写onUpdate()方法,调用原版的移动处理逻辑,同时添加随机转向触发:
    public function onUpdate(int $currentTick): bool{
        $hasUpdate = parent::onUpdate($currentTick);
        // 每100tick随机改变一次移动方向
        if($this->getRandom()->nextBoundedInt(100) === 0){
            $this->motion->x = $this->getRandom()->nextFloat() * 2 - 1;
            $this->motion->z = $this->getRandom()->nextFloat() * 2 - 1;
        }
        // 调用原版移动处理方法,处理重力、碰撞、位置同步
        $this->updateMovement();
        return $hasUpdate;
    }
    
  • 注册实体属性:在实体的defineProperties()方法中定义移动速度属性,确保逻辑生效:
    protected function defineProperties(): void{
        parent::defineProperties();
        $this->registerProperty("movement_speed", 0.2);
    }
    

关键注意点

  • 继承Creature或Animal后,父类的onUpdate()已经包含了随机移动的触发逻辑,你只需要调整移动速度等参数即可,无需手动写方向随机代码。
  • 不要直接复制Entity基类的onUpdate()代码,调用父类方法可以避免破坏实体的基础生命周期逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:10:07