
Fake Player Plugin (FPP)
Плагин Fake Player Plugin (FPP) для Paper/Purpur/Folia создаёт реалистичных фейковых игроков - с физическим телом, скином, записью в табе, боем и автоматизацией. Идеально для наполнения сервера, тестов и экономии ресурсов.
Оцените первым
27.8K
62
Список изменений
v1.6.6.12.8 (Performance Optimization)
Performance Optimizations
- Rotation broadcast cache —
lastSentVisualRotationmap caches last broadcast yaw/pitch per bot; rotation packets dropped when delta < 0.5°, eliminating redundant head-rotation broadcasts under heavy load. - Direct NMS fast-paths —
sendRotationDirect()andsendPositionSync()callPacketSendListenerdirectly on the NMSServerGamePacketListenerImplinstead of Bukkit'ssendPacket(Player)wrapper. - Tab-list batching —
broadcastTabListRemove()sends a singleClientboundPlayerInfoRemovePacketper bot instead of N individual packet sends. Applied to all despawn paths. - Frozen bot early return — Skips all per-bot work (AI, physics, handlers, fall damage, position sync) for frozen bots at the top of the tick lambda.
- Location reuse —
beforeLocation captured once per tick and reused across head-AI target distance, mining-lock check, gaze vector, fall-damage delta, and position-sync threshold — eliminates redundantbot.getLocation()calls. - Throttled subsystems — Auto-eat runs every ~4 ticks per bot. Fall damage runs every other tick (accumulated fall distance is still tracked via NMS
getFallDistance()). - Active-bot UUID snapshot —
activeBotUuidsset built once per tick for O(1)contains()in head-AI filtering and tab-list remove. - Mining-lock optimization — Reuses
beforeLocation fordistanceSquaredcheck instead of callingbot.getLocation()again.
Bugfixes
- Position sync dependency on Head AI —
onlineSnapshotand player-position arrays now always populated regardless ofdoHeadAi. Previously, when Head AI was disabled, position sync packets were never sent — bots appeared frozen on other clients. - Swim AI jumping-field reset — Removed incorrect
&& (isNavigating || isInWaterOrBubbleColumn(bot))guard that skippedtickSwimAi(). Thejumpingfield stuck attrueafter a bot exited water becausesetJumping(bot, false)was never called. - Ground detection for partial blocks —
isBotOnGround()restored toloc.clone().subtract(0, 0.08, 0).getBlock().isPassable(). ThegetBlockAt(getBlockX(), getBlockY()-1, ...)replacement misdetected slabs and stairs. isInBubbleColumn()deprecation — Replaced deprecatedPlayer.isInBubbleColumn()with block-type check.-Xlint:deprecationadded tocompileJava.
Performance Subsystem
/fpp perfcommand —check/top/report/history/sparksubcommands. Background monitor samples TPS, MSPT, CPU, GC, memory everysample-interval-ticks, keeps rollinghistory-minutes, warns on consecutive threshold breaches.- Built-in self-profiler —
BuiltinFppProfilerwith lock-freeLongAddersampling, thread-local call stack, adaptive detail reduction. Enabled viaperformance.self-profiler.enabled. - Benchmark sessions —
/fpp perf reportstarts a 10-minute method-level benchmark, reminds every 2 minutes, exports Spark-style call tree toplugins/FakePlayerPlugin/performance-report/. - Perf providers —
SparkPerfProvider(preferred, reads Spark-API snapshots) andBuiltinPerfProvider(fallback via CraftServer + JMX). - Auto-export —
PerformanceReportExporterwrites.txtreports on: benchmark finish, threshold warning (export-on-warning: true), plugin disable, and fatal exceptions. - Perf placeholders —
%fpp_perf_tps%,%fpp_perf_mspt%,%fpp_perf_cpu_process%,%fpp_perf_cpu_system%,%fpp_perf_gc_avg_time%,%fpp_perf_gc_avg_frequency%,%fpp_perf_health%. - Profiling instrumentation — Hot paths in
FakePlayerManager.tick(),NmsPlayerSpawner.tickPhysics(),PacketHelper,tickSwimAi(),tickAutoEat(),fireTickHandlers(),tickFallDamage()profiled when self-profiler is active. - Language keys — Full
perf-*set inen.ymlfor all/fpp perfoutput.
Config
- New
performance:block —enabled,spark-enabled,placeholders,sample-interval-ticks,history-minutes,warn-mspt,warn-tps,warn-consecutive-samples,warn-cooldown-minutes,auto-profiler-timeout-seconds,self-profiler.enabled,self-profiler.method-level,self-profiler.export-on-warning. - Swap player-aware settings — New
swap.player-aware.*keys for nearby-player detection radius, idle threshold, idle bonus percent, active penalty percent. ConfigMigrator— Updated for config-version 76 to handle new keys.FppMetricsintegration — FastStats metrics startup with graceful fallback when FastStats is unavailable.
API & Internal
FppApi— AddedgetOnlineCount(),removePlayerBody(UUID)(shutdown-safe),disableAllAddons().FppScheduler—runAtEntityRepeatingWithId()returnsint taskIdfor per-entity repeating tasks.CommandManager—/fpp perfregistered withfpp.perfpermission (child offpp.opinplugin.yml).NmsPlayerSpawner—tickPhysics()reverted to originaldoTickMethod.invoke()via reflection; guard restored to|| doTickMethod == null.FakePlayerEntityListener— Removed exact damage-canceller detector/tracer in favor of simplerbody.damageableswitch.FakeChannelPipeline— Handler insertion refactored for channel-active vs connection-set path.BotPersistence—saveForShutdown()saves snapshot without clearingactive-botsto prevent destructive overwrite on restart.- Shutdown lifecycle — Profiler stopped before monitor; extension class loaders closed;
disableAllAddons()called;saveForShutdown()runs before body removal.
Файлы
fake-player-plugin-1.6.6.12.8.jar(1.09 MiB)
ОсновнойМетаданные
Канал релиза
Beta
Номер версии
1.6.6.12.8
Загрузчики
BungeeCordFoliaPaperPurpurVelocity
Версии игры
1.21–26.1.2
Загрузок
527
Дата публикации
17.06.2026
