1 parent
ebf8ff7869
commit
41599fa82f
67 files changed
+8775
-4
No files matched your search
@@ -0,0 +1,64 @@
|
||||
#pragma once
|
||||
|
||||
// Миниатюрный Mojang для FakeInternet: манифест версий, json версий, client.jar,
|
||||
// библиотеки (в т.ч. натив под текущую ОС), индекс ассетов, сами ассеты и
|
||||
// конфиг логирования. Содержимое крошечное, но устроено как настоящее —
|
||||
// VersionInstaller и GameLauncher работают с ним без поблажек.
|
||||
|
||||
#include "fakeinternet.h"
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QHash>
|
||||
#include <QJsonObject>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
|
||||
class FakeMojang
|
||||
{
|
||||
public:
|
||||
struct VersionSpec
|
||||
{
|
||||
QString id;
|
||||
QString type = QStringLiteral("release");
|
||||
QString inheritsFrom; // непусто — «дочерняя» версия без своих файлов
|
||||
bool legacyAssets = false; // индекс с virtual: true (как у 1.6 и старше)
|
||||
int javaMajor = 17;
|
||||
QString releaseTime = QStringLiteral("2023-06-12T13:25:51+00:00");
|
||||
bool listed = true; // попадает ли в манифест
|
||||
};
|
||||
|
||||
explicit FakeMojang(FakeInternet &net);
|
||||
|
||||
// Публикует версию: json + все файлы, на которые он ссылается.
|
||||
void publish(const VersionSpec &spec);
|
||||
// Переопубликовать манифест (после publish всех версий вызывается автоматически).
|
||||
void routeManifest();
|
||||
|
||||
// Подменить ответ на конкретный файл (по относительному пути внутри .minecraft,
|
||||
// например "libraries/com/mojang/brigadier/1.1.8/brigadier-1.1.8.jar").
|
||||
void overrideFile(const QString &relativePath, const FakeResponse &response);
|
||||
|
||||
// Что должно лечь на диск после установки: относительный путь → содержимое.
|
||||
QHash<QString, QByteArray> expectedFiles(const QString &id) const;
|
||||
// URL json версии и URL конкретного файла.
|
||||
QString versionJsonUrl(const QString &id) const;
|
||||
QString fileUrl(const QString &relativePath) const;
|
||||
QByteArray versionJson(const QString &id) const;
|
||||
|
||||
static QString manifestUrl();
|
||||
|
||||
private:
|
||||
struct File
|
||||
{
|
||||
QString url;
|
||||
QByteArray data;
|
||||
};
|
||||
|
||||
QString addObject(const QString &relativePath, const QByteArray &data);
|
||||
|
||||
FakeInternet &m_net;
|
||||
QList<VersionSpec> m_specs;
|
||||
QHash<QString, QByteArray> m_versionJson; // id → json
|
||||
QHash<QString, QHash<QString, QByteArray>> m_expected; // id → (путь → данные)
|
||||
QHash<QString, File> m_files; // относительный путь → файл
|
||||
};
|
||||
Reference in new issue
Block a user