I was surprised to find no existing villager trade event or a solution to add one. So I'm sharing what I came up with but please feel free to let me know if the Spigot API has some obscure native event for this The event that is fired can be cancelled, accounts for variable pricing, and is -IMO- overall rather awesome (but dang complex and literally took me 3-4 days to put together). To use my solution add a class and paste in the code below then simply create an instance and add a listener for the VillagerTradeListener.VillagerTradeEvent - Enjoy! About this solution This event is made cancellable by tapping into the InventoryClickEvent, which is a point where the action can be canceled. Obviously at the point this event is triggered the trade has not happened yet so I had to basically simulate what would happen when the trade/click action completed. This was rather complicated to say the least and the 1.14+ variable pricing system is not exposed through the bukkit/spigot API - so getting at that data involved a fair bit of research and the use of reflection. As a bonus, I've also included the functionality which can be used to exert control over the variable pricing by setting the "specialPriceDiff" (which is directly added to the base cost of the first input item) and the ability to set the "demand" value. These values should be set in an InventoryOpenEvent handler. NOTICE: This custom event solution was built for 1.15.1 - behavior of older versions of minecraft may (and likely do) differ slightly (e.g. double clicking to stack to cursor is disabled in trade windows in 1.15 but may not be in older versions) so be sure to sanity check things if planning to use this on an older version. AND - please post below with your findings, even if you can't solve the problem you find yourself.