API Documentation/Example 03: Capturing head drop events & changing drops
Head drop events represent situations when a PlayerHeads-supported head item is being dropped from either a beheading or breaking a block. With the use of a listener, it's possible to capture these events.
As a completely arbitrary example, the following listener prevents all Zombie heads from dropping from beheadings.
ZombieBlockerListener.java:
public class ZombieBlockerListener implements listener{ private HeadType zombie; private PlayerHeadsAPI api; private Plugin yourPlugin; public ZombieBlockerListener(Plugin yourPlugin){ this.yourPlugin = yourPlugin; api = PlayerHeads.getApiInstance(); zombie = api.getHeadOf(EntityType.ZOMBIE); } @EventHandler(ignoreCancelled=true) public void onBehead(LivingEntityDropHeadEvent event){ ItemStack drop = event.getDrop(); if(drop==null) return;//don't process null drops. HeadType type = api.getHeadFrom(drop); if(type.equals(zombie)) event.setCancelled(true); } }
And of course, don't forget to register the listener from your plugin's onEnable method:
getServer().getPluginManager().registerEvents(new ZombieBlockerListener(this), this);
Changing drops (5.2.0+)
Since 5.2.0 the *DropHead events have supported the setDrop(...) method, which lets you easily change the dropped item from your event handler.
Changing drops (5.3 only - not released) 5.3 API rewrites have been tabled at this time
In 5.3 the *DropHead events will support multiple item drops, which can be viewed by accessing or changed by modifying the list returned by the getDrops() method.