name: FakePlayerPlugin
version: '1.6.6.12.1'
main: me.bill.fakePlayerPlugin.FakePlayerPlugin
api-version: '1.21'
authors: [ F_PP, Kyttu ]
description: "Advanced Fake Player Spoofer for Paper 1.21+"
website: "https://modrinth.com/plugin/fake-player-plugin-(fpp)"
softdepend: [ PlaceholderAPI, WorldGuard, WorldEdit ]

commands:
  fpp:
    description: Fake Player Plugin main command
    usage: /fpp [sub-command]
    aliases: [ fakeplayer, fp ]
    permission-message: ''

# ══════════════════════════════════════════════════════════════════════════════
#                           PERMISSION SYSTEM  v1.6.5
# ══════════════════════════════════════════════════════════════════════════════
#
# STRUCTURE:  fpp.<command>[.<action>][.<scope>]
#   <command>  main command  (spawn, move, mine …)
#   <action>   specific sub-behaviour  (set, start, once, stop …)
#   <scope>    ownership tier  (own, others, bulk, all)
#
# TIERS:
#   fpp.admin / fpp.op   → FULL access  (identical — both work)
#   fpp.use              → USER access  (default: everyone)
#   individual nodes     → fine-grained control
#
# QUICK SETUP:
#   Grant full admin:    /lp group admin  permission set fpp.admin true
#   Grant user access:   /lp group member permission set fpp.use   true
#   Set bot limit (5):   /lp user Alice   permission set fpp.spawn.limit.5 true
#   Bypass cooldown:     /lp user VIP     permission set fpp.bypass.cooldown true
#   Negate /fpp command: /lp group guest  permission set fpp.command false
#
# LEGACY NODES (still fully supported — no migration required):
#   fpp.op           →  still works, identical to fpp.admin
#   fpp.delete       →  still works, identical to fpp.despawn
#   fpp.delete.all   →  still works, identical to fpp.despawn.bulk
#   fpp.useitem      →  still works, identical to fpp.use.cmd
# ══════════════════════════════════════════════════════════════════════════════

