Update bed behavior (#4545)
This commit is contained in:
parent
5176c22656
commit
cb1f0a5af2
@ -71,11 +71,16 @@ bool cBlockBedHandler::OnUse(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sleeping is allowed only during night:
|
// Sleeping is allowed only during night and thunderstorms:
|
||||||
// TODO: Also during thunderstorms
|
if (
|
||||||
if (!((a_WorldInterface.GetTimeOfDay() > 12541) && (a_WorldInterface.GetTimeOfDay() < 23458))) // Source: https://minecraft.gamepedia.com/Bed#Sleeping
|
!(((a_WorldInterface.GetTimeOfDay() > 12541) && (a_WorldInterface.GetTimeOfDay() < 23458)) ||
|
||||||
|
(a_Player.GetWorld()->GetWeather() == wThunderstorm))
|
||||||
|
) // Source: https://minecraft.gamepedia.com/Bed#Sleeping
|
||||||
{
|
{
|
||||||
a_Player.SendMessageFailure("You can only sleep at night");
|
a_Player.SendAboveActionBarMessage("You can only sleep at night and during thunderstorms");
|
||||||
|
|
||||||
|
// Try to set home position anyway:
|
||||||
|
SetBedPos(a_Player, a_BlockPos);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +102,7 @@ bool cBlockBedHandler::OnUse(
|
|||||||
};
|
};
|
||||||
if (!a_Player.GetWorld()->ForEachEntityInBox(cBoundingBox(a_Player.GetPosition() - Vector3i(0, 5, 0), 8, 10), FindMobs))
|
if (!a_Player.GetWorld()->ForEachEntityInBox(cBoundingBox(a_Player.GetPosition() - Vector3i(0, 5, 0), 8, 10), FindMobs))
|
||||||
{
|
{
|
||||||
a_Player.SendMessageFailure("You may not rest now, there are monsters nearby");
|
a_Player.SendAboveActionBarMessage("You may not rest now, there are monsters nearby");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,10 +125,9 @@ bool cBlockBedHandler::OnUse(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Occupy the bed:
|
// Occupy the bed:
|
||||||
a_Player.SetBedPos(a_BlockPos);
|
SetBedPos(a_Player, a_BlockPos);
|
||||||
SetBedOccupationState(a_ChunkInterface, a_Player.GetLastBedPos(), true);
|
SetBedOccupationState(a_ChunkInterface, a_Player.GetLastBedPos(), true);
|
||||||
a_Player.SetIsInBed(true);
|
a_Player.SetIsInBed(true);
|
||||||
a_Player.SendMessageSuccess("Home position set successfully");
|
|
||||||
|
|
||||||
// Fast-forward the time if all players in the world are in their beds:
|
// Fast-forward the time if all players in the world are in their beds:
|
||||||
auto TimeFastForwardTester = [](cPlayer & a_OtherPlayer)
|
auto TimeFastForwardTester = [](cPlayer & a_OtherPlayer)
|
||||||
@ -172,3 +176,16 @@ cItems cBlockBedHandler::ConvertToPickups(NIBBLETYPE a_BlockMeta, cBlockEntity *
|
|||||||
}
|
}
|
||||||
return cItem(E_ITEM_BED, 1, color);
|
return cItem(E_ITEM_BED, 1, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockBedHandler::SetBedPos(cPlayer & a_Player, const Vector3i a_BedPosition)
|
||||||
|
{
|
||||||
|
if (a_Player.GetLastBedPos() != a_BedPosition)
|
||||||
|
{
|
||||||
|
a_Player.SetBedPos(a_BedPosition);
|
||||||
|
a_Player.SendMessageSuccess("Home position set successfully");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -96,6 +96,12 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void SetBedPos(cPlayer & a_Player, const Vector3i a_BedPosition);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override
|
virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override
|
||||||
{
|
{
|
||||||
UNUSED(a_Meta);
|
UNUSED(a_Meta);
|
||||||
|
Loading…
Reference in New Issue
Block a user