#include "EntitySelector.h" #include "java/Class.h" #include "minecraft/world/Container.h" #include "minecraft/world/entity/Entity.h" #include "minecraft/world/entity/LivingEntity.h" #include "minecraft/world/entity/Mob.h" class ItemInstance; const EntitySelector* EntitySelector::ENTITY_STILL_ALIVE = new AliveEntitySelector(); const EntitySelector* EntitySelector::CONTAINER_ENTITY_SELECTOR = new ContainerEntitySelector(); bool AliveEntitySelector::matches(std::shared_ptr entity) const { return entity->isAlive(); } bool ContainerEntitySelector::matches(std::shared_ptr entity) const { return (std::dynamic_pointer_cast(entity) != nullptr) && entity->isAlive(); } MobCanWearArmourEntitySelector::MobCanWearArmourEntitySelector( std::shared_ptr item) { this->item = item; } bool MobCanWearArmourEntitySelector::matches( std::shared_ptr entity) const { if (!entity->isAlive()) return false; if (!entity->instanceof(eTYPE_LIVINGENTITY)) return false; std::shared_ptr mob = std::dynamic_pointer_cast(entity); if (mob->getCarried(Mob::getEquipmentSlotForItem(item)) != nullptr) return false; if (mob->instanceof(eTYPE_MOB)) { return std::dynamic_pointer_cast(mob)->canPickUpLoot(); } else if (mob->instanceof(eTYPE_PLAYER)) { return true; } return false; }