Class MovementParse

java.lang.Object
handling.channel.handler.MovementParse

public class MovementParse extends Object
移動封包的「位移序列解析與套用」工具,供處理玩家/怪物/寵物/召喚獸/龍移動的處理器共用。

parseMovement 依封包中的指令位元組逐筆解出各種 LifeMovementFragment 子類(AbsoluteLifeMovementRelativeLifeMovementTeleportMovement 等), 還原成一個移動片段清單;updatePosition 再將該清單套用到對應的 AnimatedMapleMapObject,更新其座標、朝向與狀態。封包來源由 LittleEndianAccessor 提供。

移動種類由 kind 參數區分(1=玩家、2=怪物、3=寵物、 4=召喚獸、5=龍);解析結果通常再轉送給 PlayerHandlerMobHandler 等處理器作後續廣播與校驗。

  • Constructor Details

    • MovementParse

      public MovementParse()
  • Method Details

    • parseMovement

      public static List<LifeMovementFragment> parseMovement(LittleEndianAccessor lea, int kind)
      從移動封包逐筆解析出位移片段清單。

      先讀取指令筆數,再依每個指令位元組(command byte)建構對應的 LifeMovementFragment 子類並收集成清單,支援 AbsoluteLifeMovementRelativeLifeMovementTeleportMovement 與跳躍、變身(changeEquip)等多種移動型態。kind 區分移動主體 (1=玩家、2=怪物、3=寵物、4=召喚獸、5=龍), 影響部分欄位的讀取方式。

      此方法僅讀取封包、不變更任何遊戲狀態;其結果通常交由 updatePosition(List, AnimatedMapleMapObject, int) 套用到地圖物件,並由呼叫端轉送廣播。

      Parameters:
      lea - 移動封包的小端序讀取器,方法會依序消耗其中的指令資料
      kind - 移動主體種類(1=玩家、2=怪物、3=寵物、4=召喚獸、5=龍)
      Returns:
      解析出的移動片段清單;若實際解析筆數與封包宣告筆數不符(疑似封包竄改),則回傳 null
    • updatePosition

      public static void updatePosition(List<LifeMovementFragment> movement, AnimatedMapleMapObject target, int yoffset)
      將解析後的移動片段清單套用到指定的地圖物件,更新其座標與朝向。

      逐筆走訪 movement:對 LifeMovement 子類更新目標的位置 (AbsoluteLifeMovementyoffset 校正 Y 座標)與最後的朝向 (stance)。直接變更傳入的 target 狀態,屬於原地副作用,通常在地圖情境下 由移動處理器呼叫。

      Parameters:
      movement - 由 parseMovement(LittleEndianAccessor, int) 解出的移動片段清單;為 null 時直接返回不做任何事
      target - 要被更新座標/朝向的動畫地圖物件(會被就地變更)
      yoffset - 套用 AbsoluteLifeMovement 絕對座標時對 Y 座標的位移修正量