Skip to content
RitomasssCommunity
Operator's user guide

NexaSpoofer Documentation

Follow the practical path from installation to your first fake player, then enable each activity module when you are ready. Every feature guide shows the menu path, command, expected result and the first checks to make when it does not work.

Java 21Required runtime
Paper API 1.21Current plugin target
SQLite by defaultMySQL and MariaDB are also supported
Optional providersEnable only the integrations you use

Installation#

Install the plugin, start the server once, and confirm the licensed runtime loaded before configuring features.

Before starting: NexaSpoofer needs Java 21 and a valid LicenseGate key. Replace the placeholder key in plugins/NexaSpoofer/config.yml; never post your key in a screenshot or support ticket.
Check the server and Java versions.The current source targets Paper API 1.21.11 and declares api-version: 1.21. Use a compatible Paper build and Java 21.
Stop the server and upload the plugin jar.Place the release jar in plugins/. Do not replace a running jar.
Start the server and read the first startup log.Wait for NexaSpoofer's enable message. The first start creates the plugin data folder and default YAML files.
Set the license key and restart.Edit license-key in config.yml, save, then restart so startup validation reads the new key.
Install only the optional hooks you plan to use.Add your auction, trade, crate, practice or claim provider, restart, and check /nexaspoofer hooks.

Expected result#

The console shows NexaSpoofer enabled, the data folder contains generated configuration, and /nexaspoofer status responds.

If startup stops#

Read the first NexaSpoofer error, check Java 21 and the license, then inspect the YAML file named by the error. Continue with Troubleshooting.

Next: complete First Setup. Keep SQLite unless you already have a reason to use shared SQL.

First Setup#

Smart Setup saves required server choices and shows which optional features are configured.

Open as a player with admin permission: run /nexaspoofer setup or /nexaspoofer setup menu. You can also run /nexaspoofer gui, then click Smart Setup.
Set the server profile.Open Server & NPC and cycle Server Profile to the closest match for your server.
Set one explicit fake-player target.Click Player Count and enter a modest target when prompted. The bundled default is intentionally empty until an admin chooses one.
Save a safe NPC location.Stand in the lobby or test area, open NPC Spawn, and click it to save your current location and facing.
Leave unrelated provider pages alone.Use Providers, Practice, Global Commerce, Economy, AI, Claims and LuckPerms Ranks only for features you intend to configure.
Finish and read status.Return to the Smart Setup overview, click Finish Setup, then run /nexaspoofer setup status.

Setup row labels#

  • READY: configured and usable.
  • PENDING: required choice or item is missing.
  • DEGRADED: limited or optional provider unavailable.
  • NOT_REQUIRED: that optional feature is disabled or unused.
  • INVALID: saved value failed validation.

Expected result#

The server process is READY after both target and spawn are set. The overall status may say READY WITH OPTIONAL SETUP while remote AI or other optional features are unused.

Need YAML keys? Use Configuration Files after the first fake works. Next, verify startup.

Verify Everything Works#

Check core readiness first, then inspect only the providers needed for the feature you want.

Optional providers may be unavailable while the core plugin is healthy. Read each status detail before treating an optional row as a core failure.
Check overall status.Run /nexaspoofer setup status and /nexaspoofer status. Overall labels include READY, READY WITH OPTIONAL SETUP and ACTION REQUIRED.
Check selected integrations.Run /nexaspoofer hooks; read the provider capabilities and detail line.
Check enabled modules.Run /nexaspoofer modules, or open Main Menu → Modules.
Run a verification snapshot./nexaspoofer verify prints the normal report, verify full includes more detail, and verify export creates a redacted support snapshot.
Test provider actions on staging.Use /nexaspoofer verify test or the feature-specific Manual Intent Tester only when the server is safe for the actions it may perform.

Healthy core#

A valid license, working storage, at least one fake profile and a usable runtime. AI and third-party providers are optional until enabled.

If a row is pending#

Follow its detail. Server setup needs a target and spawn; Commerce needs an enabled item and channel. See Troubleshooting.

Next: verify one identity in Your First Fake Player.

Your First Fake Player#

Create one profile, spawn it at the saved location, check it, then remove it cleanly.

Start with one fake. The online target and number of generated profiles are separate values.
Open Profile Generator./nexaspoofer gui → Open Profile Generator from the main menu. Its Count button cycles 10, 25 or 50; run /nexaspoofer generate 1 when you want exactly one test profile.
Open the new profile.Main Menu → Fake Players → select the generated profile. Optional fields include Skin Owner, Rank, Personality, Language and NPC Representation.
Spawn it.Click Spawn Player or run /nexaspoofer spawn <name>.
Check and interact.Run /nexaspoofer list; try /nexaspoofer say <name> Hello everyone to test public chat.
Clean up.Click Force Quit or run /nexaspoofer quit <name>. Use remove <name> only when you intend to delete the saved profile.

Expected result#

The profile appears in Fake Players, reports online in /nexaspoofer list, and its NPC is visible at the saved route when physical presentation is available.

Next: set the daily population curve in Online Count & Schedule.

Going Live Safely#

Roll out one activity at a time so you can identify which setting or provider changes the result.

Commerce, claims, crate and practice tests can change real provider data. Use staging and test accounts before enabling them for players.
Keep the first target modest.Set an hourly target and generate enough profiles to cover it. Check /nexaspoofer status.
Enable one module.Open Main Menu → Modules, enable one behavior, then verify it with its own guide and status command.
Test provider actions first.Run the matching Manual Intent Tester scenario. Confirm provider result and cleanup before autonomous activity.
Review limits and safety.Check Economy Safety, Commerce stock limits and confirmation requirements. Keep real-economy confirmation off until staging passes.
Watch the first live cycle.Use /nexaspoofer status, hooks, the Web Control Center and /nexaspoofer audit activity 20.

Rollout order#

Profile and count → chat/AI → provider-backed activity → broader schedule. Pause if a status is unexpected.

Stop an activity#

Disable its module or pause its Intent Engine controller. Keep provider settings unchanged while you capture status and audit detail.

Next: check Provider Setup and Global Commerce.

Fake Profiles#

Profiles are saved identities with settings and stats. They form the pool from which the scheduler can bring fakes online.

Keep the generated pool larger than the highest hourly online target you plan to use.

Create and manage#

  1. Profile Generator → set Count → Create Profiles.
  2. Fake Players → select a profile.
  3. Change only the fields you need.
  4. Open feature-specific editors for Auction, Trade, Practice, Crates, Claims, Orders, Votes and Inventory.

Useful commands#

  • /nexaspoofer generate 10 creates a batch.
  • /nexaspoofer list lists online fakes.
  • /nexaspoofer spawn <name> spawns one.
  • /nexaspoofer quit <name> disconnects but keeps its profile.
  • /nexaspoofer remove <name> removes the profile.

Expected result#

Profiles persist after restart. Only spawned profiles or profiles selected by schedule count as online.

If a name is missing#

Check generator output and total profile limit, then refresh Fake Players. See Profile does not spawn.

Online Count & Schedule#

Choose the target fake population for each hour and let the schedule reconcile it.

Menu path: Main Menu → Schedule. Schedule target is not generated profile count.
Set the timezone.Choose the timezone that should control the hourly table.
Edit Hourly Targets.Left-click an hour to set its exact target; right-click resets that hour to inherit the base target.
Set the update interval.Choose how often the schedule reconciles the target.
Choose Auto Join and Schedule.Keep Auto Join off during manual tests. Enable it after spawn and target are correct; then enable the schedule you intend to use.
Check live values.Run /nexaspoofer status and compare current and target counts after an update interval.

Expected result#

Online population approaches the current hour's target. A smaller pool or blocked spawn can keep it below target.

