_____________________________________________________________________________________________________________________________
*** VIEW THE FAQ ON HOW TO GET CUSTOM MASK SKINS ***
✔ Comes with premade 20+ masks for use
✔ Give players masks, good for crates, voting, etc.
✔ PlaceholderAPI support!
✔ Auto-updating Placeholder's in mask lore when being worn!
✔ Give the entire server masks
✔ Beautiful & easy to read console logger
✔ Create as many custom masks as you'd like
✔ Individual & organized mask files
✔ Animated mask texturs
✔ Fun for all types of servers
✔ Disable mask dropping on death, per mask
✔ Very easy and simple to use
✔ Simple & effective menu GUI for viewing & grabbing masks
✔ Multi-version support: 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, & 1.14
✔ Apply masks quickly by shift + right clicking
✔ Disable masks in certain worlds
✔ Disable masks for certain players
✔ Add up to 50+ enchants to masks.
✔ Disable specific masks for certain players
✔ Custom chat format for specific masks
✔ Detailed & tweakable settings
✔ Anti-dupe proof
✔ Custom join message per mask
✔ Drop mask if inventory is full when attempting to give one
✔ Smart per-player mask calculation (avoids lag)
✔ Hide player nametags when wearing a mask
✔ Change chat format & messages when wearing a mask
✔ LibsDisguises support! Disguise a player when wearing a mask
✔ Run commands after certain seconds of wearing a mask
✔ Customizable messages
✔ Automatically add & remove permissions when wearing or taking off a mask
✔ Disable anvil renaming
✔ Run commands when putting on a mask
✔ Display a message when putting on a mask
✔ Give effects when entering PvP combat
✔ Display particles on dropped masks
✔ Disable interaction with blocks when holding a mask
✔ Easy mask creation for server owners AND plugin developers
✔ Universal material, sound, and particle support for multiple versions
✔ No performance impacts
✔ Lightweight
✔ Run commands when removing a mask
✔ Friendly & Efficient Developer API for creating masks with more features
✔ Event Listening for developers
✔ Constantly updated & kept up-to-date with latest MC version(s)
CONFIGURATION
Code (YAML):
settings:
drop-if-inventory-full: true
allow-interaction: false
shift-click-wear: true
disabled-worlds:
- example
- example2
- example3
on-ground-effects:
show-particle: true
show-displayName: true
particleType: 'SPELL_INSTANT'
xOffset: 0.298
yOffset: 0.2
zOffset: 0.298
amount: 1
mask-put-on:
enabled: true
message: '&aYou have put on %mask_displayname%&a.'
PLACEHOLDER API (FOR MASK LORE):
- %masks_wearing%
- %masks_mask_name%
- %masks_mask_displayname%
- ** SUPPORTS ALL PAPI PLACEHOLDERS IN MASK LORE **
Code (YAML):
itemName: '&eBaby Mask'
lore:
- '&7A mask!'
potionType:
- WEAKNESS;2
- SPEED;5
on-wear-commands:
- 'give %player% diamond 1'
on-remove-commands:
- 'give %player% diamond 2'
timed-commands:
10:
- 'example command %player%'
- 'example command2 %player%'
15:
- 'example command3 %player%'
keep-on-death: true
hide-nametag: true
add-permission: 'example.permission'
chat-format: '&e[Baby] &d%player%: &a%message%'
custom-join-message: '&a&n%player%&d joined wearing %mask%.'
effects-on-pvp:
- 'INCREASE_DAMAGE;3;5'
mask-disguise:
entity-type: CREEPER
custom-name: '&a&lCreeper'
enchantments:
DAMAGE_ALL: 1
DURABILITY: 2
texture:
value: eyJ0aW1lc3RhbXAiOjE1NTU0NTM1MDg3OTksInByb2ZpbGVJZCI6ImU3NmYwZDlhZjc4MjQyYzM5NDY2ZDY3MjE3MzBmNDUzIiwicHJvZmlsZU5hbWUiOiJLbGxscmFoIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTY0YzY2NGQ3M2ZmOTFmMjgzZjVhZTg1OGFjYTEzNGZjYmE3MzM5YmYyMmFmYWZlNWZlNDk4ODA4Mzc2NTFiIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NzI2NTU4NjQ2ODcsInByb2ZpbGVJZCI6IjIzZjFhNTlmNDY5YjQzZGRiZGI1MzdiZmVjMTA0NzFmIiwicHJvZmlsZU5hbWUiOiIyODA3Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83MjY5OTEwMTkzMGM4OWY2YzcxMmNjYjBjNjI4MDhhMzk5NzUyMDcxMDUwMzlmZTU4NzY2ZjJjODc2OGYyZDkxIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NzI2NTU4ODMxMTksInByb2ZpbGVJZCI6ImIwZDczMmZlMDBmNzQwN2U5ZTdmNzQ2MzAxY2Q5OGNhIiwicHJvZmlsZU5hbWUiOiJPUHBscyIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZmM4YmQzZjAwYThmZTA5YmI1ZTEyODUyYWIyZGU5NjM2ZjI4Yzg5MjI3MGEyODNhYzQyZmRlMzViZmIyZjJmNiJ9fX0=;eyJ0aW1lc3RhbXAiOjE1NzI2NTU4OTg5MzMsInByb2ZpbGVJZCI6IjE5MjUyMWI0ZWZkYjQyNWM4OTMxZjAyYTg0OTZlMTFiIiwicHJvZmlsZU5hbWUiOiJTZXJpYWxpemFibGUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzNiZGNkYzA5MTY0MThjZjgyZGNjNmQxYjkxNmNmZTgzZTU1ZTc0NzFlODA5NTMwZDNiYWM0NDZmMjk3N2UyYmQifX19;eyJ0aW1lc3RhbXAiOjE1NzI2NTU5MjY2MjEsInByb2ZpbGVJZCI6IjgyYzYwNmM1YzY1MjRiNzk4YjkxYTEyZDNhNjE2OTc3IiwicHJvZmlsZU5hbWUiOiJOb3ROb3RvcmlvdXNOZW1vIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTIwYTkwNmMzNzRkYmMyZWM0NTIzYzkwYTVjNGUwNjA0ZDA5YmZkZTlhN2VkYWQxMWE5M2NkMDhkZDk3YmFkIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NzI2NTU4OTg5MzMsInByb2ZpbGVJZCI6IjE5MjUyMWI0ZWZkYjQyNWM4OTMxZjAyYTg0OTZlMTFiIiwicHJvZmlsZU5hbWUiOiJTZXJpYWxpemFibGUiLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzNiZGNkYzA5MTY0MThjZjgyZGNjNmQxYjkxNmNmZTgzZTU1ZTc0NzFlODA5NTMwZDNiYWM0NDZmMjk3N2UyYmQifX19;eyJ0aW1lc3RhbXAiOjE1NzI2NTU5MjY2MjEsInByb2ZpbGVJZCI6IjgyYzYwNmM1YzY1MjRiNzk4YjkxYTEyZDNhNjE2OTc3IiwicHJvZmlsZU5hbWUiOiJOb3ROb3RvcmlvdXNOZW1vIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTIwYTkwNmMzNzRkYmMyZWM0NTIzYzkwYTVjNGUwNjA0ZDA5YmZkZTlhN2VkYWQxMWE5M2NkMDhkZDk3YmFkIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NzI2NTU5MjY2MjEsInByb2ZpbGVJZCI6IjgyYzYwNmM1YzY1MjRiNzk4YjkxYTEyZDNhNjE2OTc3IiwicHJvZmlsZU5hbWUiOiJOb3ROb3RvcmlvdXNOZW1vIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTIwYTkwNmMzNzRkYmMyZWM0NTIzYzkwYTVjNGUwNjA0ZDA5YmZkZTlhN2VkYWQxMWE5M2NkMDhkZDk3YmFkIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NzI2NTU4NjQ2ODcsInByb2ZpbGVJZCI6IjIzZjFhNTlmNDY5YjQzZGRiZGI1MzdiZmVjMTA0NzFmIiwicHJvZmlsZU5hbWUiOiIyODA3Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83MjY5OTEwMTkzMGM4OWY2YzcxMmNjYjBjNjI4MDhhMzk5NzUyMDcxMDUwMzlmZTU4NzY2ZjJjODc2OGYyZDkxIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NTU0NTM1MDg3OTksInByb2ZpbGVJZCI6ImU3NmYwZDlhZjc4MjQyYzM5NDY2ZDY3MjE3MzBmNDUzIiwicHJvZmlsZU5hbWUiOiJLbGxscmFoIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTY0YzY2NGQ3M2ZmOTFmMjgzZjVhZTg1OGFjYTEzNGZjYmE3MzM5YmYyMmFmYWZlNWZlNDk4ODA4Mzc2NTFiIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NTU0NTM1MDg3OTksInByb2ZpbGVJZCI6ImU3NmYwZDlhZjc4MjQyYzM5NDY2ZDY3MjE3MzBmNDUzIiwicHJvZmlsZU5hbWUiOiJLbGxscmFoIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTY0YzY2NGQ3M2ZmOTFmMjgzZjVhZTg1OGFjYTEzNGZjYmE3MzM5YmYyMmFmYWZlNWZlNDk4ODA4Mzc2NTFiIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NTU0NTM1MDg3OTksInByb2ZpbGVJZCI6ImU3NmYwZDlhZjc4MjQyYzM5NDY2ZDY3MjE3MzBmNDUzIiwicHJvZmlsZU5hbWUiOiJLbGxscmFoIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTY0YzY2NGQ3M2ZmOTFmMjgzZjVhZTg1OGFjYTEzNGZjYmE3MzM5YmYyMmFmYWZlNWZlNDk4ODA4Mzc2NTFiIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NTU0NTM1MDg3OTksInByb2ZpbGVJZCI6ImU3NmYwZDlhZjc4MjQyYzM5NDY2ZDY3MjE3MzBmNDUzIiwicHJvZmlsZU5hbWUiOiJLbGxscmFoIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTY0YzY2NGQ3M2ZmOTFmMjgzZjVhZTg1OGFjYTEzNGZjYmE3MzM5YmYyMmFmYWZlNWZlNDk4ODA4Mzc2NTFiIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NTU0NTM1MDg3OTksInByb2ZpbGVJZCI6ImU3NmYwZDlhZjc4MjQyYzM5NDY2ZDY3MjE3MzBmNDUzIiwicHJvZmlsZU5hbWUiOiJLbGxscmFoIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTY0YzY2NGQ3M2ZmOTFmMjgzZjVhZTg1OGFjYTEzNGZjYmE3MzM5YmYyMmFmYWZlNWZlNDk4ODA4Mzc2NTFiIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NTU0NTM1MDg3OTksInByb2ZpbGVJZCI6ImU3NmYwZDlhZjc4MjQyYzM5NDY2ZDY3MjE3MzBmNDUzIiwicHJvZmlsZU5hbWUiOiJLbGxscmFoIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTY0YzY2NGQ3M2ZmOTFmMjgzZjVhZTg1OGFjYTEzNGZjYmE3MzM5YmYyMmFmYWZlNWZlNDk4ODA4Mzc2NTFiIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NTU0NTM1MDg3OTksInByb2ZpbGVJZCI6ImU3NmYwZDlhZjc4MjQyYzM5NDY2ZDY3MjE3MzBmNDUzIiwicHJvZmlsZU5hbWUiOiJLbGxscmFoIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTY0YzY2NGQ3M2ZmOTFmMjgzZjVhZTg1OGFjYTEzNGZjYmE3MzM5YmYyMmFmYWZlNWZlNDk4ODA4Mzc2NTFiIn19fQ==;eyJ0aW1lc3RhbXAiOjE1NTU0NTM1MDg3OTksInByb2ZpbGVJZCI6ImU3NmYwZDlhZjc4MjQyYzM5NDY2ZDY3MjE3MzBmNDUzIiwicHJvZmlsZU5hbWUiOiJLbGxscmFoIiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS83OTY0YzY2NGQ3M2ZmOTFmMjgzZjVhZTg1OGFjYTEzNGZjYmE3MzM5YmYyMmFmYWZlNWZlNDk4ODA4Mzc2NTFiIn19fQ==
This is an example of the Baby Mask. Here's the breakdown of the configuration:
- itemName - Name to be displayed on the mask item
- potionType - The potion types to be applied when worn. The format is <POTION_TYPE>;<AMPLIFIER>
- on-wear-commands - The commands to run when the mask is put on
- timed-commands - The commands to run after the mask has been worn for the specified seconds
- keep-on-death - If the mask should remain worn even during death
- hide-nametag - Hides the player's nametag when wearing the mask
- chat-format - The chat format that should be used when wearing the mask
- effects-on-pvp - Effects to be applied when a player enter PVP comb.at The format is <POTION_TYPE>;<AMPLIFIER>;<SECONDS>
- mask-disguise This requires LibsDisguises. It will disguise a player during the duration of them wearing a mask.
- enchantments This allows you to add enchantments to a mask. Put the enchantment name and the level separated by a semicolon. You can find all enchants here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/enchantments/Enchantment.html
- texture-update-interval: This is the delay between textures that will be applied to this mask. The update time for the mask animation.
- texture.value - The value representing the mask's skin. Continue reading to find on how to get this value. If you specify multiple textures separated by a comma, the mask will automatically cycle through the textures.
You can find potion types here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/potion/PotionEffectType.html NOTE: ALL POTION TYPES ARE AVAILABLE FOR EVERY SERVER VERSION
To get the skin value of a custom skin you want:
- Grab any skin file
- Head over to https://mineskin.org/
- Click 'Select File'
- Upload your skin file
- Scroll down
- Hit 'Generate'
- Copy the 'Texture Data' part and paste that into the 'value' in the mask's configuration file
ALIASES: /pmask | /playermask
- /masks give <player> <mask> <amount> - Gives a player a mask
- Use '*' for the player if you want to target all online players
- /masks menu - Displays menu with all masks on disk
- /masks reload - Reloads the configuration & masks
- masks.command - allows for /masks give ...
- masks.disable - disables the usage of all masks
- masks.disable.<mask> - disables usage of a specific mask
- <mask> is determined by the name of the mask file
- If I had a mask file named spiderman.yml, and I wanted to restrict the use of spiderman, I would give the player masks.disable.spiderman
- <mask> is determined by the name of the mask file
API Usage:
To get the MasksApi instance, you will need to access it through Bukkit's Services Manager. If you've used Vault before, this will look very familiar.
Code (Java):
RegisteredServiceProvider<MasksApi> registeredServiceProvider = Bukkit.getServicesManager().getRegistration(MasksApi.class);
if (registeredServiceProvider == null) {
//not installed
return;
}
MasksApi masksApi= registeredServiceProvider.getProvider();
if (masksApi == null) {
//not installed
return;
}
// use masksApi
Events:
- MaskActionEvent (called when a mask's effects are applied. This happens every tick)
- MaskWornEvent (called when a mask is put on)
- MaskRemovedEvent (called when a mask is removed)
- Why are my effects showing up as Speed when I put a different potion effect? Your server version is either incompatible with the effect you specified OR the name for the potion effect is incorrect.
- Why isn't my mask recognized? Make sure it follows the same format as the default masks & there are no errors in the console about your configuration format
- Why isn't my particle working & there's an error? You have either specified a particle type that's incompatible with your server version OR the name of the particle type is incorrect.
- How many masks can I add? Infinite! Ok.. maybe not... but quite enough to satisfy your needs.
- How do I make an animated mask? Grab multiple skin values (read below on how to do so) and paste them into the texture.value section of the mask configuration. Separate each skin value with a comma (;). View the example in the baby.yml above.
- How do I get the skin value?
- Grab any skin file
- Head over to https://mineskin.org/
- Click 'Select File'
- Upload your skin file
- Scroll down
- Hit 'Generate'
- Copy the 'Texture Data' part and paste that into the 'value' in the mask's configuration file