Archived Information (outdated)/Changelog (4.x)

Newer 5.x version changelogs are available here.


4.10.0 snapshots

  • added: lightweight API module for easier use of PlayerHeads by other plugin developers. (details here)
  • changes: internal reorganization to reduce code redundancy,  code can now be built from a single repository

4.9.4 snapshots

  • preliminary support for 1.14-pre5
  • added: compatibility layer / detection for 1.14 (based on pre-5)
  • bugfix: don't check for tamed ocelots in 1.14 (fixes isTame unknown method error on 1.14 Pre)
  • changed: temporarily disabled bukkit update-checker since simple-json support has been deprecated
  • bugfix: made version-parsing more lenient (fixes unknown version string on 1.14 Pre)

4.9.3 snapshots

  • Speculative 1.14 mob support changes
  • (NOTE: names are subject to change when the 1.14 bukkit API becomes public)
  • Fixed: Added missing droprate entry for Fox
  • Changed: Changed the name Illager Beast to Ravager
  • Added: Added head support for Wandering Trader
  • Added: Added head support for Trader Llama
  • Internal reorganization update
  • Changed: Reorganized NCP and Protection-check code into CompatiblePlugins classes
  • Changed: NCP Support status printed at startup
  • API: deprecated NCPHook plugin property. You should check CompatiblePlugins instead.
  • API: deprecated FakeBlockBreakEvent. You should check SimulatedBlockBreakEvent from the compatibility package if you really need to check for this.


  • API/Plugin-Developer update only: Adds new event HeadRollEvent which contains information about the decision to drop a head when a head dropchance (successful or unsuccesful) occurs. This allows third-party plugins to check and modify drop success/failure rates, with the exception of conditions that exclude head drops altogether.


  • Other: Provisional support for Fox heads in the future (subject to change)
  • Added: added new configuration option: fixdroppedheads (default: true). When enabled, this option attempts to automatically fix the name+lore text on head items that are dropped (as in version 4.8.0). When disabled, no action is taken as in versions 4.0-4.7.4 and prior.  Note: disabling this option does not stop information being added to head blocks that are broken manually.
  • Fix: Don't cancel blockbreak events when unable to drop an unsupported custom-textured head.
    • This attempts to fix inability to break/drop custom heads not managed by the plugin.

 4.8.8 snapshot

  • Fix: Use new method that avoids internal error when using dropboringplayerheads.


  • Added: added support for cat heads from tamed ocelots (legacy cats) in 1.8-1.13.2 in anticipation of cats being a separate mob in future vesions - this would make older servers drop heads in a similar way to future servers for better consistency across versions.
    • This behavior is currently disabled if loaded in a (future) "1.14" server version, as it's expected that wild-ocelots and tamed-cats will be separated entirely. This may need to be revised in future plugin releases depending on the final server implementation of ocelots.
  • Fix: added conversion for spawned head items so that  heads broken by water, pistons, etc will be updated with the plugin-provided name rather than the default "Player Head"
  • API changes: (for devs)
    • ProfileUtils was moved into the compatibility package - but since it relies on authlib, you should still avoid using it outside of specific server support implementations ("providers") - using the methods of Compatibility.getProvider() are preferred.
    • All head drop events now implement a common interface: DropHeadEvent.
    • When a player breaks a head, a new cancellable event is thrown: BlockDropHeadEvent. (Piston and water-based breaks are not currently able to be caught until/if BlockDropItemEvent support is standard - use ItemSpawnEvent and SkullConverter.skullTypeFromItemStackLegacy for now)

4.7.1-4.7.4 snapshots:

  • Minor change: restructured project so that the top-level POM is responsible for adding compatibility packages, not the core code. ProfileUtils helper class was moved into the compatibility package.
  • Minor change: re-enabled and added some tests for core behavior code that was lacking after cross-version compatibility support was added.
  • Minor change: different sets of versions can now be supported for different server types internally.
  • Speculative support: Some compatibility was added for Glowstone server API without reliance on authlib, but Glowstone is not feature-complete and you will still encounter many problems.  Only server snapshots after 2018-11-20 can be supported due to some necessary changes.  [Glowstone Notes]


  • Added: New configuration options to control death spam nerf conditions (only effective when nerfdeathspam is enabled):
    • deathspamcount (default: 5) - controls how many previous player deaths to record an check for "spam" entries.
    • deathspamthreshold (default: 300000) - controls how many milliseconds is allowed between matching deaths to be considered spam
  • Added: New configuration options to control click interaction spam conditions for heads (when the user has the clickinfo permission):
    • clickspamcount (default: 5) - controls how many previous head-interactions to record an check for "spam" entries.
    • clickspamthreshold (default: 1000) - controls how many milliseconds is allowed between matching head-interactions to be considered spam
  • Minor Change: Added comments documenting the addlore setting from 4.6.0 to the default config.yml.
  • "Cross-compatible" version added - this version combines both 1.8 and 1.13 code into a single release, which is meant to natively support either modern or legacy bukkit API in servers as required.  Notes about backports still are relevant when using legacy servers.