If the count does not move#

Check timezone, hour override, both toggles, available profiles and /nexaspoofer runtime. See Target count does not change.

NPC Locations & World Routing#

Choose where physical NPCs may spawn and which worlds or regions they may enter.

Start with one fixed lobby location. Review world access before applying a route to online NPCs.
Open NPC Routing.Main Menu → NPC Routing. Current Route shows mode, spawn, allowed worlds and regions.
Set world and spawn.Cycle Spawn World or stand at the intended point and click Set Spawn Here; that saves location/facing and switches to Fixed.
Choose a mode.Fixed uses the saved point, Random radius uses world spawn plus radius, and Custom uses configured points.
Restrict access.Use Current World Access, Allow All Public Worlds, Allowed WorldGuard Regions and Custom Spawn Points.
Apply after reviewing.Click Apply to Online NPCs when the summary is correct; online NPCs respawn on the new route.

Expected result#

The Current Route summary matches the saved policy and NPCs spawn only in an allowed location.

If an NPC is blocked#

Check world rules, regions and spawn coordinates. NPC Routing is separate from Intent Engine mode.

Activity Modules#

The activity pipeline runs enabled behaviors such as chat, welcome, votes and provider-backed actions. Enable supported modules one by one.

/nexaspoofer invisible is not an enable switch. The current command returns the not-ready response. Manage supported behavior in Modules and each feature's settings.
Open Main Menu → Modules.Review module names and states, then enable only the behavior you plan to verify.
Check activity status.Run /nexaspoofer activity and /nexaspoofer modules.
Use its own test.Chat/welcome use Manual Tester Chat/AI; provider actions have their own pages.
Stop from the owning control.Disable the module or pause its Intent Engine controller, then capture status and audit output.

Expected result#

Activity and module status show the enabled pipeline; the action appears in its provider or activity history.

If a feature is absent#

Confirm the module exists and its dependency is detected by /nexaspoofer hooks. The direct invisible command is not ready.

AI Chat (NexaIntelligence)#

Connect an AI provider for contextual replies, or keep the Scripted provider when you do not want an external API.

Treat API keys as secrets. Do not include them in screenshots, logs or support exports.
Open Smart Setup → AI.Choose OpenAI, OpenRouter, Groq, Ollama, Gemini, Custom or Scripted.
Enter required provider fields.Use Set API Key, Set Base URL and Set Model only as needed by the selected provider.
Check Provider Status.Open NexaIntelligence from Main Menu or run /nexaspoofer ai status.
Send one test.Run /nexaspoofer ai test <fake> <message> as a player, or Manual Tester → Chat / AI → AI Reply.
Review mute and fallback.The AI menu has Toggle Mute and AI-to-AI Chat Test. Scripted fallback is not proof that the remote provider succeeded.

Expected result#

Provider Status identifies the chosen provider and the test produces a result. Remote AI can remain optional while scripted chat works.

Advanced AI options Optional
Provider timeouts, fallback behavior, prompts, memory and limits live in config.yml. Language and knowledge files are separate; see Configuration Files.

Player Intent Engine#

The engine chooses a feasible next activity for each fake from its profile, current session and available providers.

Menu path: Main Menu → Player Intent. Inspect and control a profile before changing advanced rules.
Check engine mode and controllers.Open the Intent Engine card or run /nexaspoofer intent status.
Inspect a fake.Open Player intent settings, select a profile, and review live intent, state, history and diagnostics.
Evaluate or pause.Click Evaluate now to queue a decision; use Pause player while investigating and Resume player when ready.
Read why it did not run.Run /nexaspoofer intent inspect <fake> and /nexaspoofer intent logs.
Force only on staging./nexaspoofer intent force <fake> <type> requests one intent but still respects feasibility and safety checks.

Execution modes#

  • ACTIVE evaluates and executes allowed intents.
  • SHADOW records decisions without executing them.
  • DISABLED turns off Intent Engine decisions.

Expected result#

An evaluation is queued, then the fake shows a current intent or an idle/rejection reason. Provider activity only runs when the relevant settings and resources allow it.

If an action is infeasible, check its provider and item in Global Commerce; do not force it repeatedly.

Manual Intent Tester#

Run one production-style action through the dedicated NexaTestBot and inspect each stage.

Use staging. Auction, Trade, Orders, Crates, Claims, Practice and Network scenarios can change real provider or server data.
Open the tester.Run /nexaspoofer manualtest as a player or click Manual Intent Tester in Main Menu. intenttest is an alias.
Click Test Setup.Read exact provider and server requirements before running a scenario.
Use NexaTestBot.The main tester screen controls its spawn/despawn and profile; it is flagged TEST_ONLY.
Choose one scenario.Open Auction, Trade, Orders, Practice, Crates, Vote, Claims, Chat/AI, Network or Survival/Events.
Read outcome and cleanup.Do not rerun a failed mutation until you know whether the previous action created data.

Stage statuses#

  • PENDING waiting; RUNNING in progress.
  • SUCCESS completed; FAILED action or verification failed.
  • BLOCKED precondition/provider/safety prevented it.
  • SKIPPED later stage was not applicable.

Entry lock#

Lock ordinary fake-player entry while keeping real players and NexaTestBot available. Use the GUI or /nexaspoofer manualtest lock|unlock.

A BLOCKED result may mean a safety check worked. Fix the displayed precondition and check cleanup before retrying.

Provider Setup#

Optional integrations use detected public APIs. Check the provider and its capabilities before enabling dependent activity.

Menu: Main Menu → Smart Setup → Providers. Console check: /nexaspoofer hooks.
Install the provider you use.Check its server-version compatibility and restart after adding it.
Select it in Smart Setup.Review Auction, Trade, Order, Crate, Practice, Warp, Tab, Claim and Economy providers.
Read the capability detail.An installed plugin may not expose every operation. Use the hook's capability/detail line.
Continue to the feature guide.Configure its shared item/profile and run the matching Manual Tester action on staging.

Expected result#

The intended provider is detected and its needed capability appears in /nexaspoofer hooks.

If missing or unavailable#

Check provider version and startup logs, restart, then recheck. See the Provider Matrix.

Global Commerce#

One shared catalog feeds Auction, Trade and Orders. Set up an item once, then enable only its needed channels.

An enabled channel can make real provider actions when Intent Engine is ACTIVE. Test stock and prices on staging.
Open Global Commerce.Click it from Main Menu, Auction or Trade menu.
Select an item.Use Select Item to browse the vanilla catalog and search material names on the sign, or Configured Items to edit a saved items.yml entry.
Set Price Mode and prices.The main Pricing Mode toggles STATIC/DYNAMIC. In item settings, choose Shared, Auction-only or Trade-only, then set Min/Base/Max where relevant.
Set channel stock.Trade/Auction have buy and sell limits; Orders has create and delivery limits. Left-click sets sell/create; right-click sets buy/delivery; shift-click resets that side.
Enable master and channel.Turn on Enabled, then left-click Auction, right-click Trade or shift-left-click Order. Both switches must be on.

Expected result#

The item shows enabled for the chosen channels. Setup readiness stops reporting a missing item when a usable provider and enabled channel exist.

If a channel is unavailable#

Check /nexaspoofer hooks, the selected provider and economy provider, then verify both item switches.

Continue to Auction, Trade or Orders. The catalog does not place a listing by itself.

Advanced item options Optional
Other controls include dynamic pricing, Buy as Sold, Fake-Fake Counts and Trade to Auction Fallback. Dynamic pricing requires reliable market data; read the reason shown when unavailable.

Auction Activity#

Configure fake listings and purchases through the selected native auction provider, shared catalog and stock limits.

