@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) void onEntityInteract(PlayerInteractEntityEvent event) { if (!(event.getRightClicked() instanceof Villager)) return; Villager villager = (Villager) event.getRightClicked(); if (plugin.isShopkeeper(villager)) return; // shopkeeper interaction is handled elsewhere Log.debug("Interaction with Non-shopkeeper villager .."); if (villager.hasMetadata("NPC")) { // ignore any interaction with citizens2 NPCs Log.debug(" ignoring (probably citizens2) NPC"); return; } Player player = event.getPlayer(); if (Settings.disableOtherVillagers) { // don't allow trading with other villagers event.setCancelled(true); if (Settings.hireOtherVillagers) { // allow hiring of other villagers Log.debug(" trade prevented, but possible hire .."); if (this.handleHireOtherVillager(player, villager)) { // hiring was successful -> prevent normal trading Log.debug(" ..success"); } else { } } else { Log.debug(" trade prevented"); } } else if (Settings.hireOtherVillagers) { // allow hiring of other villagers Log.debug(" possible hire .."); if (this.handleHireOtherVillager(player, villager)) { // hiring was successful -> prevent normal trading Log.debug(" ..success (normal trading prevented)"); event.setCancelled(true); } else { // hiring was not successful -> no preventing of normal villager trading Log.debug(" ..failed"); } } }