Changelog (5.x)

[Note: Dev builds are available from a link on the main page - these are not stable or fully tested and are not approved by BukkitDev, be sure to read the attached warning before using.]

 

5.20.4 (in development)

  • Breaking Change: Drop support for Craftbukkit/Spigot-based server versions below 1.19
  • Breaking Change: The plugin and its APIs will use Java 17
  • (planned) Breaking Change: Drop support for NoCheatPlus (old unsupported plugin)
  • (planned) Change: Use the newer PlayerProfile API from Spigot to support head profiles instead of GameProfile directly.

5.20.2 (1.20.2 compatibility)

  • Fix/Breaking Change: Compatibility API methods for setting profiles now must include a username along with the UUID for compatibility with new authlib versons.  (fix for NullPointerException: Profile name must not be null)
    NOTE: This means heads created by PlayerHeads will internally have a username starting with "PlayerHeads:" and followed by an identifier, where before they had no username.
  • Fix: Compatibility methods now check for the correct "name" or "getName" method for compatibility with new authlib versions. (fix for a 'NoSuchMethodError')
  • Known issues: Heads from other plugins may cause an error to appear in the console, with no other side-effects.

5.20.1 (1.20 heads)

  • Adds 1.20 heads (sniffer, camel) [from dev build 5.20.0]
  • Fixes Piglin heads to use the new vanilla piglin head.
  • The PlayerHeads API increased in version to 5.20.1 to force build compatibility, but otherwise remains compatible with 5.2.17.

  • The Compatibility API/Library added the Piglin Head to CompatibleSkullMaterial and the SkullType shim with 5.20.1

5.20.0 (ongoing development)

  • Developer: 1.19 mob heads are no longer marked as provisional/deprecated entries.
  • Plugin version was bumped to track against the major minecraft version going forward for clarity, and also to still allow bugfix versions as the last digit (5.20.1, 5.20.2).  This plugin bump should also remove dependency issues for developers going forward (the highest snapshot version is from a unused "5.3" rewrite).

[Developer note: 5.3 versions are from an unfinished rewrite and are not maintained nor were they ever an official update - they should not be used on a server or in plugin development]

5.2.19 (1.19 heads)

  • Changed: Wolf head texture was changed by request.
  • Added: Provisional heads for 1.19 mobs were added
  • Bugfix: fix for exception while using the new Behead Nearby experimental feature.

5.2.18 (specific use-case changes)

  • Changed: Some interaction checks were moved before head-owner checks so that more right-click info attempts can be ignored sooner.
  • Changed: Default buffer size for clickinfo spam setting was raised to 100 (you will need to edit your config and reload to apply this).
  • Added: [experimental feature] New configuration option added by request: 'broadcastaddnearby'. If this is enabled, when a broadcasted beheading message occurs appears within a range (instead of globally), it will be have a suffix saying ' (nearby)'. If you wish to change the text, you can define the lang.properties entry 'BEHEAD_NEARBY_SUFFIX'

 

5.2.17 (bugfix, minor changes)

  • Minor Bugfix: fix console Nag Warning by updating compatibility and config logging to use standard methods and removed some remaining debug lines
  • Bugfix: Mob head broadcast messages no longer occur when another plugin sets the drop item to null.
  • Bugfix: The combination of using "fixdroppedheads" or "fixbrokenheads" and a 'boring' (blank) steve head should not produce a console error anymore.
  • API Addition: HeadRollEvent:recalculateSuccess() can now take one argument allowing you to control whether modifiers are reapplied (recalculating the effective droprate).
  • API Addition: HeadRollEvent:setCustomModifier() now has an additional argument allowing forcing recalculation immediately.
  • API Change: HeadRollEvent:setEffectiveDropRate was deprecated as a warning that other methods (such as recalculation) tend to overwrite the value.
  • API Addition: new droprate modifier types:
    • SET_CONSTANT - allows setting the droprate to a constant value and erasing the effects of previous modifiers
    • NO_EFFECT - allows adding a modifier without an effect on the droprate. This can be used as a form of recordkeeping or a toggled-off modifier by developers