Auction tests create or modify real listings. Use a test item and staging market; keep live-economy confirmation off until verified.
Select provider.Choose it in Smart Setup → Providers and confirm capabilities with /nexaspoofer hooks.
Configure a test item.In Global Commerce, set an affordable price, small Auction Stock, master Enabled and Auction channel.
Enable activity.Run /nexaspoofer auctionbots, review Economy Safety and enable Auction Activity.
Test one action.Manual Intent Tester → Auction → Create Listing or Sell → Cancel. Buy/Bid requires a matching listing.
Verify and audit.Check the provider's auction view and run /nexaspoofer audit auction 20.

Expected result#

The test verifies the provider action and resulting listing state; the configured stock limit is consumed.

If blocked#

Check provider capability, economy readiness, item channel, stock and safety confirmation. A read-only market hook cannot create listings.

Trade Activity#

Use a native Trade provider, shared item definition and profile configured to buy or sell it.

Manual Trade opens a native session with the admin player. Use staging and do not accept a live player's offer by accident.
Configure the provider.Select it in Smart Setup → Providers and confirm it in /nexaspoofer hooks.
Enable a Trade item.Global Commerce → choose item → set small Trade Stock → turn on item and Trade channel.
Enable activity and prepare a profile.Run /nexaspoofer tradebots; then Fake Players → profile → Trade Editor.
Start a manual session.Manual Intent Tester → Trade → Fake Sells Item To Me or Fake Buys Item From Me. Reply yes or evet when prompted to open the native session.
Close the session and inspect result.The test result appears after closing. Check provider state and /nexaspoofer audit trade 20.

Expected result#

The native UI opens and the tester reports completion or a blocked result after it closes. Open Empty Trade is expected to be blocked without a real offer.

If menu opens but does not complete#

Complete/cancel the provider UI, confirm offer and fake inventory/balance, then read the result. Scripted AI text alone is not a completed trade.

Order Activity#

Create, inspect, deliver or cancel provider-owned orders. The selected provider remains the source of order state.

Order tests can create or fill a real provider order. Use staging data and a dedicated test item.
Select an Orders provider.Choose it in Smart Setup → Providers and inspect supported capabilities in /nexaspoofer hooks.
Enable an Order item.Global Commerce → turn on the item master and Order channel; set create/delivery stock limits.
Configure a profile.Fake Players → choose profile → Orders Editor; check inventory needed for delivery.
Run a scenario.Manual Intent Tester → Orders → Create → Verify → Cancel, or Order Bot → Deliver.
Verify provider and cleanup.Check the provider order state and cleanup result, then /nexaspoofer audit order 20.

Expected result#

The tester re-queries provider state and verifies the lifecycle. Cancel-own-order is blocked when NexaTestBot owns no active order.

If Orders are degraded#

Check economy provider, native order capability, item channel and stock. Adapters may support only some operations; do not assume every lifecycle action exists.

Crates, Votes & Discord#

Each integration has its own profile editor and Manual Tester page.

Crate tests can consume keys and grant real rewards; vote tests dispatch native vote events. Use staging or test accounts.

Crates#

  1. Select a crate provider and confirm /nexaspoofer hooks.
  2. Fake Players → profile → Crate Editor.
  3. Manual Tester → Test Setup; review Crate Location and Crate Key.
  4. Crates → Open Random Valid Crate or Interact With Crate.

Expected: provider interaction/reward result is shown.

Votes#

  1. Install/configure the vote plugin and confirm its hook.
  2. Set fake behavior in Vote Editor.
  3. Manual Tester → Vote → Send Fake Vote or Random Service Vote.
  4. Check /nexaspoofer audit activity 20.

Expected: provider/listener receives the native event.

Discord relay#

  1. Configure DiscordSRV and its channel.
  2. Confirm it in /nexaspoofer hooks.
  3. Manual Tester → Chat / AI → Discord Relay.
  4. Check channel and test result.

Expected: relay succeeds only with provider/channel configured.

If a crate key is missing, check Test Setup, the profile Crate Editor and provider requirements. Check whether a failed attempt consumed its key before retrying.

Practice Activity#

Connect a practice provider and its modes to fake profiles. Queue display and real provider queue actions are separate.

Queue and duel tests can use a real provider and admin player. Use an empty test queue or staging.
Open Practice.Run /nexaspoofer practice to see status or /nexaspoofer practice gui to open its menu. In Smart Setup → Practice, choose the detected provider.
Enable Practice Activity.Turn it on only after checking /nexaspoofer hooks.
Map provider modes.Kit/Profile Mapping: left-click cycles a TrainingBot profile; right-click clears the mapping.
Configure one Practice Bot.Set Enabled, Match Mode and TrainingBot Profile; read Validation.
Run Queue Test or Manual Tester.Use a real eligible player for duel tests, then confirm provider state.

Expected result#

Bot Validation resolves a provider/mode to a valid TrainingBot profile. A queue count alone does not prove a real queue admission.

If there is no opponent#

Check provider mode, mapping and TrainingBot profile. See TrainingBot Setup.

TrainingBot Setup#

Map each supported Practice mode to a real TrainingBot profile, then bind a fake to that mapping.

Use Practice controls. /nexaspoofer trainingbot is deprecated; use /nexaspoofer practice.
Install TrainingBot and a Practice provider.Restart and check both in /nexaspoofer hooks.
Confirm profiles/modes exist.Smart Setup → Practice lists detected modes and TrainingBot profiles.
Map provider modes.Mode Mappings / Kit Profile Mapping: left-click cycles a valid profile, right-click clears it.
Bind the fake.Practice → Practice Bots → select fake; set Enabled, Match Mode and TrainingBot Profile. AUTO uses the mode mapping.
Validate and test.Read Validation, then run Queue Test or Manual Tester → Practice. Confirm match cleanup.

Expected result#

The mode resolves to an existing profile and Validation reads Valid; completed match state appears in the provider.

If setup stays pending#

Map every bot-enabled mode and confirm the profile still exists in TrainingBot. Rerun setup status and test.

Claims#

Configure fake claim activity through Lands or GriefPrevention, then test create/inspect/delete before enabling it.

Claim tests create real land data and may consume claim allowance. Use staging and a test world.
Select provider.Smart Setup → Claims; choose detected provider and check /nexaspoofer hooks.
Set placement rules.Review Claim System, Enabled Worlds, Creation Chance, Min/Max Claim Size, Min Spawn/Claim Distance, Search Range and Max Attempts.
Prepare the fake.Fake Players → profile → Claim Editor; use an allowed world and location.
Test on staging.Manual Tester → Claims → Create → Verify → Delete for a full lifecycle, or use individual Create/Inspect/CLAIM_DELETE actions.
Enable autonomous activity last.Do so only after provider test and cleanup succeed.

Expected result#

Tester reports provider, world, location and size, then confirms deletion. Unsafe placement is blocked.

If blocked#

Check provider readiness, allowed worlds, costs, size and distance constraints. See Lands claim blocked.

Other Integrations#

Verify the hook before enabling the behavior that depends on it.

Command: /nexaspoofer hooks reports provider, capabilities and detail.

Common setup paths#

  • LuckPerms: Smart Setup → LuckPerms Ranks; then edit a profile rank.
  • PlaceholderAPI: install and restart; use the reference placeholders below.
  • ProtocolLib / TAB: install for presentation features and check Tab hook.
  • WorldGuard: add allowed regions in NPC Routing.
  • DiscordSRV: configure its channel, then run Manual Tester Discord Relay.

If detected but unavailable#

Update the provider, read its startup log, restart and recheck. Installed does not mean selected or capable. See the Provider Matrix.

Simulation Lab#

Compare deterministic Intent Engine decisions before enabling autonomous actions.

