Согласно этому:
PHP:
// CraftBukkit 1.12
// net.minecraft.entity.passive.EntityVillager#useRecipe
if (recipe.getRewardsExp())
{
this.world.spawnEntity(new EntityXPOrb(this.world, this.posX, this.posY + 0.5D, this.posZ, i));
}
При каждом использовании рецепта, в случае, если жителю разрешается дропать опыт, то он это делает.
Контроль этого осуществляется с помощью переменой rewardsExp.
org.bukkit.craft*********ventory.CraftMerchantRecipe#setExperienceReward
org.*********ventory.MerchantRecipe#setExperienceReward
(я не знаю почему форум делает звёздачками путь)
Осталось только найти способом принудительно выключать всем жителям дроп опыта.
Сперва я бы попробовал изучить эвенты выше более внимательнее, скорей всего через них может это всё получится, ибо там передаются рецепты торгов по которым можно пробежаться и сделать то, что я описал выше.
Второе, что приходит в голову, так это при взаимодействии с сущностью, проверять является ли это житель и вырубать дроп опыта setExperienceReward(false) для каждого рецепта.
Третье, в чём я менее уверен, и не знаю можно ли это сделать, ибо смотреть лень, так это получение списка всех рецептом и сразу установка им возможности дропа опыта на false, но скорей всего это
Я смотрел версию 1.12, ибо у меня нет под рукой 1.15 а ставить просто так лень да и не за чем, не думаю что там сильно что-то изменилось, хоть и
VillagerCareerChangeEvent отсутствует на 1.12.