5.2.16 (preview build 4, permissions changes, minor fixes, API additions)

  • Changed: "alwaysbehead" and "alwaysbeheadmob" permissions are no longer received by default when your permissions are misconfigured or your permissions plugin misbehaves because of the large number of reports of this happening (despite the permission being set to false).  The other issue is that PH cannot determine if you received the permission explicitly or if it was inherited (from * for instance).  Instead, to receive these permissions, in addition to being given the permission you also must enable the "allow-perm-alwaysbehead" or "allow-perm-alwaysbeheadmob" config options which by default block their use.
  • Bugfix: Blaze texture has been updated to reflect newer textures again but still maintain dimensions for GeyserMC (courtesy EvModder of DropHeads).  Future texture dimension updates are still planned for other mobs to increase compatibility with Geyser.
  • Bugfix: A console debug line (which occurred when setting the position/rotation of a head block) has been removed.
  • API addition: HeadRollEvent has been updated to include the changes originally planned for 5.3: Ability to register droprate modifiers with an event, view the list of droprate modifiers, alter them - as well as directly alter effective rate/roll and recalculate success the same way PH does . This should greatly decrease the burden on plugin developers who want to modify the droprates. API will soon be attached and documentation will soon be updated.
  • API change: deprecated all of the constructors for HeadRollEvent except the one without any modifiers as parameters.
  • API change: deprecated all of the get__Modifier methods where __ was an inbuilt modifier like slime,chargedcreeper, lotting.
  • API added/changed: instead of just containing slimeModifier,chargedCreeperModifier, lootingModifier internally - HeadRollEvent now contains a map of named "DropRateModifier" objects which describe their behavior and parameters.  The map is in the format Map<String,DropRateModifier>.  Each modifier is applied in succession to the effective droprate (starting at the original droprate) in the order they are added to the map.
    The internal (raw) name of modifiers is prefixed by the name of the plugin that set it and colon (eg. "MyCoolPlugin:luckmod") except for inbuilt modifiers like looting which have no prefix (eg. "looting").
    TL;DR - Basically this means instead of having 3 official modifiers and leaving you to calculate anything else - you now have a dynamic list of modifiers and you can add your own custom ones to it and other plugins can see them.
  • API added: added DropRateModifier object, which you can use to check or construct your own modifiers by providing the Type of action you want, the Value you want to base the change on, and an additional Level parameter for levelled modifier types.
  • API added: DropRateModifierType, which currently lets you select from:
    - ADD_CONSTANT - add a constant value you define directly to the droprate (level parameter is unused)
    - ADD_MULTIPLE - add amount of droprate multiplied against the value you defined (equivalent to multiplying the droprate against 1 + value, level parameter is unused)
    - ADD_MULTIPLE_PER_LEVEL - add amount of droprate multiplied against the value you defined times the level you defined (equivalent to droprate * (1 + value*level) ).

    - MULTIPLY - multiply the droprate against a constant value you define. (level parameter is unused)
    Obviously, all of these options can be reduced to either ADD_CONSTANT or MULTIPLY, but they should simplify calculations - and may be expanded with more options later.
  • API added: HeadRollEvent:getModifiers() - retrieve the map of modifiers on the head roll**
  • API added: HeadRollEvent:setModifiers(map) - overwrite the map of modifiers on this head roll**  [!]
  • API added: HeadRollEvent:setModifier(name, DropRateModifier) - add or overwrite a raw/builtin modifier on this head roll** [!]
  • API added: HeadRollEvent:getModifier(name) - retrieves a raw/builtin modifier on this head roll [!]
  • API added: HeadRollEvent:getCustomModifierName(pluginName, modifierName) - generates the internal/"raw" name of a custom modifier.
  • API added: HeadRollEvent:getCustomModifier(pluginName,modifierName) - retrieves a custom (plugin-defined) modifier on this head roll
  • API added: HeadRollEvent:getCustomModifier(pluginInstance,modifierName) - retrieves a custom (plugin-defined) modifier on this head roll
  • API added: HeadRollEvent:setCustomModifier(pluginInstance,modifierName) - sets a custom modifier defined by your plugin on this head roll**
  • API added: HeadRollEvent:applyModifiers() - calculates the effect of applying all the present modifiers to the original droprate and stores the result in the effective droprate. * NOTE: this will erase any changes to the effective droprate you have made.
  • API added: HeadRollEvent:applyDropRate() - updates the success value of the event based on the current effective droprate and effective roll.  Success occurs when effectivedroproll < effectivedroprate (ie. the roll fell within the range of the droprate where the roll can be 0.0-1.0)
  • API added: HeadRollEvent:recalculateSuccess() - recalculates the effect of modifiers on the droprate and updates the success value of the event. (equivalent to running both applyModifiers and applyDropRate).  If you are adding or changing modifiers - this should be the method you use to make your changes take effect.
  • API added: HeadRollEvent:setEffectiveDropRoll(double) - change the effective drop roll. This is usually a random value 0.0-1.0 *
  • API added: HeadRollEvent:setEffectiveDropRate(droprate) - change the effective drop rate for this head roll. *