Decision-only: it does not spawn a match or perform provider transactions.
Run a seeded simulation./nexaspoofer simulationlab run 10m 42 requests ten minutes with seed 42.
Check status.Run /nexaspoofer simulationlab status after the queued run completes.
Compare one change.Change one relevant setting and rerun with the same duration and seed; compare fingerprint and event summary.

Expected result#

A completed run includes a comparable fingerprint and event summary.

If the worker is unavailable#

Read its status and configured path; provider transactions are not a fallback for this runner.

Web Control Center#

Inspect fake profiles, conversations, intent history, activity and provider-backed systems in the embedded dashboard.

The panel may bind to a network interface. Keep authentication enabled and set a strong token before remote exposure.
Start and read the actual URL.Run /nexaspoofer panel; it prints RUNNING/OFFLINE, URL and last error.
Start at Overview.Check player counts, Intent Engine mode, AI provider and recent activity.
Inspect one player.Players → select a fake to see that player's intent, conversations and activity trace together.
Find a failed action.Use Intent Engine or Activity, All Conversations or AI. Filter the list and use Copy all for the loaded transaction records.
Check feature status.Use Commerce, Practice, Network or System; use Simulation Lab for decision-only scenarios.

Expected result#

Operations Center loads at the URL printed by the command and refreshes live snapshots.

If OFFLINE or unreachable#

Read the last error, inspect web/web-panel.yml, port and allowed origins. Use localhost first; do not disable authentication to expose it.

Remote access and API Advanced
Configure bind, public URL, token and allowed origins in web/web-panel.yml. The panel exposes /api/v1 and a live event stream. See docs/web-panel.md.

Updates & Configuration Changes#

Make one change, apply the matching reload/restart boundary, and verify the affected feature.

Back up production YAML and storage before changing settings.
Change one setting.Edit the owning file listed in Configuration Files.
Reload ordinary settings.Run /nexaspoofer reload for supported config, messages and menu changes.
Restart startup settings.Restart after replacing the jar, changing the license key or storage backend/credentials, or changing network transport settings.
Verify what changed.Run status/hooks or its feature-specific test; read the first YAML/reload error in console.

Storage & Backups#

SQLite is the default for one server. MySQL or MariaDB can be configured for shared persistence.

Stop the server before copying SQLite files or switching storage. Keep a verified backup before a production migration.
Keep the default on one server.Leave storage.type: sqlite in config.yml unless you have a migration plan.
Back up while stopped.Stop cleanly, copy the NexaSpoofer data folder and SQLite database elsewhere, then restart. Use your DB's backup process for MySQL/MariaDB.
Check storage.Run /nexaspoofer storage and /nexaspoofer status; confirm profiles load after restart.
Plan a backend switch.Set the new backend and credentials in config.yml, restart, and keep the old backup until the new DB is verified.

Expected result#

Storage reports its backend without error and profiles persist across restart.

If profiles disappear#

Stop, restore the matching database backup and compare storage type/table prefix. Do not generate a replacement pool over missing data.

Network & Proxy#

A single server does not need distributed ownership. Proxy display counts and fake ownership transfer solve different problems.

For a standalone server, keep ownership disabled and use local SQLite. Use shared transport only for backends that belong to the same network.
Assign one owner per fake.Set a unique server ID and shared transport in network.yml on participating backends.
Inspect before transfer.Run /nexaspoofer network and /nexaspoofer proxy; confirm owner and destination.
Test one identity.Manual Intent Tester → Network requires two live backends and a working proxy transfer path.
Verify destination and return.Confirm one backend owns the fake and the return path restores it cleanly.

Expected result#

Both backends show the same network identity with only one active owner per fake.

If sync is unavailable#

Check server IDs, Redis transport and startup order. Do not enable transfer on a standalone server to fix display count.

Performance#

Increase activity only after measuring the server with its real player load and provider set.

Visible NPCs and third-party providers add cost. Increase one limit at a time.
Record a baseline.Note server TPS/MSPT and /nexaspoofer status.
Start with small targets.Keep the online target near the scale you intend to serve; do not generate a huge pool just because the generator allows it.
Add one provider module.Observe its action rate and audit output before increasing schedule frequency or caps.
Pause the source you identify.Use per-player trace and runtime diagnostics before changing worker limits.

Expected result#

You can identify the workload change and metrics return toward baseline when that module is paused.

If RAM or tick time rises#

Pause the newest module, reduce target and inspect logs before raising memory. See RAM or tick time increases.

Setup Recipes#

Short paths for common goals. Leave unrelated modules disabled.

Choose a recipe, finish its linked guide, and verify it before adding another feature.

Survival lobby#

  1. Save a lobby spawn.
  2. Create a small profile pool.
  3. Set hourly targets.
  4. Add chat after its AI test.

Economy activity#

  1. Verify economy and Auction providers.
  2. Configure one test item.
  3. Pass Auction create/cancel on staging.
  4. Review limits before live use.

Trade and Orders#

  1. Select native providers.
  2. Enable only required Commerce channels.
  3. Test Trade with admin and Orders with a test order.
  4. Inspect provider state and cleanup.

Practice showcase#

  1. Select Practice provider.
  2. Map mode to TrainingBot profile.
  3. Validate one fake.
  4. Run match test and confirm cleanup.

Troubleshooting by Symptom#

Start with the symptom. Run the command shown, follow the menu path, then repeat the verification.

Before retrying a provider test, inspect its result and cleanup stage. A failed screen does not prove no provider data was created.
Plugin does not enable or license is rejected Startup

Check: Java 21, first console error and /nexaspoofer license.

Fix: replace the placeholder key in config.yml, correct named YAML errors, then restart. Never share the key.

Verify: plugin completes enable and /nexaspoofer status responds. See Installation and License.

Setup says ACTION REQUIRED or server row is PENDING Setup

Check: /nexaspoofer setup status and Smart Setup → Server & NPC.

Fix: set Player Count and save NPC Spawn in the intended world. Optional integrations can remain NOT_REQUIRED.

Verify: server setup row reads READY. See First Setup.

Fake player invisible, missing from tab or refuses to spawn Runtime

Check: /nexaspoofer list, /nexaspoofer runtime, route and hooks.

Fix: confirm profile exists, world/location is allowed and NPC Representation is correct. Tab presentation is separate; check TAB/ProtocolLib hook.

Verify: profile is online and NPC appears in allowed world. /nexaspoofer invisible is not ready. See First Fake Player and NPC Locations.

Target count does not change Schedule

Check: current hour/timezone, override, Auto Join and saved profile count.

Fix: set the target with left-click or reset inherited hour with right-click. Enable Auto Join after spawn is ready and generate enough profiles.

Verify: compare current/target in /nexaspoofer status after an update interval. See Schedule.

AI scripted fallback or no response AI

Check: /nexaspoofer ai status, AI provider, key, Base URL, Model and mute state.

Fix: correct required fields and run one AI test or Manual Tester AI Reply.

Verify: provider status identifies the selected route; scripted reply is not proof remote AI worked. See AI Chat.

Intent timeout or blocked action Intent

Check: /nexaspoofer intent status, intent inspect <fake> and intent logs.

Fix: follow the displayed reason, check provider/item and use ACTIVE if execution is expected. Repeated force requests do not bypass feasibility.

Verify: evaluate once and read the next trace. See Intent Engine and Simulation Lab.

Auction, Trade or Orders action is blocked Commerce

Check: hooks, setup status, provider capabilities, item master/channel and remaining stock.

Fix: select a capable provider, enable exact channel and review Economy Safety on staging.

Verify: rerun matching scenario and confirm provider state. See Global Commerce and feature guides.

Trade menu opens but test never completes Trade

