Revert "Project modernization (#630)"

This code was not tested and breaks in Release builds, reverting to restore
functionality of the nightly. All in-game menus do not work and generating
a world crashes.

This reverts commit a9be52c41a.
This commit is contained in:
Loki Rautio
2026-03-07 21:12:22 -06:00
parent a9be52c41a
commit 087b7e7abf
1373 changed files with 19449 additions and 19903 deletions

View File

@@ -39,7 +39,7 @@ AttributeModifier *LivingEntity::SPEED_MODIFIER_SPRINTING = (new AttributeModifi
void LivingEntity::_init()
{
attributes = nullptr;
attributes = NULL;
combatTracker = new CombatTracker(this);
lastEquipment = ItemInstanceArray(5);
@@ -107,10 +107,10 @@ LivingEntity::LivingEntity( Level* level) : Entity(level)
blocksBuilding = true;
rotA = static_cast<float>(Math::random() + 1) * 0.01f;
rotA = (float) (Math::random() + 1) * 0.01f;
setPos(x, y, z);
timeOffs = static_cast<float>(Math::random()) * 12398;
yRot = static_cast<float>(Math::random() * PI * 2);
timeOffs = (float) Math::random() * 12398;
yRot = (float) (Math::random() * PI * 2);
yHeadRot = yRot;
footSize = 0.5f;
@@ -126,14 +126,14 @@ LivingEntity::~LivingEntity()
delete attributes;
delete combatTracker;
if(lastEquipment.data != nullptr) delete [] lastEquipment.data;
if(lastEquipment.data != NULL) delete [] lastEquipment.data;
}
void LivingEntity::defineSynchedData()
{
entityData->define(DATA_EFFECT_COLOR_ID, 0);
entityData->define(DATA_EFFECT_AMBIENCE_ID, static_cast<byte>(0));
entityData->define(DATA_ARROW_COUNT_ID, static_cast<byte>(0));
entityData->define(DATA_EFFECT_AMBIENCE_ID, (byte) 0);
entityData->define(DATA_ARROW_COUNT_ID, (byte) 0);
entityData->define(DATA_HEALTH_ID, 1.0f);
}
@@ -198,7 +198,7 @@ void LivingEntity::baseTick()
if (isFireImmune() || level->isClientSide) clearFire();
shared_ptr<Player> thisPlayer = dynamic_pointer_cast<Player>(shared_from_this());
bool isInvulnerable = (thisPlayer != nullptr && thisPlayer->abilities.invulnerable);
bool isInvulnerable = (thisPlayer != NULL && thisPlayer->abilities.invulnerable);
if (isAlive() && isUnderLiquid(Material::water))
{
@@ -253,13 +253,13 @@ void LivingEntity::baseTick()
lastHurtByPlayer.reset();
}
}
if (lastHurtMob != nullptr && !lastHurtMob->isAlive())
if (lastHurtMob != NULL && !lastHurtMob->isAlive())
{
lastHurtMob = nullptr;
}
// If lastHurtByMob is dead, remove it
if (lastHurtByMob != nullptr && !lastHurtByMob->isAlive())
if (lastHurtByMob != NULL && !lastHurtByMob->isAlive())
{
setLastHurtByMob(nullptr);
}
@@ -295,7 +295,7 @@ void LivingEntity::tickDeath()
{
int newCount = ExperienceOrb::getExperienceValue(xpCount);
xpCount -= newCount;
level->addEntity(std::make_shared<ExperienceOrb>(level, x, y, z, newCount));
level->addEntity(shared_ptr<ExperienceOrb>( new ExperienceOrb(level, x, y, z, newCount) ) );
}
}
}
@@ -391,17 +391,17 @@ int LivingEntity::getNoActionTime()
void LivingEntity::addAdditonalSaveData(CompoundTag *entityTag)
{
entityTag->putFloat(L"HealF", getHealth());
entityTag->putShort(L"Health", static_cast<short>(ceil(getHealth())));
entityTag->putShort(L"HurtTime", static_cast<short>(hurtTime));
entityTag->putShort(L"DeathTime", static_cast<short>(deathTime));
entityTag->putShort(L"AttackTime", static_cast<short>(attackTime));
entityTag->putShort(L"Health", (short) ceil(getHealth()));
entityTag->putShort(L"HurtTime", (short) hurtTime);
entityTag->putShort(L"DeathTime", (short) deathTime);
entityTag->putShort(L"AttackTime", (short) attackTime);
entityTag->putFloat(L"AbsorptionAmount", getAbsorptionAmount());
ItemInstanceArray items = getEquipmentSlots();
for (unsigned int i = 0; i < items.length; ++i)
{
shared_ptr<ItemInstance> item = items[i];
if (item != nullptr)
if (item != NULL)
{
attributes->removeItemModifiers(item);
}
@@ -412,7 +412,7 @@ void LivingEntity::addAdditonalSaveData(CompoundTag *entityTag)
for (unsigned int i = 0; i < items.length; ++i)
{
shared_ptr<ItemInstance> item = items[i];
if (item != nullptr)
if (item != NULL)
{
attributes->addItemModifiers(item);
}
@@ -435,7 +435,7 @@ void LivingEntity::readAdditionalSaveData(CompoundTag *tag)
{
setAbsorptionAmount(tag->getFloat(L"AbsorptionAmount"));
if (tag->contains(L"Attributes") && level != nullptr && !level->isClientSide)
if (tag->contains(L"Attributes") && level != NULL && !level->isClientSide)
{
SharedMonsterAttributes::loadAttributes(getAttributes(), (ListTag<CompoundTag> *) tag->getList(L"Attributes"));
}
@@ -458,18 +458,18 @@ void LivingEntity::readAdditionalSaveData(CompoundTag *tag)
else
{
Tag *healthTag = tag->get(L"Health");
if (healthTag == nullptr)
if (healthTag == NULL)
{
setHealth(getMaxHealth());
}
else if (healthTag->getId() == Tag::TAG_Float)
{
setHealth(static_cast<FloatTag *>(healthTag)->data);
setHealth(((FloatTag *) healthTag)->data);
}
else if (healthTag->getId() == Tag::TAG_Short)
{
// pre-1.6 health
setHealth((float) static_cast<ShortTag *>(healthTag)->data);
setHealth((float) ((ShortTag *) healthTag)->data);
}
}
@@ -512,7 +512,7 @@ void LivingEntity::tickEffects()
{
if (activeEffects.empty())
{
entityData->set(DATA_EFFECT_AMBIENCE_ID, static_cast<byte>(0));
entityData->set(DATA_EFFECT_AMBIENCE_ID, (byte) 0);
entityData->set(DATA_EFFECT_COLOR_ID, 0);
setInvisible(false);
setWeakened(false);
@@ -525,7 +525,7 @@ void LivingEntity::tickEffects()
values.push_back(it.second);
}
int colorValue = PotionBrewing::getColorValue(&values);
entityData->set(DATA_EFFECT_AMBIENCE_ID, PotionBrewing::areAllEffectsAmbient(&values) ? static_cast<byte>(1) : static_cast<byte>(0));
entityData->set(DATA_EFFECT_AMBIENCE_ID, PotionBrewing::areAllEffectsAmbient(&values) ? (byte) 1 : (byte) 0);
values.clear();
entityData->set(DATA_EFFECT_COLOR_ID, colorValue);
setInvisible(hasEffect(MobEffect::invisibility->id));
@@ -558,9 +558,9 @@ void LivingEntity::tickEffects()
// int colorValue = entityData.getInteger(DATA_EFFECT_COLOR_ID);
if (colorValue > 0)
{
double red = static_cast<double>((colorValue >> 16) & 0xff) / 255.0;
double green = static_cast<double>((colorValue >> 8) & 0xff) / 255.0;
double blue = static_cast<double>((colorValue >> 0) & 0xff) / 255.0;
double red = (double) ((colorValue >> 16) & 0xff) / 255.0;
double green = (double) ((colorValue >> 8) & 0xff) / 255.0;
double blue = (double) ((colorValue >> 0) & 0xff) / 255.0;
level->addParticle(ambient? eParticleType_mobSpellAmbient : eParticleType_mobSpell, x + (random->nextDouble() - 0.5) * bbWidth, y + random->nextDouble() * bbHeight - heightOffset, z + (random->nextDouble() - 0.5) * bbWidth, red, green, blue);
}
@@ -611,7 +611,7 @@ bool LivingEntity::hasEffect(MobEffect *effect)
MobEffectInstance *LivingEntity::getEffect(MobEffect *effect)
{
MobEffectInstance *effectInst = nullptr;
MobEffectInstance *effectInst = NULL;
auto it = activeEffects.find(effect->id);
if(it != activeEffects.end() ) effectInst = it->second;
@@ -685,7 +685,7 @@ void LivingEntity::removeEffectNoUpdate(int effectId)
if (it != activeEffects.end())
{
MobEffectInstance *effect = it->second;
if(effect != nullptr)
if(effect != NULL)
{
delete effect;
}
@@ -699,7 +699,7 @@ void LivingEntity::removeEffect(int effectId)
if (it != activeEffects.end())
{
MobEffectInstance *effect = it->second;
if(effect != nullptr)
if(effect != NULL)
{
onEffectRemoved(effect);
delete effect;
@@ -757,8 +757,8 @@ bool LivingEntity::hurt(DamageSource *source, float dmg)
// Fix for #8823 - Gameplay: Confirmation that a monster or animal has taken damage from an attack is highly delayed
// 4J Stu - Change to the fix to only show damage when attacked, rather than collision damage
// Fix for #10299 - When in corners, passive mobs may show that they are taking damage.
// 4J Stu - Change to the fix for TU6, as source is never nullptr due to changes in 1.8.2 to what source actually is
if (level->isClientSide && dynamic_cast<EntityDamageSource *>(source) == nullptr) return false;
// 4J Stu - Change to the fix for TU6, as source is never NULL due to changes in 1.8.2 to what source actually is
if (level->isClientSide && dynamic_cast<EntityDamageSource *>(source) == NULL) return false;
noActionTime = 0;
if (getHealth() <= 0) return false;
@@ -773,9 +773,9 @@ bool LivingEntity::hurt(DamageSource *source, float dmg)
return false;
}
if ((source == DamageSource::anvil || source == DamageSource::fallingBlock) && getCarried(SLOT_HELM) != nullptr)
if ((source == DamageSource::anvil || source == DamageSource::fallingBlock) && getCarried(SLOT_HELM) != NULL)
{
getCarried(SLOT_HELM)->hurtAndBreak(static_cast<int>(dmg * 4 + random->nextFloat() * dmg * 2.0f), dynamic_pointer_cast<LivingEntity>( shared_from_this() ));
getCarried(SLOT_HELM)->hurtAndBreak((int) (dmg * 4 + random->nextFloat() * dmg * 2.0f), dynamic_pointer_cast<LivingEntity>( shared_from_this() ));
dmg *= 0.75f;
}
@@ -801,7 +801,7 @@ bool LivingEntity::hurt(DamageSource *source, float dmg)
hurtDir = 0;
shared_ptr<Entity> sourceEntity = source->getEntity();
if (sourceEntity != nullptr)
if (sourceEntity != NULL)
{
if ( sourceEntity->instanceof(eTYPE_LIVINGENTITY) )
{
@@ -833,7 +833,7 @@ bool LivingEntity::hurt(DamageSource *source, float dmg)
{
level->broadcastEntityEvent(shared_from_this(), EntityEvent::HURT);
if (source != DamageSource::drown) markHurt();
if (sourceEntity != nullptr)
if (sourceEntity != NULL)
{
double xd = sourceEntity->x - x;
double zd = sourceEntity->z - z;
@@ -842,12 +842,12 @@ bool LivingEntity::hurt(DamageSource *source, float dmg)
xd = (Math::random() - Math::random()) * 0.01;
zd = (Math::random() - Math::random()) * 0.01;
}
hurtDir = static_cast<float>(atan2(zd, xd) * 180 / PI) - yRot;
hurtDir = (float) (atan2(zd, xd) * 180 / PI) - yRot;
knockback(sourceEntity, dmg, xd, zd);
}
else
{
hurtDir = static_cast<float>((int)((Math::random() * 2) * 180)); // 4J This cast is the same as Java
hurtDir = (float) (int) ((Math::random() * 2) * 180); // 4J This cast is the same as Java
}
}
@@ -888,9 +888,9 @@ void LivingEntity::die(DamageSource *source)
{
shared_ptr<Entity> sourceEntity = source->getEntity();
shared_ptr<LivingEntity> killer = getKillCredit();
if (deathScore >= 0 && killer != nullptr) killer->awardKillScore(shared_from_this(), deathScore);
if (deathScore >= 0 && killer != NULL) killer->awardKillScore(shared_from_this(), deathScore);
if (sourceEntity != nullptr) sourceEntity->killed( dynamic_pointer_cast<LivingEntity>( shared_from_this() ) );
if (sourceEntity != NULL) sourceEntity->killed( dynamic_pointer_cast<LivingEntity>( shared_from_this() ) );
dead = true;
@@ -899,7 +899,7 @@ void LivingEntity::die(DamageSource *source)
int playerBonus = 0;
shared_ptr<Player> player = nullptr;
if ( (sourceEntity != nullptr) && sourceEntity->instanceof(eTYPE_PLAYER) )
if ( (sourceEntity != NULL) && sourceEntity->instanceof(eTYPE_PLAYER) )
{
player = dynamic_pointer_cast<Player>(sourceEntity);
playerBonus = EnchantmentHelper::getKillingLootBonus(dynamic_pointer_cast<LivingEntity>(player));
@@ -920,7 +920,7 @@ void LivingEntity::die(DamageSource *source)
}
// 4J-JEV, hook for Durango mobKill event.
if (player != nullptr)
if (player != NULL)
{
player->awardStat(GenericStats::killMob(),GenericStats::param_mobKill(player, dynamic_pointer_cast<Mob>(shared_from_this()), source));
}
@@ -1005,9 +1005,9 @@ void LivingEntity::causeFallDamage(float distance)
{
Entity::causeFallDamage(distance);
MobEffectInstance *jumpBoost = getEffect(MobEffect::jump);
float padding = jumpBoost != nullptr ? jumpBoost->getAmplifier() + 1 : 0;
float padding = jumpBoost != NULL ? jumpBoost->getAmplifier() + 1 : 0;
int dmg = static_cast<int>(ceil(distance - 3 - padding));
int dmg = (int) ceil(distance - 3 - padding);
if (dmg > 0)
{
// 4J - new sounds here brought forward from 1.2.3
@@ -1050,9 +1050,9 @@ int LivingEntity::getArmorValue()
for (unsigned int i = 0; i < items.length; ++i)
{
shared_ptr<ItemInstance> item = items[i];
if (item != nullptr && dynamic_cast<ArmorItem *>(item->getItem()) != nullptr)
if (item != NULL && dynamic_cast<ArmorItem *>(item->getItem()) != NULL)
{
int baseProtection = static_cast<ArmorItem *>(item->getItem())->defense;
int baseProtection = ((ArmorItem *) item->getItem())->defense;
val += baseProtection;
}
}
@@ -1131,15 +1131,15 @@ CombatTracker *LivingEntity::getCombatTracker()
shared_ptr<LivingEntity> LivingEntity::getKillCredit()
{
if (combatTracker->getKiller() != nullptr) return combatTracker->getKiller();
if (lastHurtByPlayer != nullptr) return lastHurtByPlayer;
if (lastHurtByMob != nullptr) return lastHurtByMob;
if (combatTracker->getKiller() != NULL) return combatTracker->getKiller();
if (lastHurtByPlayer != NULL) return lastHurtByPlayer;
if (lastHurtByMob != NULL) return lastHurtByMob;
return nullptr;
}
float LivingEntity::getMaxHealth()
{
return static_cast<float>(getAttribute(SharedMonsterAttributes::MAX_HEALTH)->getValue());
return (float) getAttribute(SharedMonsterAttributes::MAX_HEALTH)->getValue();
}
int LivingEntity::getArrowCount()
@@ -1149,7 +1149,7 @@ int LivingEntity::getArrowCount()
void LivingEntity::setArrowCount(int count)
{
entityData->set(DATA_ARROW_COUNT_ID, static_cast<byte>(count));
entityData->set(DATA_ARROW_COUNT_ID, (byte) count);
}
int LivingEntity::getCurrentSwingDuration()
@@ -1172,9 +1172,9 @@ void LivingEntity::swing()
swingTime = -1;
swinging = true;
if (dynamic_cast<ServerLevel *>(level) != nullptr)
if (dynamic_cast<ServerLevel *>(level) != NULL)
{
static_cast<ServerLevel *>(level)->getTracker()->broadcast(shared_from_this(), std::make_shared<AnimatePacket>(shared_from_this(), AnimatePacket::SWING));
((ServerLevel *) level)->getTracker()->broadcast(shared_from_this(), shared_ptr<AnimatePacket>( new AnimatePacket(shared_from_this(), AnimatePacket::SWING)));
}
}
}
@@ -1240,7 +1240,7 @@ void LivingEntity::updateSwingTime()
swingTime = 0;
}
attackAnim = swingTime / static_cast<float>(currentSwingDuration);
attackAnim = swingTime / (float) currentSwingDuration;
}
AttributeInstance *LivingEntity::getAttribute(Attribute *attribute)
@@ -1250,7 +1250,7 @@ AttributeInstance *LivingEntity::getAttribute(Attribute *attribute)
BaseAttributeMap *LivingEntity::getAttributes()
{
if (attributes == nullptr)
if (attributes == NULL)
{
attributes = new ServersideAttributeMap();
}
@@ -1268,7 +1268,7 @@ void LivingEntity::setSprinting(bool value)
Entity::setSprinting(value);
AttributeInstance *speed = getAttribute(SharedMonsterAttributes::MOVEMENT_SPEED);
if (speed->getModifier(eModifierId_MOB_SPRINTING) != nullptr)
if (speed->getModifier(eModifierId_MOB_SPRINTING) != NULL)
{
speed->removeModifier(eModifierId_MOB_SPRINTING);
}
@@ -1378,7 +1378,7 @@ void LivingEntity::travel(float xa, float ya)
{
#ifdef __PSVITA__
// AP - dynamic_pointer_cast is a non-trivial call
Player *thisPlayer = nullptr;
Player *thisPlayer = NULL;
if( this->instanceof(eTYPE_PLAYER) )
{
thisPlayer = (Player*) this;
@@ -1474,7 +1474,7 @@ void LivingEntity::travel(float xa, float ya)
yd = 0.2;
}
if (!level->isClientSide || (level->hasChunkAt(static_cast<int>(x), 0, static_cast<int>(z)) && level->getChunkAt(static_cast<int>(x), static_cast<int>(z))->loaded))
if (!level->isClientSide || (level->hasChunkAt((int) x, 0, (int) z) && level->getChunkAt((int) x, (int) z)->loaded))
{
yd -= 0.08;
}
@@ -1517,12 +1517,12 @@ int LivingEntity::getLightColor(float a)
for( int yt = ymin; yt <= ymax; yt++ )
for( int zt = zmin; zt <= zmax; zt++ )
{
float tilexmin = static_cast<float>(xt);
float tilexmax = static_cast<float>(xt + 1);
float tileymin = static_cast<float>(yt);
float tileymax = static_cast<float>(yt + 1);
float tilezmin = static_cast<float>(zt);
float tilezmax = static_cast<float>(zt + 1);
float tilexmin = (float)xt;
float tilexmax = (float)(xt+1);
float tileymin = (float)yt;
float tileymax = (float)(yt+1);
float tilezmin = (float)zt;
float tilezmax = (float)(zt+1);
if( tilexmin < bb->x0 ) tilexmin = bb->x0;
if( tilexmax > bb->x1 ) tilexmax = bb->x1;
if( tileymin < bb->y0 ) tileymin = bb->y0;
@@ -1532,14 +1532,14 @@ int LivingEntity::getLightColor(float a)
float tileVol = ( tilexmax - tilexmin ) * ( tileymax - tileymin ) * ( tilezmax - tilezmin );
float frac = tileVol / totVol;
int lc = level->getLightColor(xt, yt, zt, 0);
accum[0] += frac * static_cast<float>(lc & 0xffff);
accum[1] += frac * static_cast<float>(lc >> 16);
accum[0] += frac * (float)( lc & 0xffff );
accum[1] += frac * (float)( lc >> 16 );
}
if( accum[0] > 240.0f ) accum[0] = 240.0f;
if( accum[1] > 240.0f ) accum[1] = 240.0f;
return ( static_cast<int>(accum[1])<<16) | static_cast<int>(accum[0]);
return ( ( (int)accum[1])<<16) | ((int)accum[0]);
}
bool LivingEntity::useNewAi()
@@ -1602,10 +1602,10 @@ void LivingEntity::tick()
if (!ItemInstance::matches(current, previous))
{
static_cast<ServerLevel *>(level)->getTracker()->broadcast(shared_from_this(), std::make_shared<SetEquippedItemPacket>(entityId, i, current));
if (previous != nullptr) attributes->removeItemModifiers(previous);
if (current != nullptr) attributes->addItemModifiers(current);
lastEquipment[i] = current == nullptr ? nullptr : current->copy();
((ServerLevel *) level)->getTracker()->broadcast(shared_from_this(), shared_ptr<SetEquippedItemPacket>( new SetEquippedItemPacket(entityId, i, current)));
if (previous != NULL) attributes->removeItemModifiers(previous);
if (current != NULL) attributes->addItemModifiers(current);
lastEquipment[i] = current == NULL ? nullptr : current->copy();
}
}
}
@@ -1626,7 +1626,7 @@ void LivingEntity::tick()
{
tRun = 1;
walkSpeed = sqrt(sideDist) * 3;
yBodyRotT = (static_cast<float>(atan2(zd, xd)) * 180 / (float) PI - 90);
yBodyRotT = ((float) atan2(zd, xd) * 180 / (float) PI - 90);
}
if (attackAnim > 0)
{
@@ -1698,8 +1698,8 @@ void LivingEntity::aiStep()
double yrd = Mth::wrapDegrees(lyr - yRot);
double xrd = Mth::wrapDegrees(lxr - xRot);
yRot += static_cast<float>((yrd) / lSteps);
xRot += static_cast<float>((xrd) / lSteps);
yRot += (float) ( (yrd) / lSteps );
xRot += (float) ( (xrd) / lSteps );
lSteps--;
setPos(xt, yt, zt);
@@ -1804,7 +1804,7 @@ void LivingEntity::pushEntities()
{
vector<shared_ptr<Entity> > *entities = level->getEntities(shared_from_this(), this->bb->grow(0.2f, 0, 0.2f));
if (entities != nullptr && !entities->empty())
if (entities != NULL && !entities->empty())
{
for (auto& e : *entities)
{
@@ -1857,18 +1857,18 @@ void LivingEntity::take(shared_ptr<Entity> e, int orgCount)
{
if (!e->removed && !level->isClientSide)
{
EntityTracker *entityTracker = static_cast<ServerLevel *>(level)->getTracker();
EntityTracker *entityTracker = ((ServerLevel *) level)->getTracker();
if ( e->instanceof(eTYPE_ITEMENTITY) )
{
entityTracker->broadcast(e, std::make_shared<TakeItemEntityPacket>(e->entityId, entityId));
entityTracker->broadcast(e, shared_ptr<TakeItemEntityPacket>( new TakeItemEntityPacket(e->entityId, entityId)));
}
else if ( e->instanceof(eTYPE_ARROW) )
{
entityTracker->broadcast(e, std::make_shared<TakeItemEntityPacket>(e->entityId, entityId));
entityTracker->broadcast(e, shared_ptr<TakeItemEntityPacket>( new TakeItemEntityPacket(e->entityId, entityId)));
}
else if ( e->instanceof(eTYPE_EXPERIENCEORB) )
{
entityTracker->broadcast(e, std::make_shared<TakeItemEntityPacket>(e->entityId, entityId));
entityTracker->broadcast(e, shared_ptr<TakeItemEntityPacket>( new TakeItemEntityPacket(e->entityId, entityId)));
}
}
}
@@ -1876,7 +1876,7 @@ void LivingEntity::take(shared_ptr<Entity> e, int orgCount)
bool LivingEntity::canSee(shared_ptr<Entity> target)
{
HitResult *hres = level->clip(Vec3::newTemp(x, y + getHeadHeight(), z), Vec3::newTemp(target->x, target->y + target->getHeadHeight(), target->z));
bool retVal = (hres == nullptr);
bool retVal = (hres == NULL);
delete hres;
return retVal;
}
@@ -1984,7 +1984,7 @@ void LivingEntity::setAbsorptionAmount(float absorptionAmount)
Team *LivingEntity::getTeam()
{
return nullptr;
return NULL;
}
bool LivingEntity::isAlliedTo(shared_ptr<LivingEntity> other)
@@ -1994,7 +1994,7 @@ bool LivingEntity::isAlliedTo(shared_ptr<LivingEntity> other)
bool LivingEntity::isAlliedTo(Team *other)
{
if (getTeam() != nullptr)
if (getTeam() != NULL)
{
return getTeam()->isAlliedTo(other);
}