5.2.15 (preview build 3, spawner mob settings)

  • Compatibility-API: added methods for setting temporary and permanent tags on mobs
  • updated Blaze skin to ease issue with GeyserMC
  • added experimental option trackspawnermobs which controls whether mobs that are created by Mob Spawners blocks are tagged for later plugin drop modifications.  (default: false)
  • added experimental option spawnermobbehavior which controls how tagged spawner mobs are handled for drops (requires trackspawnermobs to function) - with the following possible values:
    • vanilla - don't allow PlayerHeads to modify deaths caused by spawner mobs at all
    • ignore - don't consider spawner mobs at all, add PlayerHeads drop chances anyway if applicable (default)
    • block - block all spawner-mob-caused head drops (including vanilla drops)
    • replace - remove vanilla spawner mob caused head drops and add PlayerHeads drop chances instead

5.2.14 (preview build 2)

  • Compatibility-API: Added: CompatibleProfile.isValid(profile) method for determining if a profile is invalid/null.
  • Compatibility-API: Added: hasRequiredFields to CompatibleProfile to determine if the profile is valid or empty.
  • Compatibility-API: Added: "clearProfile" Compatibility API method.
  • Compatibility-API: Added: setblock methods to SkullDetails.
  • Compatibility-API: Added: getFromEntity to SkullType to determine the legacy skulltype of a mob.
  • Compatibility-API: Added: legacyDataValue property to SkullType (explicitly-set value instead of implicit ordinal value)
  • Compatibility-API: Added: canDropInVanilla property to SkullType
  • Compatibility-API: Added: getKillerEntity method to Compatibility Provider.
  • Compatibility-API: Added: isCustomHead methods which check if an ID is set but name is unset (or the name contains a colon (:)).
  • Compatibility-API: Deprecated: Optional Profile API deprecated (use Profile or CompatibleProfile APIs instead)
  • API: Added: getKillerEntity to head drop events.
  • API: Added: vanilla drophead event for detecting and cancelling headdrops from vanilla conditions. (VanillaLivingEntityDropHeadEvent)
  • Added: SetBlock command to allow creating a head block in the world. (note: the rotation may be version dependent - test before using!) Permission: playerheads.setblock
  • Added: 'playerheads.command' permission to allow restricting access to /ph entirely (subcommands could already not be accessed without permission)
  • Changed: Heads from other plugins with a colon (:) in the username will be ignored automatically now.
  • Changed: 'alwaysbehead[mob]' is now also set to false in the wildcard (playerheads.*) permission to further try to prevent this permission being received by accident.
  • Changed: updated piglin brute head to more standard texture
  • Bugfix: considertameowner and considermobkillers now correctly affect all checks on the killer during a beheading, not only initial checks.
  • Bugfix: Syntax error messages now properly use a space instead of a colon in the name
  • Bugfix: profile is now properly retrieved when using 'restoreprofile' with 'fixdroppedheads' (was consided null)

