summaryrefslogtreecommitdiffstats
path: root/src/ClientHandle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ClientHandle.cpp')
-rw-r--r--src/ClientHandle.cpp76
1 files changed, 24 insertions, 52 deletions
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index 93ade0ac4..a0a77f522 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -722,9 +722,10 @@ bool cClientHandle::HandleLogin(const AString & a_Username)
// Let the plugins know about this event, they may refuse the player:
if (cRoot::Get()->GetPluginManager()->CallHookLogin(*this, m_ProtocolVersion, a_Username))
{
- Destroy();
+ SendDisconnect("Login Rejected!");
return false;
}
+
m_State = csAuthenticating;
} // lock(m_CSState)
@@ -1659,9 +1660,9 @@ void cClientHandle::HandleSlotSelected(Int16 a_SlotNum)
void cClientHandle::HandleSpectate(const cUUID & a_PlayerUUID)
{
- m_Player->GetWorld()->DoWithPlayerByUUID(a_PlayerUUID, [=](cPlayer * a_ToSpectate)
+ m_Player->GetWorld()->DoWithPlayerByUUID(a_PlayerUUID, [=](cPlayer & a_ToSpectate)
{
- m_Player->TeleportToEntity(*a_ToSpectate);
+ m_Player->TeleportToEntity(a_ToSpectate);
return true;
});
}
@@ -1733,9 +1734,9 @@ void cClientHandle::HandleUseEntity(UInt32 a_TargetEntityID, bool a_IsLeftClick)
// If the player is a spectator, let him spectate
if (m_Player->IsGameModeSpectator() && a_IsLeftClick)
{
- m_Player->GetWorld()->DoWithEntityByID(a_TargetEntityID, [=](cEntity * a_Entity)
+ m_Player->GetWorld()->DoWithEntityByID(a_TargetEntityID, [=](cEntity & a_Entity)
{
- m_Player->AttachTo(a_Entity);
+ m_Player->AttachTo(&a_Entity);
return true;
});
return;
@@ -1744,20 +1745,18 @@ void cClientHandle::HandleUseEntity(UInt32 a_TargetEntityID, bool a_IsLeftClick)
// If it is a right click, call the entity's OnRightClicked() handler:
if (!a_IsLeftClick)
{
- class cRclkEntity : public cEntityCallback
- {
- cPlayer & m_Player;
- virtual bool Item(cEntity * a_Entity) override
+ cWorld * World = m_Player->GetWorld();
+ World->DoWithEntityByID(a_TargetEntityID, [=](cEntity & a_Entity)
{
if (
- cPluginManager::Get()->CallHookPlayerRightClickingEntity(m_Player, *a_Entity) ||
+ cPluginManager::Get()->CallHookPlayerRightClickingEntity(*m_Player, a_Entity) ||
(
- m_Player.IsGameModeSpectator() && // Spectators cannot interact with every entity
+ m_Player->IsGameModeSpectator() && // Spectators cannot interact with every entity
(
- !a_Entity->IsMinecart() || // They can only interact with minecarts
+ !a_Entity.IsMinecart() || // They can only interact with minecarts
(
- (reinterpret_cast<cMinecart *>(a_Entity)->GetPayload() != cMinecart::mpChest) && // And only if the type matches a minecart with a chest or
- (reinterpret_cast<cMinecart *>(a_Entity)->GetPayload() != cMinecart::mpHopper) // a minecart with a hopper
+ (static_cast<cMinecart &>(a_Entity).GetPayload() != cMinecart::mpChest) && // And only if the type matches a minecart with a chest or
+ (static_cast<cMinecart &>(a_Entity).GetPayload() != cMinecart::mpHopper) // a minecart with a hopper
)
)
)
@@ -1765,52 +1764,34 @@ void cClientHandle::HandleUseEntity(UInt32 a_TargetEntityID, bool a_IsLeftClick)
{
return false;
}
- a_Entity->OnRightClicked(m_Player);
+ a_Entity.OnRightClicked(*m_Player);
return false;
}
- public:
- cRclkEntity(cPlayer & a_Player) : m_Player(a_Player) {}
- } Callback (*m_Player);
-
- cWorld * World = m_Player->GetWorld();
- World->DoWithEntityByID(a_TargetEntityID, Callback);
+ );
return;
}
// If it is a left click, attack the entity:
- class cDamageEntity : public cEntityCallback
- {
- public:
- cPlayer * m_Me;
-
- cDamageEntity(cPlayer * a_Player) :
- m_Me(a_Player)
+ m_Player->GetWorld()->DoWithEntityByID(a_TargetEntityID, [=](cEntity & a_Entity)
{
- }
-
- virtual bool Item(cEntity * a_Entity) override
- {
- if (!a_Entity->GetWorld()->IsPVPEnabled())
+ if (!a_Entity.GetWorld()->IsPVPEnabled())
{
// PVP is disabled, disallow players hurting other players:
- if (a_Entity->IsPlayer())
+ if (a_Entity.IsPlayer())
{
// Player is hurting another player which is not allowed when PVP is disabled so ignore it
return true;
}
}
- a_Entity->TakeDamage(*m_Me);
- m_Me->AddFoodExhaustion(0.3);
- if (a_Entity->IsPawn())
+ a_Entity.TakeDamage(*m_Player);
+ m_Player->AddFoodExhaustion(0.3);
+ if (a_Entity.IsPawn())
{
- m_Me->NotifyNearbyWolves(static_cast<cPawn*>(a_Entity), true);
+ m_Player->NotifyNearbyWolves(static_cast<cPawn*>(&a_Entity), true);
}
return true;
}
- } Callback(m_Player);
-
- cWorld * World = m_Player->GetWorld();
- World->DoWithEntityByID(a_TargetEntityID, Callback);
+ );
}
@@ -1859,17 +1840,8 @@ bool cClientHandle::CheckMultiLogin(const AString & a_Username)
return false;
}
- class cCallback :
- public cPlayerListCallback
- {
- virtual bool Item(cPlayer * a_Player) override
- {
- return true;
- }
- } Callback;
-
// Check if the player is in any World.
- if (cRoot::Get()->DoWithPlayer(a_Username, Callback))
+ if (cRoot::Get()->DoWithPlayer(a_Username, [](cPlayer &) { return true; }))
{
Kick("A player of the username is already logged in");
return false;