1.0
Compatibility
Changes
PackettDisguise
Standalone player-disguise plugin. Changes a player's shown name and skin
(tab list, nameplate, chat, entity) by rewriting outgoing PLAYER_INFO packets with ProtocolLib and
applying the disguise name to the player's own GameProfile so the above-head nameplate updates too. The
UUID is kept, so the entity stays mapped and the disguise survives tab refreshes.
Commands
| Command | Permission | What it does |
|---|---|---|
/disguise |
packett.incognito |
Disguise under a random unused name (rolled fresh each time). |
/disguise <name> [default|vip] |
packett.incognito + packett.disguise.name |
Disguise under a chosen name. |
/undisguise |
packett.incognito |
Remove the disguise. |
If a player has packett.incognito but not packett.disguise.name, any name they type is ignored and a
random one is rolled instead.
Random names
Auto-generated names are two words + two digits, e.g. FilthyPenelope92, drawn from the two word pools
in config.yml. Every generated name is checked against Mojang and re-rolled until it belongs to no
real account, so a random disguise never impersonates someone who exists. Names are kept within
Minecraft's 16-character limit.
Permissions
packett.incognito- use/disguiseand/undisguise(default: op)packett.disguise.name- allowed to choose your own disguise name (default: op)packett.disguise- staff: disguise as ANY name including real accounts (pulls their real skin) and bypass the non-existence check (default: op)packett.disguise.vip- allowed to appear with thevipdisplay rank (default: op)
Dependencies
| Plugin | Required? | Why |
|---|---|---|
| ProtocolLib | Yes (hard depend) | Performs the packet rewrite. Plugin disables itself without it. |
| LuckPerms | Recommended | Supplies the prefix/suffix for the disguise display rank. Without it, disguises still work but show no rank. |
| PlaceholderAPI | Optional | Exposes %packettdisguise_name%, %packettdisguise_realname%, %packettdisguise_disguised%. |
| TAB | Optional | If present, the disguise is pushed through TAB's name/prefix/suffix so it doesn't fight your tab layout. |
config.yml
network-sync: false # false = standalone (re-applies from disguises.yml on relog)
# true = a proxy on the "packett:disguise" channel is the source of truth
random-name:
first-words: [ ... ] # first word of a random name (adjectives)
second-words: [ ... ] # second word of a random name (nouns/names)
disguise-groups:
default: default # LuckPerms group whose prefix/suffix shows for the "default" display rank
vip: vip # ... for the "vip" display rank (gated by packett.disguise.vip)
Per-player state persists to disguises.yml.
PlaceholderAPI tokens
%packettdisguise_name%- disguise name when disguised, else real username%packettdisguise_realname%- always the real username (use this in logs/audit formats)%packettdisguise_disguised%-true/false
Build
mvn package
Produces target/PackettDisguise-1.0.jar.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:Dz8sbVUn:iipVK2Lg"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:Dz8sbVUn:iipVK2Lg"
}
