
Fake Player Plugin (FPP)
Advanced NPC / Bot plugin for Paper, Purpur, and Folia 1.21+
Оцените первым
20.2K
47
Список изменений
v2.0.2 (Beta)
Fixed — Permissions No Longer Bypass LuckPerms
- Removed the hard-coded
player.isOp()shortcuts (Perm.hasOrOp,BotAccess.isAdmin,BotListGui.isAdmin,BotSettingGui.isOp) that granted admin access to server operators even when a permissions plugin like LuckPerms explicitly denied the relevantfpp.*node. Every permission check now goes throughhasPermission()only, so LuckPerms grants/denies are always respected, operators included. - Fixed
canUse()gates that were stricter than the granular permission nodes they were meant to allow — players granted onlyfpp.left-click.once/.stop,fpp.right-click.once/.stop,fpp.despawn.own,fpp.move.to/.coords, orfpp.inventory.ownwere previously blocked at the command dispatcher before those fine-grained nodes were ever checked. - Added the missing
fpp.inventory.ownpermission constant and wired it into the/fpp inventorycommand and the right-click-to-open-inventory listener — this node was documented inplugin.ymlbut had no effect at all.
Fixed — Folia Compatibility
- Fixed a
TickThreadcrash ("Accessing entity state off owning region's thread") when refreshing a bot's floating name-tag activity line. The nametag refresh loop now dispatches to each bot's owning region thread on Folia instead of running on the global region thread. - Fixed bots showing their vanilla over-head name doubled up with the custom name-tag display on Folia. Folia's
Scoreboard/Team API is a documented gap (global state the project hasn't implemented for regionised ticking), so
hiding the vanilla name no longer touches
Bukkit.getScoreboardManager()/Teamat all — aPlayerTeamis built directly from NMS and itsClientboundSetPlayerTeamPackets are sent straight down each viewer's connection. - Fixed a client-crashing bug in that same rework: sending a "remove from team" packet for a bot whose name had never actually been added (e.g. a second bot's very first spawn) made the vanilla client throw and disconnect ("Network Protocol Error"). The plugin now only sends a removal for a name it actually tracked as hidden.
- Fixed
onDisable()crashing on Folia withIllegalPluginAccessException("Plugin attempted to register task while disabled") when despawning bots during shutdown.FppSchedulernow detects a disabled plugin and runs the work directly instead of scheduling it — safe, since Folia halts all region ticking beforeonDisable()runs. - Fixed Head-AI being hard-disabled on Folia entirely. The restriction predated the current per-bot region-thread dispatch and was never removed after the rest of the tick loop became Folia-safe; it now runs on Folia the same as on Paper.
Changed — /fpp spawn Is Now In-Game Only
/fpp spawncan no longer be run from the server console (or dispatched as console) — it requires a real player sender, matching most other bot commands.- Removed world/coordinate targeting (
/fpp spawn <world> [x y z]) — a bot always spawns at the commanding player's own location now. Thefpp.spawn.coordspermission node is gone along with it.
Performance
- Removed reflective
Method.invoke()calls from every hot per-tick NMS path inNmsPlayerSpawner(doTick(),getHandle(), and everything built on it —setJumping,setHeadYaw,setMovementForward,setMovementStrafe,applyServerVelocity, and more) in favor of direct calls.ServerPlayer.tickPhysics()'sdoTick()invocation alone accounted for ~69% of the plugin's own profiled self-time in benchmark reports; this scales linearly with bot count, so the win grows with server size.
Файлы
fake-player-plugin-2.0.2.jar(1.67 MiB)
ОсновнойМетаданные
Канал релиза
Beta
Номер версии
2.0.2
Загрузчики
BungeeCordFoliaPaperPurpurVelocity
Версии игры
1.21–26.2
Загрузок
994
Дата публикации
10.07.2026