Check: native session is still open and the offer contains a configured item.

Fix: finish/cancel the UI, confirm fake inventory/balance, then read the result after close. Empty offer should be blocked.

Verify: provider transaction and /nexaspoofer audit trade 20. See Trade.

Crate key missing or reward test fails Crates

Check: Manual Tester Test Setup → Crate Location/Key, profile Crate Editor and provider hook.

Fix: use a valid test crate/key; check whether prior attempt consumed it.

Verify: provider log and test result. See Crates.

Practice queue has no TrainingBot opponent Practice

Check: hooks, Practice mode mapping, TrainingBot profile list and bot Validation.

Fix: map each bot-enabled mode to an existing profile; enable Practice Activity and the selected bot.

Verify: Queue Test or Manual Tester shows a native provider session. See Practice and TrainingBot.

Lands claim is blocked Claims

Check: claim hook, selected provider, enabled world and test stage detail.

Fix: move the test anchor to an allowed point; review distance, size and provider costs.

Verify: Create → Inspect → Delete on staging. See Claims.

RAM usage or tick time rises Performance

Check: server MSPT/TPS, /nexaspoofer status, latest module and Web Control Center System.

Fix: pause newest activity, reduce online target, compare metrics; do not raise limits before finding the source.

Verify: metrics return toward baseline. See Performance.

Web Control Center is OFFLINE or unreachable Panel

Check: /nexaspoofer panel URL and last error.

Fix: inspect web/web-panel.yml, port, token and allowed origins; start with localhost.

Verify: command reports RUNNING and printed URL loads. See Web Control Center.

Still stuck? Follow the Support Checklist and include exact command, expected result and actual result.

Command Reference#

Use the GUI for routine setup and these commands for quick checks, focused actions and support reports.

Aliases: /spoof and /fakeplayer also point to /nexaspoofer.

Start and inspect#

  • /nexaspoofer opens GUI for a player; console sees status.
  • gui, setup, setup status.
  • status, hooks, modules, license, storage.
  • verify [full|test|export] for checks/report.

Profiles and runtime#

  • generate <count>, list, spawn <name>.
  • quit <name|all> disconnects; remove <name> deletes.
  • say <name> <message> tests chat.
  • runtime [test|cleanup] checks runtime.

AI and Intent#

  • ai [status|mute|unmute]; ai test <fake> <message> is player-only.
  • intent status|list|logs.
  • intent inspect <fake>.
  • intent pause|resume|cancel|evaluate <fake>.
  • intent force <fake> <type>.

Feature tests and operations#

  • manualtest or intenttest opens tester for a player.
  • auctionbots and tradebots open activity menus; practice gui opens Practice, while practice shows status.
  • simulationlab run <duration> <seed>.
  • panel starts dashboard and prints URL.
  • audit [type] [limit], reload.
  • trainingbot is deprecated.

Add the root prefix to subcommands: /nexaspoofer intent status. Console can run status and diagnostics; menu commands require a player.

Permissions#

Permission names and defaults come from plugin.yml. Admin nodes default to op; grant only what each staff role needs.

The parent nexaspoofer.admin inherits only child nodes explicitly listed in plugin.yml; it is not a wildcard.

Example staff groups#

/lp group helper permission set nexaspoofer.admin.status true
/lp group helper permission set nexaspoofer.admin.hooks true
/lp group helper permission set nexaspoofer.admin.verify true
/lp group tester permission set nexaspoofer.admin.manualtest true
/lp group tester permission set nexaspoofer.admin.audit true

Common nodes#

  • nexaspoofer.admin.gui, .setup, .status, .hooks, .modules.
  • .generate, .spawn, .list, .quit, .remove.
  • .ai, .intent, .manualtest, .simulationlab.
  • .auction, .trade, .commerce, .practice, .crate.
  • .panel, .network, .storage, .audit.
  • nexaspoofer.bypass.hidden and .bypass.cooldown are for trusted admins.

Check exact feature nodes in src/main/resources/plugin.yml. The root admin node defaults to op.

Configuration & File Ownership#

Each bundled YAML file owns one settings category. These are the current resources shipped by NexaSpoofer; old one-file examples from earlier releases may no longer be active.

The config service merges missing bundled defaults while retaining existing administrator values. Use the setup controls for required first-run choices, then edit the file that owns each setting.
Core and provider files current YAML resources
FileOwnsNotes
config.ymlLicense, setup state, target, module toggles, player counts, schedules, AI/chat, activity, storage, safety and runtime policy.Core settings. Finish Smart Setup before expecting profile provisioning.
hooks.ymlOptional plugin integrations, provider priorities/selections, adapter capabilities and TrainingBot provider/mode mappings.Provider choice and integration settings live here.
items.ymlCommerce item definitions, price modes, market weighting, dynamic-pricing thresholds and per-item stock limits.Owns shared auction, trade and order item/stock data.
intent-engine.ymlEngine mode, candidate feasibility and scoring, evaluation pacing, lifecycle, opportunities, resource coordination and chains.Bundled mode is ACTIVE; SHADOW records decisions without provider mutations.
personalities.ymlPersonality presets and intent scoring modifiers.Controls behavior style without changing provider safety checks.
network.ymlProxy synchronization, server identity, Redis transport, fake-player leases and distribution.Keep network synchronization disabled until the target proxy/Redis setup is configured.
web/web-panel.ymlEmbedded control-center binding, authentication, origins, history retention, event buffers and view flags.Bind/port changes require a restart.
skins.ymlBundled skin/profile selection and skin source settings.External skin lookup is cached and performed outside the main-thread gameplay path.
database/memory.ymlPersistent fake-player memory behavior and retention settings.SQL data is stored by the selected database backend.
Messages, menus and AI content resource layout
  • languages/en/messages.yml and languages/tr/messages.yml own player-facing messages; language knowledge files supply AI context.
  • languages/<language>/scripted.yml owns scripted chat pools and their hook requirements.
  • menus/**/*.yml owns GUI titles, slots, icons, lore, visibility rules and configured menu actions.
  • plugin.yml declares the command, alias and permission surface bundled in the jar.

AI provider, model, API-key environment-variable and response settings are part of config.yml; there is no separate root ai.yml in the current resource set.

Example current intent settings intent-engine.yml
enabled: true
mode: ACTIVE

evaluation:
  idle-min-delay: 3s
  idle-max-delay: 8s

lifecycle:
  enabled: true
  min-wander-before-first-intent: 45s
  min-wander-between-intents: 30s

selection:
  maximum-candidates: 6

Use /nexaspoofer intent mode <DISABLED|SHADOW|ACTIVE> to change the live engine mode, or edit this file for the persisted setting.

Migration and reload behavior compatibility

Legacy trainingbot.yml and older standalone practice-mapping files are migration inputs. Current provider and TrainingBot mappings are owned by hooks.yml; randomized practice pool membership is stored in fake-profile metadata. The menu file menus/core/safety.yml is a GUI layout, not a separate safety configuration file.

Config and menu reloads merge missing defaults and keep existing values. Restart after changing the jar, license, storage driver/credentials or web-panel bind/port.

Messages & Language#

Player-facing and admin-facing messages live in language packs. Bundled packs: en and tr. The plugin loads languages/<lang>/messages.yml and languages/<lang>/knowledge.yml.

Message reload follows /nexaspoofer reload. Restart after jar, storage or license changes.

How to edit messages#

Edit the generated language file in the plugin folder, keep placeholders intact, then run /nexaspoofer reload for normal message updates. Switch the active pack with language: "tr" in config.yml.

Formatting#