Notes: spam prevention settings require either a server restart or a /ph config reload to trigger a change, changing the setting with "set" will not have an immediate effect in this version - this may be handled better in future versions.


  • Added: New localization / configurable message in LORE_PLUGIN_NAME controls the name of the plugin listed on head items.  If this string is empty (ie: zero length, no spaces), then the line will not be added to head items at all.
  • Added: New configuration option: addlore (default: true) - when this is disabled, no lore text at all will be added to new custom heads spawned by the plugin (the empty line normally added before the loretext will also not be added).  By default, and previously, lore text dependant on the plugin name string and LORE_HEAD_* entries was added regardless of any setting.
  • Changed: API changes - many SkullManager and InventoryManager methods now require an addLore flag
  • Changed: API changes - There are now abstract versions of compatibility and version exceptions from the Compatibility package.

Notes: if you change the lore text on heads, this changes the tags for the associated item.  If you are relying on some trading plugin, the changed heads may not match existing heads.  For best results, update all heads in trades to the version you have configured, and instruct players to place-and-mine their heads to update them if they wish to trade them.


  • Changed: Internal reorganizations / changes to compatibility classes.
  • Changed: Backport JAR is now built from a shaded version of the 1.13 plugin jar, which removes the need to duplicate any code between both versions.
  • Future Support Note: Cat heads were added provisionally (to prepare for 1.14) - but their API name, config entries, and lang entries may change depending on the future bukkit implementation - it's important to note that nothing about these heads are final in this version.


  • Fixed: corrected behavior with wither skeleton drops after 4.5.0 to match previous behavior.
  • Added: added more helpful console feedback about version and compatibility errors
  • Added: Lang/localization entries added for the lore text on supported head items ("Player Drop" and "Mob Drop" strings can now be customized with  The entries for these strings are LORE_HEAD_MOB and LORE_HEAD_PLAYER.
  • Changed: when using a backport version for a newer server version, the plugin no longer refuses to load, but warns you that it may not operate properly.  You should still never use the 1.8 backport on a 1.13 server whenever possible.
  • Added: More specific Exceptions for compatibility errors, which may help with debugging logs/issues in the future - or with plugin api usage.
  • Future Support Note: Panda, Pillager, and Illager Beast heads were added provisionally (to prepare for 1.14) - but their API names, config entries, and lang entries may change depending on the future bukkit implementation - it's important to note that nothing about these heads are final in this version.


  • Added/Changed: Introduces a common compatibility layer so that the core behavior code can be the same between 1.13 and 1.8 versions - this enables feature to be more easily rolled out to both versions. This may introduce changes to the plugin API that break compatibility with third-party plugins that rely on it (there aren't many of these anyway right now but I'll update WGTrophyFlags if it needs).
    • The reason for this change is so that I/we can write code and plugin features or fixes that work on both 1.13 and 1.8 without much (or any) backporting work, allowing me to fix or update both versions at the same time without a delay.  Simply put, this reduces the workload, complexity and differences between the plugins going forward.
    • This change does not, however, produce a single JAR that works on both 1.8 and 1.13, that is a much more complicated matter - so for now a main jar for 1.13 and a "backport" jar will continue to be released.
  • No additional bugfixes or features added at this time.
  • Added: (for 1.8 backport build only) Changes were finally added from 4.4.0 as described below since there was not a 4.4.0 backport at the time.


  • Added: Added additional permissions for the /ph rename command*:
    • playerheads.rename.mob - allows the user to rename mob heads into other mob heads
    • playerheads.rename.player - allows the user to rename player heads into other player heads
  • * Backwards-compatibility: playerheads.rename will still permit users to rename any head to any other head as in previous versions.  playerheads.rename.* will now have the same function. The above permissions should be used instead if you want more restrictive behavior.
  • Added: On startup, the plugin now prints the default (internal) and your (environment) locale, so that you can more easily name your lang files correctly. Note: since this message appears before localization is loaded, the message itself is not localized.
  • Added: In the rare case that the internal lang resource cannot be loaded, a warning will be printed to the console, which was previously ignored.  Note: since this is an error in localization, the message itself is not localized.


  • Fixed: Fixed possible NPE when breaking unsupported custom-textured playerheads by ignoring them when they have no owner name.
  • Changed: Unsupported custom-textured playerheads are now ignored when clicking them - they no longer display "That's Unknown's Head" when clickinfo applies.
  • Fixed: (for 1.8 backport) Heads are now properly detected during /ph rename.

 4.3.2 (dev build):

  • Added: Added additional NPE protection to Death-spam preventer [in cases that should not occur].
  • (an alpha build from this version was backported to 1.8)


  • Changed: Decreased JAR footprint
  • Fix: Added NPE protection to sameKiller check during PlayerDeathEvent (when nerfdeathspam is enabled)
  • Added: Added javadoc generation to developer builds (see the CI link on the project page if you want to develop dependent plugins).


  • Fixed: Speculative fix for error during /ph rename without parameter (from 4.2.4-beta development build)
  • Minor internal code reorganizations
  • Added: New configuration option nerfdeathspam (default: false) to alleviate player-death farming for heads.
    • If a player has died recently to the same cause (specific player or any mob), this option prevents the player from being beheaded - until they wait long enough or enough unrelated deaths occur.
    • Currently, "recently" means a matching death within 5 minutes and within 5 other deaths, but if the option is well-received, configuration changing the thresholds may be added later.


Major Update to the PlayerHeads plugin with support for all 1.13+ mobs, introduces more reliable head-texturing support, and expands upon the configurability and consistency of the plugin.


Backwards-compatbility notes:

  • Recognizes older username-based heads and updates them when placed/broken
  • Some configuration changes may be needed since 3.12.13, 3.12 and lower (see below)
  • It is strongly recommended if updating from 3.x to remove your previous configuration/lang files to generate new ones - if you do not wish to do this, read the below changes carefully to know how to modify your files.

Changes in 4.3.0 (since 3.12):

  • Changed: Adds code-shims that replace 1.12 behavior with 1.13-supported behavior
  • Fixed: Fixes several cases where a NullPointerException can occur for unknown heads (since internal patch1)
  • Changed: Corrected configuration and language settings for the Wither boss and Wither Skeleton to match their updated Entity name [Backwards-Incompatible Change]
    • lang entries WITHER changed to WITHER_SKELETON to match entity name
    • lang entries WITHER_BOSS changed to WITHER to match entity name
    • config entry witherdroprate changed to witherskeletondroprate to match entity name
    • config entry witherbossdroprate changed to witherdroprate to match entity name
  • Fixed: Possible NullPointerException when user without `clickinfo` permission interacts with a head.
  • Fixed: Fixed mobhead name resolution when the owner name changes after owner is resolved. (name case changes)
  • Fixed: Changes drop conditions to apply to skeletons properly for updated entity types (since nternal patch2)
  • Fixed: Fixed wither skeleton incorrectly reading drop rates from wither boss' configuration (since internal patch3)
  • Changed: Legacy (username-based) head support has been deprecated, but is still recognized as valid mobheads
  • Added: New (texture-url-based) head support added as default for drops. these should be more maintainable and searchable than the old heads. (since 4.0-alpha)
  • Added: Adds a mob-head drop for every living entity in 1.13 (aside from armor stands and giants)
  • Fixed: Handled several null-head-owner bugs from 3.x
  • Fixed: Corrected spacing in lang file entries that require it.
  • Added: New config option: dropvanillaheads (default: true) - sets whether applicable mobs should drop their associated vanilla head item when killed. If this is false, the mob will drop a skinned playerhead instead. This also affects which head is dropped when breaking a plugin-recognized head. (since 4.1.1-alpha)
  • Added: Lore for plugin-added heads.
  • Added: New config option: convertvanillaheads (default: false) - When false, avoid converting the type of head of when its block is broken. When true (or pre-4.2), the head is automatically converted to vanilla or skinned depending on the state of dropvanillaheads setting. (since 4.2.1-alpha)
    • Setting this to false keeps heads as they were when placed and broken
    • Setting this to true forces items to convert to the desired drop type (vanilla or skinned) when broken.
  • Changed: Behavior for player and mob-head drops now requires canbehead or canbeheadmob permission regardless of the state of pkonly, permitting more specific configuration of the plugin and more consistent permission behavior. You are still able to reproduce the old behavior by ensuring the default permissions group for players has the playerheads.canbehead and playerheads.canbeheadmob permission when you disable pkonly/mobpkonly. [Backwards-Incompatible Change]
  • Added: New spam prevention when players hold down or spam right-click on placed heads. (for users with the playerheads.clickinfo permission).



Posts Quoted:
Clear All Quotes