aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/EntitySelector.cpp
diff options
context:
space:
mode:
authorLoki Rautio <lokirautio@gmail.com>2026-03-04 03:56:03 -0600
committerLoki Rautio <lokirautio@gmail.com>2026-03-04 03:56:03 -0600
commit42aec6dac53dffa6afe072560a7e1d4986112538 (patch)
tree0836426857391df1b6a83f6368a183f83ec9b104 /Minecraft.World/EntitySelector.cpp
parentc9d58eeac7c72f0b3038e084667b4d89a6249fce (diff)
parentef9b6fd500dfabd9463267b0dd9e29577eea8a2b (diff)
Merge branch 'main' into pr/win64-world-saves
# Conflicts: # Minecraft.Client/MinecraftServer.cpp # README.md
Diffstat (limited to 'Minecraft.World/EntitySelector.cpp')
-rw-r--r--Minecraft.World/EntitySelector.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/Minecraft.World/EntitySelector.cpp b/Minecraft.World/EntitySelector.cpp
new file mode 100644
index 00000000..36c7bf88
--- /dev/null
+++ b/Minecraft.World/EntitySelector.cpp
@@ -0,0 +1,42 @@
+#include "stdafx.h"
+#include "Container.h"
+#include "EntitySelector.h"
+
+const EntitySelector *EntitySelector::ENTITY_STILL_ALIVE = new AliveEntitySelector();
+const EntitySelector *EntitySelector::CONTAINER_ENTITY_SELECTOR = new ContainerEntitySelector();
+
+bool AliveEntitySelector::matches(shared_ptr<Entity> entity) const
+{
+ return entity->isAlive();
+}
+
+bool ContainerEntitySelector::matches(shared_ptr<Entity> entity) const
+{
+ return (dynamic_pointer_cast<Container>(entity) != NULL) && entity->isAlive();
+}
+
+MobCanWearArmourEntitySelector::MobCanWearArmourEntitySelector(shared_ptr<ItemInstance> item)
+{
+ this->item = item;
+}
+
+bool MobCanWearArmourEntitySelector::matches(shared_ptr<Entity> entity) const
+{
+ if ( !entity->isAlive() ) return false;
+ if ( !entity->instanceof(eTYPE_LIVINGENTITY) ) return false;
+
+ shared_ptr<LivingEntity> mob = dynamic_pointer_cast<LivingEntity>(entity);
+
+ if (mob->getCarried(Mob::getEquipmentSlotForItem(item)) != NULL) return false;
+
+ if ( mob->instanceof(eTYPE_MOB) )
+ {
+ return dynamic_pointer_cast<Mob>(mob)->canPickUpLoot();
+ }
+ else if (mob->instanceof(eTYPE_PLAYER))
+ {
+ return true;
+ }
+
+ return false;
+} \ No newline at end of file