<gray>[<gold>NexaSpoofer</gold>]</gray> prefix
<red>Error message</red>
<green>Success message</green>
{player} {target} {message} {reason} {key} {detail}
messages.yml short excerpt, not full file
Short YAML preview only. This block shows selected lines from the bundled languages/en/messages.yml. The generated file contains many more message keys.
prefix: "<gray>[<gold>NexaSpoofer</gold>]</gray> "
missing-message: "<red>Missing message: <key></red>"

no-permission: "<red>You do not have permission.</red>"
player-only: "<red>Only players can use this command.</red>"
unknown-command: "<red>Unknown subcommand. Use <yellow>/nexaspoofer help</yellow>.</red>"
feature-not-ready: "<yellow>That feature is planned but not implemented in this part yet.</yellow>"
command-error: "<red>That command could not be completed. Check console for details.</red>"
Placeholder safety

Keep placeholders such as <key>, <detail>, {player} and {target} intact. A deleted placeholder renders as raw text instead of crashing.

Theme colors

Global theme palette lives in config.yml under theme (primary, secondary, success, warning, error hex colors).

Open the dashboard, then choose the named panel for your task. Player menus open in-game.

Run /nexaspoofer or /nexaspoofer gui as a player. Console can use status commands.
  • Fake Players — browse and edit profiles.
  • Smart Setup — server, provider and module requirements.
  • Modules — toggle modules.
  • NPC Routing — physical spawn policy.
  • Global Commerce — shared item catalog.
  • Player Intent — inspect decisions.
  • Profile Generator, Schedule, Economy Safety.
  • NexaIntelligence, Manual Intent Tester, System Status.

Profile Editor#

Main Menu → Fake Players → select a profile. Editors cover identity, rank, personality, NPC presentation, Inventory, Practice, Auction, Trade, Economy, Vote, Crate, Claim and Orders.

Smart Setup pages#

Server & NPC sets profile, count and spawn. Providers selects integrations. Other pages configure Commerce, Practice, Economy, AI, Claims and LuckPerms Ranks.

Layouts are under menus/. Back up before editing and run /nexaspoofer reload for supported changes.

PlaceholderAPI#

The persistent nexaspoofer expansion reads service snapshots and does not run database or network work for each placeholder request.

PlaceholderAPI is optional. Install it and restart the server; NexaSpoofer registers its own persistent expansion when PlaceholderAPI is available.
Counts, runtime and status placeholder families
%nexaspoofer_online%                 # displayed count; alias: total
%nexaspoofer_fake%                   # active fake-player count
%nexaspoofer_real%                   # real-player count
%nexaspoofer_target%                 # current fluctuation target
%nexaspoofer_max%                    # displayed maximum
%nexaspoofer_tab%                    # active profiles used by tab state
%nexaspoofer_server_list%            # displayed server-list count
%nexaspoofer_profile_count%          # stored profile total
%nexaspoofer_ping%                   # viewed player/fake ping
%nexaspoofer_ai_status%
%nexaspoofer_license%
%nexaspoofer_storage%
%nexaspoofer_runtime_mode%
%nexaspoofer_runtime_provider%
%nexaspoofer_physical_runtime_status%
%nexaspoofer_physical_runtime_available%
%nexaspoofer_physical_active%
Simulation, practice and leaderboards examples
%nexaspoofer_simulation_mode%
%nexaspoofer_simulation_status%
%nexaspoofer_nms_npc_world_policy%
%nexaspoofer_anchor_world%
%nexaspoofer_practice_status%
%nexaspoofer_practice_queue%
%nexaspoofer_practice_queue_nodebuff%
%nexaspoofer_practice_queue_nodebuff_ranked%
%nexaspoofer_random_practice_status%
%nexaspoofer_random_practice_queue%
%nexaspoofer_random_practice_matches%
%nexaspoofer_trainingbot_status%
%nexaspoofer_leaderboard_balance_1_name%
%nexaspoofer_leaderboard_balance_1_score%

Per-kit practice placeholders also support _ranked, _unranked, _min and _max. Leaderboard forms are %nexaspoofer_leaderboard_<metric>_<position>_<name|score|position>%.

Economy and network examples
%nexaspoofer_economy_status%
%nexaspoofer_economy_vault_status%
%nexaspoofer_economy_total_balance%
%nexaspoofer_economy_average_balance%
%nexaspoofer_economy_top_player%
%nexaspoofer_economy_top_balance%
%nexaspoofer_proxy_status%
%nexaspoofer_proxy_local_fake_online%
%nexaspoofer_proxy_network_fake_online%
%nexaspoofer_proxy_network_displayed_online%

Proxy/Redis exposes additional local and network aggregate values. Unknown identifiers return no value. Use the current PlaceholderAPI section in the plugin's feature reference when you need the complete family list.

Integrations#

Each integration explains purpose, required/optional status, setup steps and troubleshooting. Hook detection runs through HookService; a missing or failing hook logs SEVERE/WARNING but never disables the plugin.

Third-party integrations are declared as softdepend where applicable. Native API bridges are promoted only after target server QA. Check the live registry with /nexaspoofer hooks.
NexaChat Optional native hook

Purpose: Routes fake chat actors through NexaChat's formatting pipeline via its public fake-actor API.

  1. Install NexaChat and restart the server.
  2. Configure integrations.nexachat.enabled: true in hooks.yml.
  3. Run /nexaspoofer hooks and confirm the adapter reports ready.
  4. Test with /nexaspoofer say <name> hello.

If the hook reports DISABLED_BY_CONFIG, check the toggle in hooks.yml. API compatibility is reported by the hook; NexaSpoofer does not reflect into NexaChat internals.

ProtocolLib Optional tablist adapter

Purpose: Sends fake tablist entries with skin, ping and display-name metadata, with batched packet updates and clean removal on reload/disable. Real players receive replayed entries on join.

Troubleshooting: If tab entries do not appear, confirm ProtocolLib supports your server build, check modules.tablist and tablist.enabled, then run /nexaspoofer hooks for the adapter state.

  1. Install a ProtocolLib build matching the server jar.
  2. Restart the server.
  3. Spawn one fake profile and check the tab list.
  4. Toggle tablist.ping.min/max for believable ping values.
PlaceholderAPI Optional expansion hook

Purpose: Registers the %nexaspoofer_*% expansion for scoreboards, TAB, websites and external displays.

  1. Install PlaceholderAPI.
  2. Restart the server.
  3. Run /nexaspoofer hooks and confirm placeholder registration.
  4. Use values from the Placeholders section.
NexaAuctions / NexaTrade / Orders Native ecosystem hooks

Purpose: NexaAuctions provides market scan, buy, bid and cancel through the native AuctionApiProvider. NexaTrade completes fake-seller trades through NexaTradeApi.completeFakeSellerTrade only. Orders use the provider-owned Order service: NOrder exposes native create, own-cancel and query, while FoOrders and BlazeZ Order fail closed when the required safe public lifecycle artifact/capability is unavailable.

Troubleshooting: Confirm the installed provider build exposes the documented API; /nexaspoofer hooks shows per-provider capability detail.

AxAuctions / zAuctionHouse Native read-only market scan

Purpose: Read-only native market scan hooks for item and price context.

Safety: These providers never mutate the market; auction listing/buying/bidding remains disabled unless a verified native mutation provider is selected.

CrazyAuctions / DeluxeAuctions Detected auction surfaces

Purpose: Detected through plugin.isEnabled() and included in auction-activity.hook-priority. Native surfaces appear when the providers expose verified APIs.

Safety: Detected-only plugins provide status; they do not mutate markets on their own.

EventPractice / StrikePractice / PhoenixDuels Practice hooks

Purpose: Safe practice queue counts, real queue state reading, kit awareness and bot-match activity surfaces. StrikePractice gets a native queue join, kit and queue state reader plus command adapter.

