package org.bukkit.craftbukkit.entity; import com.google.common.base.Preconditions; import java.util.Locale; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.MinecraftKey; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.monster.EntityZombieVillager; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.util.CraftNamespacedKey; import org.bukkit.entity.Villager; import org.bukkit.entity.ZombieVillager; public class CraftVillagerZombie extends CraftZombie implements ZombieVillager { public CraftVillagerZombie(CraftServer server, EntityZombieVillager entity) { super(server, entity); } @Override public EntityZombieVillager getHandle() { return (EntityZombieVillager) super.getHandle(); } @Override public String toString() { return "CraftVillagerZombie"; } @Override public Villager.Profession getVillagerProfession() { return Villager.Profession.valueOf(BuiltInRegistries.VILLAGER_PROFESSION.getKey(getHandle().getVillagerData().getProfession()).getPath().toUpperCase(Locale.ROOT)); } @Override public void setVillagerProfession(Villager.Profession profession) { Preconditions.checkArgument(profession != null, "Villager.Profession cannot be null"); getHandle().setVillagerData(getHandle().getVillagerData().setProfession(BuiltInRegistries.VILLAGER_PROFESSION.get(new MinecraftKey(profession.name().toLowerCase(Locale.ROOT))))); } @Override public Villager.Type getVillagerType() { return Villager.Type.valueOf(BuiltInRegistries.VILLAGER_TYPE.getKey(getHandle().getVillagerData().getType()).getPath().toUpperCase(Locale.ROOT)); } @Override public void setVillagerType(Villager.Type type) { Preconditions.checkArgument(type != null, "Villager.Type cannot be null"); getHandle().setVillagerData(getHandle().getVillagerData().setType(BuiltInRegistries.VILLAGER_TYPE.get(CraftNamespacedKey.toMinecraft(type.getKey())))); } @Override public boolean isConverting() { return getHandle().isConverting(); } @Override public int getConversionTime() { Preconditions.checkState(isConverting(), "Entity not converting"); return getHandle().villagerConversionTime; } @Override public void setConversionTime(int time) { if (time < 0) { getHandle().villagerConversionTime = -1; getHandle().getEntityData().set(EntityZombieVillager.DATA_CONVERTING_ID, false); getHandle().conversionStarter = null; getHandle().removeEffect(MobEffects.DAMAGE_BOOST, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.CONVERSION); } else { getHandle().startConverting(null, time); } } @Override public OfflinePlayer getConversionPlayer() { return (getHandle().conversionStarter == null) ? null : Bukkit.getOfflinePlayer(getHandle().conversionStarter); } @Override public void setConversionPlayer(OfflinePlayer conversionPlayer) { if (!this.isConverting()) return; getHandle().conversionStarter = (conversionPlayer == null) ? null : conversionPlayer.getUniqueId(); } }