void ScriptMethodsPlayerQuestNamespace::openPlayerQuestRecipe(JNIEnv * env, jobject self, jlong player, jlong recipe)
{
	UNREF(env);
	UNREF(self);

	CreatureObject * playerCreature = NULL;
	if (!JavaLibrary::getObject(player, playerCreature))
	{
		DEBUG_WARNING(true, ("openPlayerQuestRecipe: Failed to get valid creature object with OID %d", player));
		return;
	}

	ServerObject * recipeObj = NULL;
	if (!JavaLibrary::getObject(recipe, recipeObj))
	{
		DEBUG_WARNING(true, ("openPlayerQuestRecipe: Failed to get valid recipe object with OID %d", player));
		return;
	}

	if (playerCreature->isPlayerControlled() && playerCreature->getController() != NULL)
	{
		playerCreature->getController()->appendMessage(
			static_cast<int>(CM_openRecipe),
			0,
			new MessageQueueGenericValueType< NetworkId >( recipeObj->getNetworkId() ),
			GameControllerMessageFlags::SEND |
			GameControllerMessageFlags::RELIABLE |
			GameControllerMessageFlags::DEST_AUTH_CLIENT);
	}

	return;
}
	void setCreatureObjVars (CreatureObject & creature, const Vector & pos_w, float radius)
	{
		const bool isPlayer = creature.isPlayerControlled ();

		creature.setObjVarItem (ObjVars::moveSim,       int(1));
		creature.setObjVarItem (ObjVars::moveSimPlayer, int(isPlayer ? 1 : 0));
		creature.setObjVarItem (ObjVars::moveSimPosX,   pos_w.x);
		creature.setObjVarItem (ObjVars::moveSimPosZ,   pos_w.z);
		creature.setObjVarItem (ObjVars::moveSimRadius, radius);
	}
bool BuildingObject::isAllowed(CreatureObject const &who) const
{
	if (who.getMasterId() != NetworkId::cms_invalid)
	{
		ServerObject const *master = ServerWorld::findObjectByNetworkId(who.getMasterId());
		if (master && master != &who && master->asCreatureObject())
			return isAllowed(*master->asCreatureObject());
	}

	if (!playersWithAlignedEnemyFlagsAllowed() && (Pvp::hasAnyAlignedTimedEnemyFlag(who) || Pvp::hasAnyBountyDuelEnemyFlag(who)))
		return false;

	if (getIsPublic())
		return !CellPermissions::isOnList(m_banned.get(), who);
	else
	{
		// allow non-player-controlled creatures in private buildings with no owner
		if (!who.isPlayerControlled() && getOwnerId() == NetworkId::cms_invalid)
			return true;
		// allow vendor-creatures to be placed in the building
		if (who.hasCondition(static_cast<int>(ServerTangibleObjectTemplate::C_vendor)))
			return true;
		// JU_TODO: test
#if 1
		// allow non-player-controlled creatures in private buildings if the *creature* has no owner
		if (!who.isPlayerControlled() 
			&& who.getMasterId() == NetworkId::cms_invalid 
			&& who.getLevel() < 10 // temp change to < 0 after testing holo item
			)
		{
			return true;
		}
#endif
		// JU_TODO: end test
		return CellPermissions::isOnList(m_allowed.get(), who);
	}
}