--- a/net/minecraft/server/BehaviorCareer.java +++ b/net/minecraft/server/BehaviorCareer.java @@ -2,6 +2,11 @@ import com.google.common.collect.ImmutableMap; import java.util.Optional; +// CraftBukkit start +import org.bukkit.craftbukkit.entity.CraftVillager; +import org.bukkit.craftbukkit.event.CraftEventFactory; +import org.bukkit.event.entity.VillagerCareerChangeEvent; +// CraftBukkit end public class BehaviorCareer extends Behavior { @@ -19,7 +24,7 @@ GlobalPos globalpos = (GlobalPos) entityvillager.getBehaviorController().getMemory(MemoryModuleType.POTENTIAL_JOB_SITE).get(); entityvillager.getBehaviorController().removeMemory(MemoryModuleType.POTENTIAL_JOB_SITE); - entityvillager.getBehaviorController().setMemory(MemoryModuleType.JOB_SITE, (Object) globalpos); + entityvillager.getBehaviorController().setMemory(MemoryModuleType.JOB_SITE, globalpos); // CraftBukkit - decompile error if (entityvillager.getVillagerData().getProfession() == VillagerProfession.NONE) { MinecraftServer minecraftserver = worldserver.getMinecraftServer(); @@ -30,7 +35,14 @@ return villagerprofession.b() == villageplacetype; }).findFirst(); }).ifPresent((villagerprofession) -> { - entityvillager.setVillagerData(entityvillager.getVillagerData().withProfession(villagerprofession)); + // CraftBukkit start - Fire VillagerCareerChangeEvent where Villager gets employed + VillagerCareerChangeEvent event = CraftEventFactory.callVillagerCareerChangeEvent(entityvillager, CraftVillager.nmsToBukkitProfession(villagerprofession), VillagerCareerChangeEvent.ChangeReason.EMPLOYED); + if (event.isCancelled()) { + return; + } + + entityvillager.setVillagerData(entityvillager.getVillagerData().withProfession(CraftVillager.bukkitToNmsProfession(event.getProfession()))); + // CraftBukkit end entityvillager.b(worldserver); }); }