// =========================================================
// 任务：扩展甲板
// 规则：
// - 计算玩家飞艇体积，并实时映射至customTask，达到即任务完成。
// - 满足一次即完成
// =========================================================

;(() => {
  const TASK_ID = '50A3BFD264C38DA0'
  const CHECK_TIMER_TICKS = 20
  const MIN_Y = 100

  const MIN_X = 76
  const MIN_Z = 64
  const HEIGHT_CAP = 64   // 超过就不计（或直接判失败）

  // 进度目标：把 X、Z 两项拼成线性目标（也可 +HEIGHT_CAP）
  const TARGET_PROGRESS = MIN_X + MIN_Z

  FTBQuestsEvents.customTask(TASK_ID, event => {
    event.maxProgress = TARGET_PROGRESS
    event.setCheckTimer(CHECK_TIMER_TICKS)

    event.setCheck((task, player) => {
      const ship = VS.js().getShipPlayerIsOnStrict(player)
      if (!ship) { task.progress = 0; return }

      const sp = VS.js().getShipPosition(ship)
      if (!sp) { task.progress = 0; return }
      const shipY = Number(sp[1])
      if (!isFinite(shipY) || shipY <= MIN_Y) { task.progress = 0; return }

      const aabb = ship.getShipAABB()
      if (!aabb) { task.progress = 0; return }

      const dx = Number(aabb.maxX() - aabb.minX() + 1)
      const dy = Number(aabb.maxY() - aabb.minY() + 1)
      const dz = Number(aabb.maxZ() - aabb.minZ() + 1)
      if (!isFinite(dx) || !isFinite(dy) || !isFinite(dz)) { task.progress = 0; return }

      // 高度上限：防堆塔
      if (dy > HEIGHT_CAP) { task.progress = 0; return }

      // 进度：X、Z 线性累计（直观且平滑）
      const px = Math.min(dx, MIN_X)
      const pz = Math.min(dz, MIN_Z)
      task.progress = Math.floor(px + pz)
    })
  })
})()



// =========================================================
// 任务：挂载系统
// 规则：
// - 必须主手使用
// - 使用的物品必须命中列表（多种载具任意一种）
// - 玩家当时严格在同一艘船上（strict）
// - 玩家脚下位置必须在该船 claim 管理范围内（同船）
// - 飞艇 Y > 100（使用 ship position）
// - 满足一次即完成
// =========================================================

;(() => {
  const TASK_ID = '056B36B875158CD4'
  const CHECK_TIMER_TICKS = 20

  // ⭐ 填“载具物品ID”列表（任意一个命中即算）
  // 示例：原版船/运输船/矿车（根据你整合包实际物品改）
  const TARGET_ITEM_IDS = [
    'immersive_aircraft:gyrodyne',
    'immersive_aircraft:airship',
    'immersive_aircraft:cargo_airship',
    'immersive_aircraft:quadrocopter',
    'immersive_aircraft:bamboo_hopper'
    // 'modid:your_vehicle_item',
  ]

  const KEY_DONE = `vs_useveh_done_${TASK_ID}`

  // -------------------------------------------------
  // 1) 监听右键使用物品（服务器侧）
  // -------------------------------------------------
  ItemEvents.rightClicked(event => {
    const player = event.player
    if (player == null) return
    if (player.level.isClientSide()) return

    // A) 必须主手
    if (String(event.hand) !== 'MAIN_HAND') return

    // B) 物品必须命中列表
    const itemId = String(event.item.id)
    if (!TARGET_ITEM_IDS.includes(itemId)) return

    // C) 玩家必须 strict 在船上
    const shipOfPlayer = VS.js().getShipPlayerIsOnStrict(player)
    if (shipOfPlayer == null) return

    // 达成：写标记
    player.persistentData.putString(KEY_DONE, '1')

    // 可选：防止真正放置实体（仅当你希望“只是触发任务，不让放置”）
    // event.cancel()
  })

  // --------------------------------
  // 2) FTBQ 自定义任务：检测标记并完成
  // --------------------------------
  FTBQuestsEvents.customTask(TASK_ID, event => {
    event.maxProgress = 1
    event.setCheckTimer(CHECK_TIMER_TICKS)

    event.setCheck((task, player) => {
      const done = (player.persistentData.getString(KEY_DONE) || '') === '1'
      if (!done) { task.progress = 0; return }

      task.progress = 1
      player.persistentData.remove(KEY_DONE)
    })
  })
})()



;(() => {
// =========================================================
// 任务：火力平台
// 规则：
// - 玩家当时严格在同一艘船上（strict）
// - 飞艇 Y > 100（使用 ship position）
// - 攻击任意生物
// =========================================================
  const TASK_ID = '54FE737B365AAD78'
  const KEY_ONSHIP_ATTACK = 'vs_task_onship_attack_done'
  const MIN_Y = 100   // 高度限制：必须大于100

  // =========================
  // 事件：玩家在船上 + 高度>100 攻击任意生物 -> 写入一次性标记
  // =========================
  EntityEvents.hurt(event => {
    const src = event.source
    if (!src) return

    const player = src.player
    if (!player) return

    const target = event.entity
    if (!target) return
    if (target.isPlayer && target.isPlayer()) return

    // ① 必须在船上
    if (!VS.js().isPlayerOnShipStrict(player)) return

    // ② 高度必须大于100
    if (player.y <= MIN_Y) return

    // 满足条件，写入标记
    player.persistentData.putString(KEY_ONSHIP_ATTACK, '1')
  })

  // =========================
  // FTB Quests 自定义任务
  // =========================
  FTBQuestsEvents.customTask(TASK_ID, event => {
    event.maxProgress = 1
    event.setCheckTimer(20)

    event.setCheck((task, player) => {
      const done = (player.persistentData.getString(KEY_ONSHIP_ATTACK) || '') === '1'
      if (!done) { task.progress = 0; return }

      task.progress = 1
      player.persistentData.remove(KEY_ONSHIP_ATTACK)
    })
  })
})()