5.2.13 (early preview of 1.17 heads)

  • added: Decorative heads for axolotl, warden, goat, glow-squid.
    These can be spawned with /ph spawn #glowsquid and similar
    Naming and Textures are subject to change, but the UUID will not change - meaning they should be updated to newer heads on stable releases if you have the proper fix- configuration options enabled (fixbrokenheads, fixdroppedheads)
    Note: whether new mobs will drop a head in a future 1.17 spigot version depends whether the assumed naming is the same in that spigot release.  If the spigot naming changes unexpectedly, it will not drop and an update to PlayerHeads will need to be released to add support. You should consider these heads as placeholders or decoration only - or for testing: provide feedback if you find issues with the textures chosen.
  • changed: internal reorganization (1.16 support merged into 1.13, modern api support isolated from craftbukkit provider)
  • changed: internal Compatibility API/Lib additions to make creating heads easier and to provide further abstractions for Profile data.
  • changed: minor API changes (deprecate compatibility provider method)

 

5.2.12

  • bugfix: Spawning a player head with #player while dropvanillaheads is set to false will no longer result in a head named "%1%'s Head".
  • bugfix: Heads for player names ending in "s" now use a new lang entry "HEAD_PLAYER_S" which does not add another s for possessive correctness.
  • bugfix: Spawn message for heads now shows the proper item-name for the head instead of "___'s Head" (eg: #cat's head)
  • added: new configuration option "fixbrokenheads" (default: true) which allows you to disable PH handling for when a head-block is broken.
  • added: new configuration option "restoreprofile" (default: true) which attempts to re-apply the old profile information (name,id,texture) of an old head when it is updated or fixed.  If this is false, new information is generated or resolved. NOTE: this feature should do absolutely nothing on platforms that do not support block profile information (ie: GlowstoneMC).
  • added: Plugin can now also use bukkit-package versioning to determine the server support version as a last resort

 

5.2.11 snapshots

  • changed: Compatibility libraries have been isolated into their own API and Library jar to allow other plugin developers to reuse the backend without PlayerHeads logic. (from 5.2.11 snapshots)

5.2.10

  • added: Provisional Piglin Brute head. This head is subject to change in name and texture and can only be spawned (in 1.8-1.16.1) with the command /ph spawn #piglinbrute
    The mob in future Spigot 1.16.2 will only drop this head if Spigot-API decides to use the current name (PIGLIN_BRUTE). If it changes upon release, the mob will drop no head and an updated plugin version must be released to fix the issue.

5.2.9

  • note: Bukkit/Spigot API has decided to change the type name of PIG_ZOMBIE to ZOMBIFIED_PIGLIN.  To maintain consistency with bukkit, this version will also update references to match the change.
  • bugfix: internal Zombie Pigman heads are translated to the correct version version-specific entitytype in 1.16 (corrects API identifications)
  • bugfix: detection for Zombified Piglins correctly as internal Zombie Pigman. (corrects Zombified Piglins heads not dropping in 5.2.8)
  • changed: Zombified Piglin head has been updated to match the new mob.
  • changed: Zombified Piglin droprate config is now "zombifiedpiglindroprate". You will need to set this if you are migrating from an old config.
  • changed: Zombified Piglin Lang entries have been updated to match the new name.
  • changed: 1.14 support provider moved into 1.13 provider (now 1.13-1.15.2) with version check to reduce redundancy.

NOTE: This build contains changes to the Zombie Pigman head - existing heads will need to be updated (by dropping, or placing and breaking) to match heads spawned by the plugin.

 

API: minor API changes to CompatibilityProvider. Compatible with 5.2.0 API. 
 - added CompatibilityProvider.getEntityTypeFromTypename to retrieve the relevant entity type despite version-specific naming.

 

5.2.8

  • added: Zoglin heads have been provisionally added. (added in second snapshot build - #17 / #1068)
  • bugfix: correctly ignore cancelled bukkit events
  • ease potential conflicts: avoid replacing drops for fixdroppeditems or blockbreak when the head is vanilla unskinned and dropvanillaheads is enabled. PlayerHeads will now opt to do/modify nothing in these specific cases.
  • changed: added another CS-CoreLib head name variant to be ignored in the default config.
  • added: new configuration option pretestblockbreak (default: true).  When enabled, this option maintains the existing behavior (since 3.11) of sending a simulated block-break event while exempt from NPC in order to check for protection. This can now be disabled to ease potential conflicts with head-drop plugins (like Slimefun), however you should check the behavior against your server's protection and anticheat plugins to avoid unwanted problems.

5.2.6, 5.2.7

  • added: provisional head  support for Piglin, Hoglin and Strider.

5.2.5

  • fixed: head ignore lists are now properly cleared between reloads, instead of appended.

5.2.4

  • added: configuration option added in 5.2.3 (ignoredheadnames, ignoredheaduuids) now have their changes applied when the "/ph config reload" command is used and no longer require a server restart.
  • fixed: configuration values (except "behavior" settings) are no longer forced to be lowercase when using "/ph config set ..." which allows setting cased head names.
  • fixed: configuration string lists now properly allow names, uuids to be used as necessary when using "/ph config set ...". Previously the string lists mistakenly required valid material names (as in "requireitems" setting)
  • other: re-added internal package version information in JAR to allow verifying correct package version use and to provide API version to developers in another way.

5.2.3

  • added: configuration option "ignoredheadnames" which is a list of head names that PlayerHeads will avoid modifying, detecting, or otherwise interacting with. Slimefun heads ("CSCoreLib" heads) are now ignored by the plugin by default to avoid breaking custom items from that plugin.  Note: these are case-sensitive to the internal "owner" string.
  • added: configuration option "ignoredheaduuids" which is a list of head uuid strings that PlayerHeads will avoid modifying, detecting, or otherwise interacting with.
    Note: at this time, the reload and config commands do not affect currently blocked heads - this requires a server reload. this will be resolved in a future version.

5.2.1 provisional 1.15 alpha 1

  • modification of 5.2.1 release
  • added:  provisional support for 1.15 Bee mob (subject to change when bukkit support is available).

5.2.1 release

  • changed: Wither skeleton head drops will no longer, by default, remove vanilla drops when a positive droprate is configured. Reminder: this rate does not affect vanilla droprate.
  • added: new configuration option witherskeletonbehavior which can be set to the following values (like chargedcreeperbehavior):
    • ignore - don't consider vanilla head drop for Wither Skeletons s at all and add PlayerHeads rolls anyway (may cause double head drops rarely since both vanilla and plugin head rolls occur).
    • replace - remove vanilla head drops and add PlayerHeads rolls (same affect as a positive droprate in previous versions).
    • vanilla - keep preexisting head drops and do not add any PlayerHeads drops (same as setting the droprate to -1)
    • block - remove all head drops and do not add any (same as setting the droprate to 0 in previous versions)
      NOTE: when chargedcreeperbehavior is set to 'block' or 'vanilla', it supercedes these options (it is applied first).
  • added: new configuration option delaywitherdrop which, if enabled, drops the head for the Wither Boss a configured amount of time after the death. This is done so that skull-explosions don't destroy the head. This option overrides the state of antideathchest for the Wither (as if it was always on).
  • added: new configuration option delaywitherdropms which sets the time in miliseconds to delay the head drop for the Wither boss, if delaying is enabled.

5.2.0

  • API: added setDrop() methods to ___-DropHead events to allow drop item modification
  • API: added getChargedCreeperModifier() method for HeadRollEvent to get the multiplier applied to the droprate of deaths caused by charged creepers.
  • added: added configuration option chargedcreeperbehavior which modifies how PlayerHeads handles Charged Creeper-caused head drops.  This can add to the drops, enforce vanilla behavior, replace the drops with PH-controlled drops, or block these drops.  Removal of drops only considers vanilla head items.  This option requires considermobkillers to be enabled in order to function.
    If considermobkillers is not enabled or this setting is set to "ignore" behavior will function identical to previous versions (PH drops are added if applicable and creeer-caused head drops are not modified).
  • added: added configuration option chargedcreepermodifier which modifies the droprate of the death if it was detected (as above) to be caused by a charged creeper and the previous setting is set to "ignore" or "replace".

5.1.1

  • added: added API method that exposes the CompatibilityProvider to other plugins, this class has a variety of version-compatible operations (like setting owner, texture, etc)
  • added: added API methods for generating the ItemStack of a head for a user.

5.1.0

  • changed: setting any mob droprate to a negative value now causes the plugin to ignore the death event and permits vanilla behavior.  This extends from the behavior of the negative witherskeleton droprate added in 3.12.
  • added: added drop rate modifiers for slimes and magmacubes based on their size. Previously, all sizes of slime received the same droprate. In the configuration file these are numbered 1-4 for the size of slime provided by Bukkit, where 3 does not spawn naturally (corresponding to 0-3 in Minecraft) under the configuration section slimemodifier. The default modifier for each size is 1.0 to maintain behavior of previous versions. These values are multiplied against the base droprate for the mob as follows:Effective Droprate = mobdroprate * slimemodifier * (1 + lootingrate*looting_enchantment_level)

 

5.0.0

Foreword: After more than 6 months since we began support for new textured mobheads and 4 years since the last major release of username-based mobheads plugin, it is now time to say farewell to those legacy heads.

Beginning with version 5, username-based mobheads created by the 3.x plugin will no longer be automatically detected and upgraded into new textured mobheads as they do in version 4.x.

This slightly reduces plugin work, footprint, and fixes the longstanding problem of certain user-heads being abused to obtain mob-heads.

TL;DR - if you have heads created by the 3.x plugin that you still need to support, use version 4.x instead. If you began using the plugin at version 4.x, you can safely update to 5.x.

  • changed: config setting display consolidated into Config class. Simplified/reduced complicated legacy code when changing config settings.
  • changed: boolean config settings now accept "yes","true","1" as a true value [in commands] and others as false, instead of defaulting to true.
  • changed: unknown config value types are displayed as strings with quotations except null, which now shows (unset)
  • fixed: config value display is based on type instead of only "-droprate" values being displayed as doubles.
  • added: new feature to allow requiring an item for beheading, with config settings:  (BukkitDev Request #14)
    • requireitem - (true/false) If true, an item in the 'requireditems' list must be held in the main hand to behead. Disabled by default.
    • requireditems - (list) A lowercase list of Bukkit Materials that permit beheading when held in the main hand, if 'requireitem' is enabled. By default this only includes axes. 
  • added: new feature to allow mobs responsible for deaths to be considered for looting and required items, with config settings:
    • considermobkillers - (true/false) If true, mobs responsible for deaths are identified and checked for looting modifier, requireitem features. Disabled by default.
  • added: new feature to allow tamed wolves to be considered as killing for their owner (like in vanilla), with config settings: (BukkitDev Request #68)
    • considertameowner - (true/false) If true, the owner of a tamed animal is considered to be the killer instead and the death is considered a pk or mobpk by other features. Disabled by default. Requires considermobkillers to be enabled to function since detection of killer-animals must occur.

 

  • bugfix: fixed a longstanding issue where beheading messages are not broadcasted to the correct players when broadcastradius is enabled.
  • bugfix: suppressed exceptions when broadcast destination is in a different dimension (when using broadcastradius)
  • added: added the option to broadcast when a player beheads a mob (note: mob-on-mob beheadings will not be broadcasted) with the following config.yml settings [similar to PVP beheading broadcasts]:
    • broadcastmob: (true/false) enable or disable broadcast of player-on-mob beheadings (default: false)
    • broadcastmobrange: (integer) set a block radius within which to broadcast to players or 0 for unlimited (default: 0)
  • removed: (developer change) Deprecated NCPHook property removed from plugin class.
  • corrected: (developer change) HeadType.equals() corrected to compare Objects
  • added: (developer change) HeadType.toEnum() added to retrieve enum type value without a cast, in an effort to increase backend maintainability.

 

  • tidied: stripped excessive maven/manifest information from Plugin JAR.
  • fixed: ensured PlayerHeads-api JAR contains manifest information.
  • removed: removed support for username-based heads (LegacySkullType)
  • removed: removed all "Legacy" skull methods from core code (which were marked deprecated originally).
  • fixed: users with the ability to spawn a player-head can no longer use certain usernames to obtain the corresponding mobhead.
  • note: this change should not affect server support; 1.8-1.14 are still supported. However, the heads created by plugin versions 3.12 and lower will no longer be detected as mob-heads.

 

Older 4.x changelog is listed here.


Comments

Posts Quoted:
Reply
Clear All Quotes