Safety: NexaSpoofer avoids blind private queue mutation. Placeholder-only and command-safe paths are preferred unless a target API is verified in your environment.

Troubleshooting: If queue counts look wrong, check per-kit min/max values, queue type and whether the target hook runs in placeholder, command or native mode.

TrainingBot Optional native bridge

Purpose: Spawns mapped TrainingBot-backed opponents from fake profiles, applies rating tiers, saves match results and cleans up after testing or match end.

Troubleshooting: Confirm TrainingBot is installed, the selected provider/mode mapping is configured in hooks.yml, and the referenced global profile exists in TrainingBot. Combat behavior and movement belong inside that plugin's own profile config.

ExcellentCrates / CrazyCrates Native crate hooks

Purpose: Fake crate opening activity through native openCrate APIs, feeding crate chat categories and invisible crate traces.

Setup:

  1. Install ExcellentCrates or CrazyCrates and create at least one crate inside the crate plugin (ExcellentCrates: plugins/ExcellentCrates/crates/, CrazyCrates: plugins/CrazyCrates/crates/).
  2. Restart the server. NexaSpoofer detects the plugin automatically; confirm with /nexaspoofer hooks.
  3. Native crate opens need a physical fake player online (runtime.mode: "PHYSICAL"). Spawn one with /nexaspoofer spawn <name> before testing.
  4. Add the optional crate-hooks section to config.yml when you want to change defaults:
crate-hooks:
  enabled: true
  priority:
    - "ExcellentCrates"
    - "CrazyCrates"
  ExcellentCrates:
    enabled: true
    native-api: true
    ignore-restrictions: true   # bypass key/permission requirements for fake players
    ignore-animation: false     # skip the opening animation for faster fake opens
  CrazyCrates:
    enabled: true
    native-api: true
    key-type: "free_key"
    event-type: "event_crate_force_opened"
  crate-id-aliases:             # map display names to real crate ids
    "Vote Crate": "vote"
  command-fallback:             # only used when no native provider is available
    enabled: true
    hooks:
      generic:
        enabled: false
        command: "crate givekey %player% vote 1"
        run-as: "CONSOLE"       # CONSOLE or PLAYER
        require-target-plugin: true
        plugin: "ExcellentCrates"