permissions:

  # ════════════════════════════════════════════════════════════════════════════
  #  WILDCARD TIERS
  # ════════════════════════════════════════════════════════════════════════════

  fpp.admin:
    description: >
      Full access to all FPP commands and features. New preferred name —
      equivalent to fpp.op. Assign to owner / admin groups only.
    default: op
    children:
      fpp.op:                   true

  fpp.op:
    description: >
      Full access to all FPP commands (legacy admin wildcard).
      fpp.admin is the new preferred name — both are identical in effect.
    default: op
    children:
      fpp.command:              true
      fpp.plugininfo:           true
      fpp.help:                 true
      fpp.spawn:                true
      fpp.spawn.multiple:       true
      fpp.spawn.mass:           true
      fpp.spawn.name:           true
      fpp.spawn.coords:         true
      fpp.despawn:              true
      fpp.despawn.bulk:         true
      fpp.despawn.own:          true
      fpp.delete:               true
      fpp.delete.all:           true
      fpp.list:                 true
      fpp.reload:               true
      fpp.info:                 true
      fpp.tp:                   true
      fpp.tph.all:              true
      fpp.bypass.max:           true
      fpp.bypass.cooldown:      true
      fpp.migrate:              true
      fpp.stats:                true
      fpp.freeze:               true
      fpp.settings:             true
      fpp.move:                 true
      fpp.move.to:              true
      fpp.move.stop:            true
      fpp.inventory:            true
      fpp.inventory.cmd:        true
      fpp.inventory.rightclick: true
      fpp.mine:                 true
      fpp.mine.start:           true
      fpp.mine.once:            true
      fpp.mine.stop:            true
      fpp.mine.area:            true
      fpp.storage:              true
      fpp.setowner:             true
      fpp.save:                 true
      fpp.place:                true
      fpp.place.start:          true
      fpp.place.once:           true
      fpp.place.stop:           true
      fpp.useitem:              true
      fpp.use.cmd:              true
      fpp.useitem.start:        true
      fpp.useitem.once:         true
      fpp.useitem.stop:         true
      fpp.attack:               true
      fpp.find:                 true
      fpp.follow:               true
      fpp.sleep:                true
      fpp.stop:                 true
      fpp.badword:              true
      fpp.rename:               true
      fpp.rename.own:           true
      fpp.notify:               true
      fpp.use:                  true

  fpp.use:
    description: >
      User-tier access: /fpp spawn (1 bot), /fpp tph, /fpp xp, /fpp info (own).
      Default: everyone. Negate for specific groups: /lp group guest permission set fpp.use false
    default: true
    children:
      fpp.command:              true
      fpp.help:                 true
      fpp.spawn.user:           true
      fpp.tph:                  true
      fpp.xp:                   true
      fpp.info.user:            true
      fpp.spawn.limit.1:        true

  # ════════════════════════════════════════════════════════════════════════════
  #  VISIBILITY
  # ════════════════════════════════════════════════════════════════════════════

  fpp.command:
    description: >
      Makes /fpp visible and usable (tab-complete, all sub-commands).
      Default: everyone. Negate to hide /fpp entirely from a group.
    default: true

  fpp.plugininfo:
    description: >
      Show full info panel on bare /fpp (version, author, active bots, links).
      Players without this see a minimal help hint instead. Default: op.
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  SPAWN
  # ════════════════════════════════════════════════════════════════════════════

  fpp.spawn:
    description: >
      Admin spawn — ignores personal bot limits. Grants fpp.spawn.multiple,
      fpp.spawn.mass, fpp.spawn.name, fpp.spawn.coords automatically.
    default: op
    children:
      fpp.spawn.multiple:   true
      fpp.spawn.mass:       true
      fpp.spawn.name:       true
      fpp.spawn.coords:     true

  fpp.spawn.user:
    description: >
      Spawn bots up to the player's personal limit (fpp.spawn.limit.<n>).
      Cannot use --name, coordinates, or multi-bot spawns. Included in fpp.use.
    default: true

  fpp.spawn.multiple:
    description: Spawn more than one bot at a time. Child of fpp.spawn.
    default: op

  fpp.spawn.mass:
    description: Alias for fpp.spawn.multiple — new preferred name.
    default: op
    children:
      fpp.spawn.multiple: true

  fpp.spawn.name:
    description: Use --name to spawn a bot with a custom name. Admin only.
    default: op

  fpp.spawn.coords:
    description: Spawn bots at explicit world / coordinate arguments. Admin only.
    default: op

  # ── Bot limits ──────────────────────────────────────────────────────────────
  # Assign the highest node the player should be allowed.
  # fpp.spawn.limit.1 is included in fpp.use (default for all players).
  fpp.spawn.limit.1:
    description: Personal bot limit — 1 bot. Included in fpp.use.
    default: false
  fpp.spawn.limit.2:
    description: Personal bot limit — 2 bots.
    default: false
  fpp.spawn.limit.3:
    description: Personal bot limit — 3 bots.
    default: false
  fpp.spawn.limit.4:
    description: Personal bot limit — 4 bots.
    default: false
  fpp.spawn.limit.5:
    description: Personal bot limit — 5 bots.
    default: false
  fpp.spawn.limit.6:
    description: Personal bot limit — 6 bots.
    default: false
  fpp.spawn.limit.7:
    description: Personal bot limit — 7 bots.
    default: false
  fpp.spawn.limit.8:
    description: Personal bot limit — 8 bots.
    default: false
  fpp.spawn.limit.9:
    description: Personal bot limit — 9 bots.
    default: false
  fpp.spawn.limit.10:
    description: Personal bot limit — 10 bots.
    default: false
  fpp.spawn.limit.15:
    description: Personal bot limit — 15 bots.
    default: false
  fpp.spawn.limit.20:
    description: Personal bot limit — 20 bots.
    default: false
  fpp.spawn.limit.25:
    description: Personal bot limit — 25 bots.
    default: false
  fpp.spawn.limit.30:
    description: Personal bot limit — 30 bots.
    default: false
  fpp.spawn.limit.40:
    description: Personal bot limit — 40 bots.
    default: false
  fpp.spawn.limit.50:
    description: Personal bot limit — 50 bots.
    default: false
  fpp.spawn.limit.75:
    description: Personal bot limit — 75 bots.
    default: false
  fpp.spawn.limit.100:
    description: Personal bot limit — 100 bots.
    default: false

  # ════════════════════════════════════════════════════════════════════════════
  #  DESPAWN  (fpp.despawn = new name;  fpp.delete = legacy alias)
  # ════════════════════════════════════════════════════════════════════════════

  fpp.despawn:
    description: >
      Despawn bots — new preferred node. Grants fpp.delete, fpp.delete.all,
      fpp.despawn.bulk, fpp.despawn.own automatically.
    default: op
    children:
      fpp.delete:         true
      fpp.delete.all:     true
      fpp.despawn.bulk:   true
      fpp.despawn.own:    true

  fpp.delete:
    description: >
      Despawn fake players — legacy node (still fully supported).
      Prefer fpp.despawn for new setups.
    default: op
    children:
      fpp.delete.all: true

  fpp.delete.all:
    description: Despawn ALL bots at once (/fpp despawn all). Legacy node.
    default: op

  fpp.despawn.bulk:
    description: >
      New alias for fpp.delete.all — despawn multiple bots at once
      (--count, --random --count). Grants fpp.delete.all.
    default: op
    children:
      fpp.delete.all: true

  fpp.despawn.own:
    description: Despawn only bots the sender personally spawned.
    default: false

  # ════════════════════════════════════════════════════════════════════════════
  #  HELP / LIST / STATS
  # ════════════════════════════════════════════════════════════════════════════

  fpp.help:
    description: View /fpp help menu. Granted to everyone via fpp.use.
    default: true

  fpp.list:
    description: List all active bots with /fpp list.
    default: op

  fpp.stats:
    description: View live plugin statistics with /fpp stats.
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  INFO
  # ════════════════════════════════════════════════════════════════════════════

  fpp.info:
    description: >
      Full admin database query — session history, timestamps, all bots.
    default: op

  fpp.info.user:
    description: >
      User info — own bots only (world, coordinates, uptime). In fpp.use.
    default: true

  # ════════════════════════════════════════════════════════════════════════════
  #  TELEPORT
  # ════════════════════════════════════════════════════════════════════════════

  fpp.tp:
    description: Teleport yourself to any active bot. Admin.
    default: op

  fpp.tph:
    description: Teleport your own bot(s) to you. Included in fpp.use.
    default: true

  fpp.tph.all:
    description: Teleport all accessible bots to you with /fpp tph all.
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  XP
  # ════════════════════════════════════════════════════════════════════════════

  fpp.xp:
    description: Collect XP from your own bots. Included in fpp.use.
    default: true

  # ════════════════════════════════════════════════════════════════════════════
  #  MOVE  (granular sub-nodes)
  # ════════════════════════════════════════════════════════════════════════════

  fpp.move:
    description: >
      Navigate bots — grants fpp.move.to and fpp.move.stop.
    default: op
    children:
      fpp.move.to:       true
      fpp.move.stop:     true

  fpp.move.to:
    description: Send a bot to follow a player (--to <player>).
    default: op

  fpp.move.stop:
    description: Stop a bot's navigation (--stop).
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  FREEZE
  # ════════════════════════════════════════════════════════════════════════════

  fpp.freeze:
    description: Freeze / unfreeze bots with /fpp freeze <bot|all> [on|off].
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  RENAME
  # ════════════════════════════════════════════════════════════════════════════

  fpp.rename:
    description: >
      Rename any active bot (admin — any bot regardless of owner).
      Grants fpp.rename.own automatically.
    default: op
    children:
      fpp.rename.own: true

  fpp.rename.own:
    description: Rename only bots the sender personally spawned. User opt-in.
    default: false

  # ════════════════════════════════════════════════════════════════════════════
  #  INVENTORY
  # ════════════════════════════════════════════════════════════════════════════

  fpp.inventory:
    description: >
      Full inventory access — grants both fpp.inventory.cmd and
      fpp.inventory.rightclick automatically.
    default: op
    children:
      fpp.inventory.cmd:        true
      fpp.inventory.rightclick: true

  fpp.inventory.cmd:
    description: >
      Open a bot's inventory via /fpp inventory <bot> (or /fpp inv <bot>).
      Does not affect right-click behaviour.
    default: op

  fpp.inventory.rightclick:
    description: >
      Open a bot's inventory by right-clicking its entity in the world.
      Does not affect the /fpp inventory command.
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  MINE  (granular sub-nodes)
  # ════════════════════════════════════════════════════════════════════════════

  fpp.mine:
    description: >
      Bot mining automation — grants fpp.mine.start, fpp.mine.once,
      fpp.mine.stop, fpp.mine.area.
    default: op
    children:
      fpp.mine.start: true
      fpp.mine.once:  true
      fpp.mine.stop:  true
      fpp.mine.area:  true

  fpp.mine.start:
    description: Start continuous mining (/fpp mine <bot>).
    default: op

  fpp.mine.once:
    description: Mine a single block (/fpp mine <bot> --once).
    default: op

  fpp.mine.stop:
    description: Stop mining (/fpp mine <bot> --stop).
    default: op

  fpp.mine.area:
    description: Area-selection mining (--pos1 / --pos2 / --start).
    default: op

  fpp.mine.wesel:
    description: Use a WorldEdit selection as the mine area (--wesel).
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  USE  (fpp.useitem = legacy;  fpp.use.cmd = new alias)
  # ════════════════════════════════════════════════════════════════════════════

  fpp.useitem:
    description: >
      Bot right-click automation — legacy node (still fully supported).
      Prefer fpp.use.cmd for new setups. Grants fpp.useitem.start/once/stop.
    default: op
    children:
      fpp.useitem.start: true
      fpp.useitem.once:  true
      fpp.useitem.stop:  true

  fpp.use.cmd:
    description: >
      New alias for fpp.useitem — bot right-click automation.
      Grants fpp.useitem automatically.
    default: op
    children:
      fpp.useitem: true

  fpp.useitem.start:
    description: Start continuous right-click (/fpp use <bot>).
    default: op

  fpp.useitem.once:
    description: Single right-click (/fpp use <bot> --once).
    default: op

  fpp.useitem.stop:
    description: Stop right-clicking (/fpp use <bot> --stop).
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  ATTACK  (PvE combat)
  # ════════════════════════════════════════════════════════════════════════════

  fpp.attack:
    description: >
      Bot PvE attack — walk to sender, mirror look direction, attack entities.
      Respects 1.9+ attack cooldown and item-specific cooldowns dynamically.
    default: op

  fpp.attack.hunt:
    description: >
      Roaming mob hunt mode (--hunt).  Bot navigates autonomously to the nearest
      hostile mob (or a specific type) and attacks continuously.
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  FIND
  # ════════════════════════════════════════════════════════════════════════════

  fpp.find:
    description: >
      Search for nearby blocks of a chosen type and mine them one by one.
      Supports --radius and --count flags.
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  FOLLOW
  # ════════════════════════════════════════════════════════════════════════════

  fpp.follow:
    description: Make a bot continuously follow a player using pathfinding.
    default: op

  fpp.sleep:
    description: Set a sleep origin and radius for a bot — the bot auto-sleeps at night and wakes at dawn.
    default: op

  fpp.stop:
    description: Stop all active tasks (move/mine/use/place/attack/follow/find/sleep) for one or all bots.
    default: op

  fpp.setowner:
    description: Set the owner of a specific bot.
    default: op

  fpp.save:
    description: Save all active bot data immediately.
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  PLACE  (granular sub-nodes)
  # ════════════════════════════════════════════════════════════════════════════

  fpp.place:
    description: >
      Bot block placement — grants fpp.place.start, fpp.place.once, fpp.place.stop.
    default: op
    children:
      fpp.place.start: true
      fpp.place.once:  true
      fpp.place.stop:  true

  fpp.place.start:
    description: Start continuous placement (/fpp place <bot>).
    default: op

  fpp.place.once:
    description: Place a single block (/fpp place <bot> --once).
    default: op

  fpp.place.stop:
    description: Stop placing (/fpp place <bot> --stop).
    default: op

  fpp.place.wesel:
    description: Use a WorldEdit selection as the place fill area (--wesel).
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  STORAGE
  # ════════════════════════════════════════════════════════════════════════════

  fpp.storage:
    description: Register / manage bot supply containers with /fpp storage.
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  BADWORD
  # ════════════════════════════════════════════════════════════════════════════

  fpp.badword:
    description: >
      Manage badword filter and fix bot names with /fpp badword.
      Sub-commands: check, update, status.
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  SYSTEM / NETWORK
  # ════════════════════════════════════════════════════════════════════════════

  fpp.reload:
    description: Hot-reload plugin config with /fpp reload. Trusted admins only.
    default: op

  fpp.migrate:
    description: >
      /fpp migrate — backups, config migrations, DB export/import/convert.
      Trusted admins only.
    default: op

  fpp.settings:
    description: Open the interactive settings GUI with /fpp settings.
    default: op

  # ════════════════════════════════════════════════════════════════════════════
  #  BYPASS / NOTIFY
  # ════════════════════════════════════════════════════════════════════════════

  fpp.bypass.max:
    description: Bypass the global max-bots cap during /fpp spawn.
    default: op

  fpp.bypass.cooldown:
    description: Bypass the spawn cooldown delay for /fpp spawn. Grant to VIPs.
    default: op

  fpp.notify:
    description: >
      Receive update notifications on join when a newer FPP version is available.
      Automatically granted via fpp.op. Grant to non-OP staff explicitly.
    default: op
