网易我的世界论坛

标题: [公告]AddEntitySeat接口管理通知 [打印本页]

作者: 我的世界开花组    时间: 2025-3-7 18:12
标题: [公告]AddEntitySeat接口管理通知
尊敬的各位开发者:

AddEntitySeat接口为实体添加座位时会存档,给实体新增的座位并不会在退出游戏时自动清除。若您的组件使用了AddEntitySeat接口,如果未做生命周期管理,会导致为一个实体添加过多座位,造成玩家无法进入存档等问题。为给各位玩家一个更加良好的游戏体验,使您在维护作品的过程中减少不必要的成本,现建议您参照以下代码进行接口生命周期管理:
  1. # 注,该装饰器代表监听OnMobHitMobServerEvent事件,且名称和回调函数一致,具体请参考内容库《快速mod开发模板》
  2. # 假设最大座位号是self.seatCount
  3. @Listen
  4. def OnMobHitMobServerEvent(self, args):
  5.     mobId = args['mobId']
  6.     for entityId in args['hittedMobList']:
  7.         if CF.CreateEngineType(entityId).GetEngineTypeStr() == 'minecraft:player':
  8.             # 循环会一直调用DeleteEntitySeat方法,直到返回False为止,即没有座位可删除时才会退出循环
  9.             while CF.CreateRide(entityId).DeleteEntitySeat(self.seatCount):
  10.                 self.seatCount -= 1
  11.             # 删完后再添加座位
  12.             seatIndex = CF.CreateRide(entityId).AddEntitySeat((0, 1, 0), 0, 359)
  13.             # 把最大座位号存入全局变量
  14.             self.seatCount = seatIndex
  15.             CF.CreateRide(mobId).SetRiderRideEntity(mobId, entityId, seatIndex)
  16.             CF.CreatePlayer(mobId).ClosePlayerHitMobDetection()
复制代码





欢迎光临 网易我的世界论坛 (http://mc.netease.com/) Powered by Discuz! X3.3