Usage: When the activity scheduler runs a crate action, NexaSpoofer reads the provider's crate list, picks the profile's preferred crate (set it in the profile editor's Crate GUI by cycling available crates) or a random one, opens it through the native API and chats a line from activity.actions.crate.messages. Test with the Crate editor Test Crate Open button or /nexaspoofer event crate.

Command fallback placeholders: %player%, %player_uuid%, %crate%, %crate_id%, %reward%. Dangerous commands (op, deop, stop, restart, reload) are always blocked.

Troubleshooting: If the GUI shows No Crates Available, no crates are defined in the crate plugin. If a test open fails silently, the fake player is not spawned as a physical entity.

Full guide: docs/integrations-setup.md.

NuVotifier / VotifierPlus / VotingPlugin Vote provider adapters

Purpose: Routes fake vote activity through the selected vote provider's supported native API so the reward plugin receives its normal vote path.

Configuration: Provider selection, service-name allowlist and adapter toggles live under providers.vote in hooks.yml. Command fallback is provider-specific, empty and disabled by default; do not use the retired vote-hooks or fake-votes config blocks.

Usage: Enable vote activity for the profile in the Vote editor, confirm the selected adapter with /nexaspoofer hooks, then test through the Vote editor or /nexaspoofer event vote. The native vote path updates the profile counter and emits NexaVirtualVoteEvent.

Troubleshooting: If the provider is unavailable, check its installation, hook selection and API capability. If the event arrives but rewards do not, verify the reward plugin accepts the service identity and named/offline vote source configured by the server.

MythicMobs / LuckPerms / AuthMe Native adapters

MythicMobs: reads active boss data only - no synthetic boss data is generated. Configure mythicmobs-hook.max-active-bosses and boss-identifiers when bosses do not use boss bars.

LuckPerms: resolves prefix/suffix for fake ranks and tab display names.

AuthMe: physical runtime auto-login bridge; keep disabled unless physical mode is actually used.

DiscordSRV Discord relay hook

Purpose: Relays configured combat or practice feed lines when the detected DiscordSRV adapter has a usable API or command path. The integration is disabled by default.

All integration settings belong in hooks.yml, under integrations.discordsrv. Current defaults leave the toggle off, relay command blank and feed flags disabled.

integrations:
  discordsrv:
    enabled: false
    relay-command: ""
    relay-combat-feed: false
    relay-practice-feed: false

Enable only the feed you use, set the exact server-tested console relay command when needed, then confirm capability state with /nexaspoofer hooks. Keep Discord credentials in DiscordSRV's own configuration. Feed relay follows supported activity; /nexaspoofer invisible is not implemented.

InteractiveChat / LPC / TAB / Vault / WorldGuard Soft hooks

Purpose: Chat-format compatibility, tablist compatibility, economy writes, region queries for movement/spawn filters.

Missing hooks are shown in status output and should never stop startup.

packetevents / SuperiorSkyblock2 / BentoBox Detect & scaffold hooks

Purpose: Optional packet interception and island-activity placeholders. These surfaces report status and participate where configured; none is required to boot.

Compatibility#

Version matrix and the honest status of every integration surface.

Only market an integration as "fully supported" after you tested it in your own setup.
RequirementMinimumNotes
Java21Hard requirement. Plugin will not enable on older JVMs.
ServerPaper/Spigot 1.21api-version: 1.21, POSTWORLD load. Full Folia support is not claimed for entity-heavy modules.
NexaSpoofer v1.0.01.21.x + Java 21LicenseGate startup validation; ProGuard-obfuscated release.
PluginsVariesProtocolLib must match your server version; Vault needs an economy provider.
Integration status matrix full list
IntegrationStatusBehavior
NexaChatNative APIZero-reflection fake actor bridge for formatted fake chat.
NexaAuctionsNative APIMarket scan, buy, bid and cancel through the local API.
NexaTradeNative APIcompleteFakeSellerTrade for fake-seller trades. No virtual fallback.
EventPracticeNative APISafe capability detection; no blind private queue mutation.
StrikePracticeNative APIQueue join, kit and real queue state reader + command adapter.
TrainingBotNative APIKit mapping, rating tiers, spawn tests and cleanup.
zAuctionHouse / AxAuctionsNative readRead-only market scan hooks; no mutation or command fallback.
TABNative APITablist layout integration with event handlers.
MythicMobsNative APIActive boss data only; no synthetic boss data.
LuckPermsNative APIPrefix/suffix resolution for fake ranks and tab names.
TokenManagerNative APIToken economy operations through the static API.
ExcellentCrates / CrazyCratesNative APIShared crate hook service for fake crate openings.
PlayerPointsNative (single reflective call)PlayerPointsAPI via getAPI(), direct calls after.
PlaceholderAPIOptional expansionRegisters the %nexaspoofer_*% expansion.
ProtocolLibOptional adapterFake tablist entries with skins and ping.
AuthMeReflection adapterPhysical runtime auto-login.
NuVotifier / VotifierPlus / VotingPluginReflection dispatchReal VotifierEvent vote dispatch; command fallback when absent.
CoinsEngine / ExcellentEconomyReflection adapterCached MethodHandle against the obfuscated economy plugin.
VaultDetectEconomy service detection and write-through bridge status.
DiscordSRV / InteractiveChat / LPCDetectRelay, chat format compatibility and prefix-format observers.
SuperiorSkyblock2 / BentoBoxDetectIsland activity placeholder surfaces.
WorldGuardDetectRegion query for movement/spawn filtering.
packeteventsDetect / scaffoldOptional packet interception.
Physical Runtime / NMS Practice NPCInternalNMS-based runtime; Minecraft reflection is required and scoped.

provider-specific native APIs, capability adapters and detection-only hooks. Hook-related exceptions are logged but never disable the plugin.

License#

Premium builds validate a LicenseGate key at startup, before expensive runtime services start. The enable banner shows the license status.

Keep the key private. Anyone with the key can start a premium copy of your purchase.

How to configure#

  1. Copy the key from your buyer/download page.
  2. Paste it into license-key in config.yml, keeping the quotes: license-key: "YOUR-KEY".
  3. Restart the server and read the enable banner for the license line.
  4. Placeholder keys such as LICENSE, empty keys and obvious invalid keys are rejected - invalid startup disables the plugin safely.

License problems#

  • The key was pasted into config.yml, not another generated YAML file.
  • The pasted key wrapped onto multiple lines or has trailing spaces.
  • The server files were copied to a new machine without the same key.
  • The key is lost - open a support ticket with proof of purchase. Keys are not recoverable from a broken server.
config.yml license key excerpt
license-key: "YOUR-KEY-HERE"
debug: false
color-format: "legacy"
A jar or license change requires a restart. /nexaspoofer reload does not re-validate licensing runtime state.

Security & Safety#

Protect the license key and audit credentials, and keep economy risk under explicit control.

Never expose Redis or MySQL to the public internet without authentication and firewalling.

Credentials#

  • Keep license-key out of shared configs and screenshots.
  • Use a dedicated MySQL user with privileges only on the NexaSpoofer database.
  • Bind Redis to internal interfaces; set a password in the URI.
  • Keep API keys out of version control - prefer api-key-env environment loading.

Permission hygiene#

  • nexaspoofer.admin.emergency and nexaspoofer.admin.spawn.physical should be owner-only.
  • Bypass nodes (nexaspoofer.bypass.hidden, nexaspoofer.bypass.cooldown) go to trusted staff only.
  • Use security.op-only-admin or admin-uuid-whitelist for extra restriction.
  • Review audit logs periodically for blocked risky actions.
Economy safety posture config.yml
safety:
  require-admin-confirmation-for-real-economy: true
  real-economy-confirmed: false
  max-money-injected-per-day: 500000
  max-real-player-purchases-per-day: 25
  audit-log:
    enabled: true

These settings are in config.yml. Real-economy actions remain confirmation-gated, caps bound exposure and allowed or blocked actions are recorded in the audit log. Auction/order provider operations still use their verified native APIs.

Developer API#

NexaSpoofer registers NexaSpooferApi through Bukkit Services and exposes a focused IntentEngineApi surface for addon developers.

Handle a missing service and call Bukkit-visible operations on the server thread. Immutable observation and telemetry snapshots are available for read-oriented integrations.

Access and common operations#

Optional<NexaSpooferApi> api = NexaSpooferApiProvider.get();

api.ifPresent(service -> {
    long fakeOnline = service.fakeOnline();
    SpoofCountSnapshot counts = service.countSnapshot();
    service.say("ExampleFake", "hello");
});

Core profile, count, runtime, hook, storage and AI status methods are available on the service. Newer API methods also expose intent state, setup readiness, resolved settings, player memory, simulation runs, network snapshots, immutable player observations and telemetry.

Addon extension points#

  • Register and unregister a stable-ID NexaSpooferAddon.
  • Register focused activity actions and verified auction, practice or TrainingBot hooks.
  • Use IntentEngineApi for current intent state, explainable snapshots, provider/planner registration and opportunities.
  • Read immutable observation/telemetry snapshots instead of reaching into internal managers.
  • Public API and event contracts are kept by the release obfuscation profile; internal service classes are not the stable contract.
Public event behavior lifecycle and module contracts

Lifecycle events cover fake profile creation, join, quit, removal and the physical runtime path. NexaActivityPreEvent provides the cancellable gate before supported activity execution, while NexaActivityPostEvent reports the result. AI response and count-change events are emitted by their corresponding service paths.

The NexaVirtual* event classes are addon contracts. They are not all emitted automatically: only an implemented module path that explicitly calls an event emits it. The native virtual vote event and delivered fake-chat paths are examples of active event sources. Check the event's source path before relying on it as a complete record of provider activity.

Threading and compatibility developer notes
  • Call methods that access Bukkit players, entities, worlds or inventories on the server thread.
  • AI HTTP and storage work run asynchronously inside the plugin; callbacks return through the server scheduler.
  • Stored history, memory and web observation surfaces use immutable snapshots.
  • Public contracts live under net.ritomasss.nexaSpoofer.api; avoid internal package dependencies.

FAQ#

Short answers for server owners.

Use the linked guide for full steps.

Can I use it without a remote AI key?#

Yes. The Scripted provider works without a remote API key.

Does installing Auction or Trade enable it?#

No. Select a provider, configure a Global Commerce item/channel and test it first.

Does a fake count mean an NPC spawned?#

No. Target, profile pool, physical runtime and tab presentation are separate.

Can Practice use fake queue counts without a provider?#

Queue presentation and provider-backed actions are separate. Native actions need a usable provider.

Does the plugin declare Folia support?#

Yes. Its descriptor marks Folia support. Check optional providers on your exact server build separately.

Can I use SQLite on a proxy network?#

SQLite is the default for one server. A multi-backend network needs planned shared storage and ownership.

Changelog#

Product release notes grouped by version. Public notes are written for buyers and server owners, not as raw commit logs.

v1.0.0#

Initial premium release line for NexaSpoofer.

Added
  • Core fake profile generation, storage, server-list spoofing and ProtocolLib tablist adapter.
  • NexaIntelligence scripted fallback and HTTP providers (Groq, OpenAI, OpenRouter, Gemini, custom).
  • Shared activity pipeline for supported chat, welcome, vote, crate, server-switch, auction, trade, order and provider-backed activity paths; the standalone invisible command remains reserved.
  • Activity pipeline, auction/economy safety, practice hooks and TrainingBot bridge.
  • Admin GUI panels, PlaceholderAPI values, public API events, split resource files, language packs (en/tr) and docs/showcase.
  • Guided first-run setup, provider readiness, Player Intent Engine modes, deterministic Simulation Lab and embedded Player Operations Control Center.
  • Global Commerce order intents with provider-owned state, stock reservations, stale-state checks and fail-closed unsupported operations.
  • Persistent conversation/intent history, long-term fake-player memory views and authenticated operator controls.
Changed
  • Prepared modular YAML resources and menu files for premium plugin configuration.
  • Established a soft-hook posture with capability reporting and fail-closed behavior for unsupported providers.
Fixed
  • Hardened hook loading so missing or failing optional plugins never disable the plugin.
  • Added clean disable/runtime cleanup: API unregister, task stop, tab entry removal, storage flush.

Support Checklist#

A reproducible report helps identify the provider or configuration step that failed.

Try the symptom guide and /nexaspoofer verify export first if available.
Write the exact workflow.Include menu path and commands.
Capture expected and actual results.Include Manual Tester stage/result or provider transaction state.
Attach diagnostics.Include status, hooks, modules and matching audit output.
Redact secrets.Remove license/API keys, DB/Redis credentials and panel tokens.
Plugin version:
Server jar and build:
Java version:
Storage backend:
Setup status:
Feature and menu path:
Provider and hook status:
Command or Manual Tester scenario:
Expected result:
Actual result and stage:
Audit output:
First relevant console error:
Changed YAML file names (values redacted):

Community support: discord.gg/fANhQcyA7X. Screenshots help with GUI issues; provider/config failures need exact text output too.