Player Heads
Ever PVP someone or PVE a mob and get no good loot? Feel like you deserve a trophy for your victory? Want a simpler alternative to bigger plugins that implement everything but the kitchen sink? Then PlayerHeads is right for you! You can now lop off enemies heads in battle, and mount it on a pole for all to fear, wear your opponent's face as a mask like camouflage, or just collect all of the mob heads.
Installation
Place PlayerHeads.jar in your plugins folder, on server start the configuration will be generated. Remember to remove any outdated playerheads jars when adding the new one.
If you can't be bothered to read the rest of this page, then just watch this video by Awesome_Soul:
Portuguese (Português) video: http://youtu.be/OqhI_oIGPWo
German (Deutsch) video: http://youtu.be/ijEws5yjo6Y
Try It
Server: aztecmc.org (rare drops are enabled for mob and player-heads)
Website: aztecmc.org
Documentation
Notes
- PlayerHeads is now translatable! Edit "lang.properties" to whatever phrases you desire.
- lang files will change between releases, when updating be sure to delete the old file if you haven't edited it.
- If you've given people the * permission node, they will get 100% drop rates. If you don't want this to happen, deny (or add negative) nodes for the following: playerheads.alwaysbehead and playerheads.alwaysbeheadmob
- If you want to disable head drops in a specific world, use your permission plugin to deny (or add negative) nodes for the following in that world: playerheads.canbehead and playerheads.canbeheadmob
- If you have any problem using "lang_[language]_[country]_[variant].properties" for any reason, just use the file name "lang.properties" to override messages.
- Spawn mob heads with the following names: #creeper #zombie #skeleton #wither #spider #enderman #enderdragon ... (any many more!)
Known issues
- Renamed heads (with an anvil) don't stay renamed after placing, mining, dropping them.
- If for any reason your mob heads loose their name, you can get it back by placing and mining it.
- If you use the BountyHunters plugin and you have enabled head drops for bounties as well as player head drops from PlayerHeads, both will be dropped - for now, you should disable one or the other. Alternative solutions are being looked at.
- If you use JPerms, users with Op or playerheads.* permission will receive playerheads.alwaysbehead[mob] permissions and have 100% droprate since PlayerHeads permissions nodes are ignored. It's recommended to use another permissions plugin if this is a concern (LuckPerms, PermissionsEX, GroupManager).
Dev Builds
Development builds of this project can be acquired at the provided continuous integration servers. These builds have not been approved by the BukkitDev staff. Use them at your own risk.
https://ci.meme.tips/job/PlayerHeads (upstream)/ (selected major changes only)
https://ci.meme.tips/job/PlayerHeads-5.x/ (rapid changes and work-in-progress)
Sourcecode / API documentation
We've included the entire sourcecode via github:
https://github.com/meiskam/PlayerHeads
Third-party plugin-developers can view the PlayerHeads API documentation at the following link: https://crashdemons.github.io/PlayerHeads/
Server Support
Current versions of the plugin have been tested as compatible on the following server environments:
- Spigot/Paper 1.8-1.18.2 (Use PlayerHeads 5.20.2 or lower; READ NOTE)
- Spigot/Paper 1.19-1.20.4
Server environments that are known to be incompatible:
- Glowstone 1.12 (only partial support is available in PlayerHeads 5.20.2 and lower)
Support should exist for any modern bukkit server with access to authlib which is needed to set textures.
Legacy version notes:
- 5.x drops support for older usernamed-based mobheads (3.x), fixing some longstanding issues with spawn commands; uses vanilla and texured heads exclusively (4.x)
- 4.x introduces new, more reliable support for head textures, more configuration options, updated mobs, and more consistent permission behavior and will continue to receive updates in the future - some older configurations may be incompatible (see the changelog and Configuration page). This version automatically upgrades 3.x heads to 4.x when breaking or dropping heads.
- 3.x maintains the original behavior of the plugin with username-based mobheads, but head skins may be less reliable over time and support has been discontinued.
Legacy version documentation: changelog, configuration, permissions.
k
None of the ci.meme.tips dev build links are working. Just FYI.
Hi How to fix Player break a "Head Database's Haed" But will drop a vanilla head (see picture) lost the skin when player place.
We are aware of a console error that occurs when PlayerHeads tries to identify a head from another plugin. ("Name and ID must be present for a valid profile.")
This error will not stop the plugin from functioning normally (since it stops identifying early), but I am looking at how to handle the issue so that console spam can be removed.
The technical reason for this error is that while Mojang's GameProfile (or equivalent) was intended to be used for custom heads, many plugins do not use it. Recently, GameProfile started requiring both ID and Name somewhat oddly - but many other plugins only set one of the two. The previous update corrected issues for PlayerHeads itself to continue using GameProfile, but the next update needs to handle cases where external heads are incompatible with the new GameProfile definition.
https://gist.github.com/MithrandirCraft/6148983cdcaa1b63cf5c9dd75ede0d73
No matter mobs drop a head or using command to get a head, console always get "java.lang.NullPointerException: Profile name must not be null" error, so I can't get any heads.
I am using lastest paper and purpur, both have same issue, and I update to dev build 1167 still has the issue.
[20:17:36 ERROR]: null org.bukkit.command.CommandException: Unhandled exception executing command 'ph' in plugin PlayerHeads v5.20.1-SNAPSHOT at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[purpur-api-1.20.2-R0.1-SNAPSHOT.jar:?] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:168) ~[purpur-api-1.20.2-R0.1-SNAPSHOT.jar:?] at org.bukkit.craftbukkit.v1_20_R2.CraftServer.dispatchCommand(CraftServer.java:1003) ~[purpur-1.20.2.jar:git-Purpur-2078] at org.bukkit.craftbukkit.v1_20_R2.command.BukkitCommandWrapper.run(BukkitCommandWrapper.java:64) ~[purpur-1.20.2.jar:git-Purpur-2078] at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:265) ~[purpur-1.20.2.jar:?] at net.minecraft.commands.Commands.performCommand(Commands.java:338) ~[?:?] at net.minecraft.commands.Commands.performCommand(Commands.java:322) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.performChatCommand(ServerGamePacketListenerImpl.java:2274) ~[?:?] at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleChatCommand$20(ServerGamePacketListenerImpl.java:2234) ~[?:?] at net.minecraft.util.thread.BlockableEventLoop.lambda$submitAsync$0(BlockableEventLoop.java:59) ~[?:?] at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?] at net.minecraft.server.TickTask.run(TickTask.java:18) ~[purpur-1.20.2.jar:git-Purpur-2078] at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?] at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?] at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1349) ~[purpur-1.20.2.jar:git-Purpur-2078] at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:193) ~[purpur-1.20.2.jar:git-Purpur-2078] at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?] at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1326) ~[purpur-1.20.2.jar:git-Purpur-2078] at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1319) ~[purpur-1.20.2.jar:git-Purpur-2078] at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?] at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1396) ~[purpur-1.20.2.jar:git-Purpur-2078] at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1175) ~[purpur-1.20.2.jar:git-Purpur-2078] at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:318) ~[purpur-1.20.2.jar:git-Purpur-2078] at java.lang.Thread.run(Thread.java:833) ~[?:?] Caused by: java.lang.NullPointerException: Profile name must not be null at java.util.Objects.requireNonNull(Objects.java:233) ~[?:?] at com.mojang.authlib.GameProfile.<init>(GameProfile.java:31) ~[authlib-5.0.47.jar:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit.CompatibleProfileCB.createInternalObject(CompatibleProfileCB.java:37) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit.CompatibleProfileCB.toInternalObject(CompatibleProfileCB.java:71) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit.ProfileUtils.setProfile(ProfileUtils.java:79) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit.ProfileUtils.setProfile(ProfileUtils.java:95) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit_1_13.Provider_craftbukkit_113.setProfile(Provider_craftbukkit_113.java:67) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at com.github.crashdemons.playerheads.SkullManager.applyTexture(SkullManager.java:66) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at com.github.crashdemons.playerheads.SkullManager.MobSkull(SkullManager.java:106) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at com.github.crashdemons.playerheads.SkullManager.spawnSkull(SkullManager.java:219) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at org.shininet.bukkit.playerheads.InventoryManager.addHead(InventoryManager.java:66) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at org.shininet.bukkit.playerheads.PlayerHeadsCommandExecutor.onCommandSpawn(PlayerHeadsCommandExecutor.java:287) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at org.shininet.bukkit.playerheads.PlayerHeadsCommandExecutor.onCommand(PlayerHeadsCommandExecutor.java:411) ~[PlayerHeads-5.20.2-SNAPSHOT.jar:?] at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[purpur-api-1.20.2-R0.1-SNAPSHOT.jar:?] ... 23 more
In reply to 切西瓜:
Hi, thanks for reporting this - I'll try to reproduce the issue on our server later today and find the cause - I would right now, but I'm dealing with some intense gut pain.
In reply to 切西瓜:
Hello again, I've pushed a dev build (1168) that may help with this, if you'd like to test it. I guess working on this was the best way to distract from my problem after all.
It looks like the update to Mojang's Authlib also made both the UUID and Username of heads mandatory. Prior to this, only one of the two was required - which made sense for custom heads to not have a username; now I must assign something to the username field. This required a lot of changes to the internal Playerheads Compatibility API.
After this change, custom heads made by playerheads (non-vanilla mob heads) will still have their normal UUID, but will also have a username in the format "PlayerHeads:<uniqueid>" where the colon symbol (":") can be used to detect a head made by a plugin now.
In reply to crashdemons:
1168 fixed that, thank you!
Hi, the page for dev build dosent work, i found a spam error in console to version 1.20.2
[20:12:08] [Server thread/ERROR]: Could not pass event BlockBreakEvent to PlayerHeads v5.20.1-SNAPSHOT java.lang.NoSuchMethodError: 'java.lang.String com.mojang.authlib.properties.Property.getName()' at com.github.crashdemons.playerheads.compatibility.craftbukkit.CompatibleProfileCB.getInternalTexture(CompatibleProfileCB.java:52) ~[?:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit.CompatibleProfileCB.setFromInternalObject(CompatibleProfileCB.java:71) ~[?:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit.CompatibleProfileCB.<init>(CompatibleProfileCB.java:31) ~[?:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit.ProfileUtils.getProfile(ProfileUtils.java:53) ~[?:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit_1_13.Provider_craftbukkit_113.getCompatibleProfile(Provider_craftbukkit_113.java:105) ~[?:?] at com.github.crashdemons.playerheads.compatibility.common.Provider_common.isCustomHead(Provider_common.java:220) ~[?:?] at com.github.crashdemons.playerheads.SkullConverter.determineSkullType(SkullConverter.java:58) ~[?:?] at com.github.crashdemons.playerheads.SkullConverter.skullTypeFromBlockState(SkullConverter.java:116) ~[?:?] at org.shininet.bukkit.playerheads.PlayerHeadsListener.onBlockBreak(PlayerHeadsListener.java:810) ~[?:?] at com.destroystokyo.paper.event.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:40) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:?] at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:81) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:git-Paper-234] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:?] at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.20.2.jar:git-Paper-234] at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[paper-1.20.2.jar:git-Paper-234] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:615) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:?] at net.minecraft.server.level.PlayerInteractManager.a(PlayerInteractManager.java:378) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.level.PlayerInteractManager.a(PlayerInteractManager.java:337) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.level.PlayerInteractManager.a(PlayerInteractManager.java:301) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:1819) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.network.protocol.game.PacketPlayInBlockDig.a(PacketPlayInBlockDig.java:42) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.network.protocol.game.PacketPlayInBlockDig.a(PacketPlayInBlockDig.java:15) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.network.protocol.PlayerConnectionUtils.lambda$ensureRunningOnSameThread$0(PlayerConnectionUtils.java:53) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.util.thread.IAsyncTaskHandler.d(IAsyncTaskHandler.java:153) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(IAsyncTaskHandlerReentrant.java:24) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1324) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:193) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.util.thread.IAsyncTaskHandler.x(IAsyncTaskHandler.java:126) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.bg(MinecraftServer.java:1301) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1294) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.util.thread.IAsyncTaskHandler.c(IAsyncTaskHandler.java:136) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.u_(MinecraftServer.java:1272) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1160) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:315) ~[paper-1.20.2.jar:git-Paper-234] at java.lang.Thread.run(Thread.java:833) ~[?:?] [20:12:08] [Server thread/ERROR]: Could not pass event ItemSpawnEvent to PlayerHeads v5.20.1-SNAPSHOT java.lang.NoSuchMethodError: 'java.lang.String com.mojang.authlib.properties.Property.getName()' at com.github.crashdemons.playerheads.compatibility.craftbukkit.CompatibleProfileCB.getInternalTexture(CompatibleProfileCB.java:52) ~[?:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit.CompatibleProfileCB.setFromInternalObject(CompatibleProfileCB.java:71) ~[?:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit.CompatibleProfileCB.<init>(CompatibleProfileCB.java:31) ~[?:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit.ProfileUtils.getProfile(ProfileUtils.java:53) ~[?:?] at com.github.crashdemons.playerheads.compatibility.craftbukkit_1_13.Provider_craftbukkit_113.getCompatibleProfile(Provider_craftbukkit_113.java:105) ~[?:?] at com.github.crashdemons.playerheads.compatibility.common.Provider_common.isCustomHead(Provider_common.java:220) ~[?:?] at com.github.crashdemons.playerheads.SkullConverter.determineSkullType(SkullConverter.java:58) ~[?:?] at com.github.crashdemons.playerheads.SkullConverter.skullTypeFromItemStack(SkullConverter.java:93) ~[?:?] at org.shininet.bukkit.playerheads.PlayerHeadsListener.onItemSpawnEvent(PlayerHeadsListener.java:692) ~[?:?] at com.destroystokyo.paper.event.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:40) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:?] at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:81) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:git-Paper-234] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:?] at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.20.2.jar:git-Paper-234] at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[paper-1.20.2.jar:git-Paper-234] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:615) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:?] at org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory.callItemSpawnEvent(CraftEventFactory.java:817) ~[paper-1.20.2.jar:git-Paper-234] at org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory.doEntityAddEventCalling(CraftEventFactory.java:695) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.level.WorldServer.addEntity(WorldServer.java:1690) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.level.WorldServer.addFreshEntity(WorldServer.java:1598) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.level.WorldServer.b(WorldServer.java:1593) ~[paper-1.20.2.jar:git-Paper-234] at org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory.handleBlockDropItemEvent(CraftEventFactory.java:468) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.level.PlayerInteractManager.a(PlayerInteractManager.java:451) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.level.PlayerInteractManager.a(PlayerInteractManager.java:337) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.level.PlayerInteractManager.a(PlayerInteractManager.java:301) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:1819) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.network.protocol.game.PacketPlayInBlockDig.a(PacketPlayInBlockDig.java:42) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.network.protocol.game.PacketPlayInBlockDig.a(PacketPlayInBlockDig.java:15) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.network.protocol.PlayerConnectionUtils.lambda$ensureRunningOnSameThread$0(PlayerConnectionUtils.java:53) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.util.thread.IAsyncTaskHandler.d(IAsyncTaskHandler.java:153) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(IAsyncTaskHandlerReentrant.java:24) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1324) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:193) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.util.thread.IAsyncTaskHandler.x(IAsyncTaskHandler.java:126) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.bg(MinecraftServer.java:1301) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1294) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.util.thread.IAsyncTaskHandler.c(IAsyncTaskHandler.java:136) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.u_(MinecraftServer.java:1272) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1160) ~[paper-1.20.2.jar:git-Paper-234] at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:315) ~[paper-1.20.2.jar:git-Paper-234] at java.lang.Thread.run(Thread.java:833) ~[?:?]
In reply to draghonirtv:
What version and flavor of Paper server are you using (Paper, Purpur, Glowstone) ?
I'll look into why the dev/CI server isn't working, but the released version is the same as the latest dev build I believe.
Thank you
In reply to crashdemons:
Hello i use PaperMC build 235
i use the dev build of playerheads 1166
thank you
In reply to draghonirtv:
I've got the dev/CI server back up.
I also pushed a dev build (1167) that might resolve this issue, but it's untested as of yet.
Basically it seems like a Mojang Authlib update renamed a couple functions from "getName" and "getValue" to "name" and "value". This would be simple enough to change, but since I need to maintain backwards compatibility, I had to make a wrapper that checks for either.
In reply to crashdemons:
I just installed the latest version of the dev build #1167, and I can confirm that the bug is resolved. I no longer receive the error message when I break a head. Thank you for your prompt response, which is greatly appreciated. ;)
Some heads turned steve head (plugin is last version)
Hey!
When using Playerheads v5.2.19 I had an issue where players with either playerheads.alwaysbehead or playerheads.* ended up having 0 head drops whatsoever, however the plugin functions fine for those without these permission nodes.
In my test I increased the drop rate to 20% and without these nodes could get a head every now and then, however after adding either/both of these nodes it completely removed head drops altogether. I don't think this is a conflicting plugin issue since I tried it on 2 separate servers (with different plugins but not without any plugins whatsoever, but I can do this if its needed) I was using 1.19 purpur build and with ProtocolLibs latest build.
Thanks very much!
Goat heads seem broken. They don't drop, and on giving myself one it seems to be wearing sunglasses...
In reply to MithrandirMage:
I'm not able to reproduce this at all. When I have permission to behead mobs and the goat droprate is increased (to 0.5 for testing), I get a goat head about half the time from killing it.
Regarding giving yourself the head, you must use /ph spawn #mobname (/ph spawn #goat) - if you use /ph spawn goat, you will get the head for a player named Goat (the sunglasses one)
Please note you must be using 5.2.19 in order to receive goat head drops.
In reply to crashdemons:
heads up, there is no issue.
it took me a while, but at 1% drop rate I finally got a goat head.
as for the command, yeah, my mistake.
I think I'm having some problems, I don't seem to be collecting mob heads at all now, my friends on the server can kill around 20 mobs and get that head however i kill around 50-60 and there are no drops to be seen.