;(() => {
// =========================================================
// 任务：防空炮组戒备！
// 规则：
// - 玩家当时严格在同一艘船上（strict）
// - 飞艇 Y > 100（使用 ship position）
// - 累计击杀10个幻翼
// =========================================================
  const TASK_ID = '65DC43FD50BAA330'
  const REQUIRED_KILLS = 10 // 需要击杀的数量

  // 目标生物（按需要增删，写 entity type id）
  // 例：'minecraft:zombie', 'minecraft:skeleton', 'alexsmobs:crimson_mosquito' ...
  const TARGET_TYPES = [
    'minecraft:phantom',
    // 'minecraft:skeleton',
  ]

  // 计数键（持久化存玩家身上）
  const KEY_KILL_COUNT = 'vs_task_onship_kill_count'

  // =========================
  // 事件：飞艇上击杀特定生物 -> 累加计数
  // =========================
  EntityEvents.death(event => {
    const src = event.source
    if (!src) return

    // 只统计“玩家造成的击杀”（含近战/远程/附魔等，只要 source.player 能拿到）
    const player = src.player
    if (!player) return

    const target = event.entity
    if (!target) return

    // 目标类型过滤
    const typeId = String(target.type) // KubeJS 通常能转成 'minecraft:zombie' 这种
    if (!TARGET_TYPES.includes(typeId)) return

    // 必须在飞艇/船上（严格）
    if (!VS.js().isPlayerOnShipStrict(player)) return

    // 累加计数（int）
    const cur = player.persistentData.getInt(KEY_KILL_COUNT)
    player.persistentData.putInt(KEY_KILL_COUNT, cur + 1)
  })

  // =========================
  // FTB Quests：读取计数 -> 推进进度 -> 达标完成
  // =========================
  FTBQuestsEvents.customTask(TASK_ID, event => {
    event.maxProgress = REQUIRED_KILLS
    event.setCheckTimer(20) // 每秒检查一次

    event.setCheck((task, player) => {
      const cur = player.persistentData.getInt(KEY_KILL_COUNT)

      // 进度按当前击杀数推进（上限 REQUIRED_KILLS）
      task.progress = Math.min(cur, REQUIRED_KILLS)

      // 可选：如果你希望完成后把计数清掉，避免后续重复利用旧计数
      if (cur >= REQUIRED_KILLS) {
        // 完成后清零（如果你想“永久累计不清零”，就删掉这两行）
        player.persistentData.putInt(KEY_KILL_COUNT, 0)
      }
    })
  })
})()



;(() => {
// =========================================================
// 任务：极速猎杀
// 规则：
// - 玩家当时严格在同一艘船上（strict）
// - 飞艇速度 > 7m/s
// - 累计击杀3个僵尸
// =========================================================
  const TASK_ID = '74C52EE3890BA2B9'
  const REQUIRED_KILLS = 3

  // 目标生物（entity type id）
  const TARGET_TYPES = [
    'minecraft:zombie',
  ]

  // 飞艇速度下限
  // 注意：VS 的 ship.getVelocity() 单位在不同版本/实现里可能表现为“方块/刻”或“方块/秒”
  // 这里我们统一换算成“方块/秒”来写阈值（更直观）：speedPerSecond = speedPerTick * 20
  const MIN_SHIP_SPEED_BPS = 7  // blocks per second

  const KEY_KILL_COUNT = 'vs_task_onship_kill_count'

  // =========================
  // 工具：计算飞艇速度（方块/秒）
  // =========================
  function getShipSpeedBps(ship) {
    const v = VS.js().getShipVelocity(ship) // [vx, vy, vz]
    if (!v || v.length < 3) return 0

    const speedPerTick = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2])
    return speedPerTick * 20
  }

  // =========================
  // 击杀事件：飞艇上 + 船速达标 + 击杀特定生物 -> 累加计数
  // =========================
  EntityEvents.death(event => {
    const src = event.source
    if (!src) return

    const player = src.player
    if (!player) return

    const target = event.entity
    if (!target) return

    const typeId = String(target.type)
    if (!TARGET_TYPES.includes(typeId)) return

    // ① 必须在飞艇/船上，并拿到对应 Ship
    const ship = VS.js().getShipPlayerIsOnStrict(player)
    if (!ship) return

    // ② 飞艇移速限制（用船的速度，不用玩家 motion）
    const shipSpeed = getShipSpeedBps(ship)
    if (shipSpeed < MIN_SHIP_SPEED_BPS) return

    // ③ 累计击杀数
    const cur = player.persistentData.getInt(KEY_KILL_COUNT)
    player.persistentData.putInt(KEY_KILL_COUNT, cur + 1)
  })

  // =========================
  // FTB Quests：读取计数 -> 推进进度 -> 达标完成（并清零）
  // =========================
  FTBQuestsEvents.customTask(TASK_ID, event => {
    event.maxProgress = REQUIRED_KILLS
    event.setCheckTimer(20)

    event.setCheck((task, player) => {
      const cur = player.persistentData.getInt(KEY_KILL_COUNT)
      task.progress = Math.min(cur, REQUIRED_KILLS)

      if (cur >= REQUIRED_KILLS) {
        // 完成后清零；若你想“永久累计不清零”，删掉这一行即可
        player.persistentData.putInt(KEY_KILL_COUNT, 0)
      }
    })
  })
})()
