Merge remote-tracking branch 'upstream/develop' into develop
Signed-off-by: sneedium <sneed@sneedmc.org>
This commit is contained in:
commit
f30cfcd6a5
12
flake.lock
12
flake.lock
@ -34,11 +34,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1712129508,
|
"lastModified": 1722141560,
|
||||||
"narHash": "sha256-FBVpEX0eLiqX3jnSL3rmJHqHhbuCikJZyDyV3Cl3qAY=",
|
"narHash": "sha256-Ul3rIdesWaiW56PS/Ak3UlJdkwBrD4UcagCmXZR9Z7Y=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "d03a4482228d4d6dbd2d4b425b6dfcd49ebe765f",
|
"rev": "038fb464fcfa79b4f08131b07f2d8c9a6bcc4160",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@ -59,11 +59,11 @@
|
|||||||
"tomlplusplus": {
|
"tomlplusplus": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1710824845,
|
"lastModified": 1720775063,
|
||||||
"narHash": "sha256-A9XuCfVcLle/tMNaH7aqb1leM+t3wwC9ER5RIbMMovo=",
|
"narHash": "sha256-9j8qNCITFPvKECY5Sjb2Ri5KcPzRrF0e7G2CUemIhBw=",
|
||||||
"owner": "marzer",
|
"owner": "marzer",
|
||||||
"repo": "tomlplusplus",
|
"repo": "tomlplusplus",
|
||||||
"rev": "1f7884e59165e517462f922e7b6de131bd9844f3",
|
"rev": "e2bae9d559b4956a831fcef10ac8f01c88cb0d13",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -60,6 +60,7 @@
|
|||||||
|
|
||||||
static const QMap<QString, ModAPI::ModLoaderType> modloaderMapping{
|
static const QMap<QString, ModAPI::ModLoaderType> modloaderMapping{
|
||||||
{"net.minecraftforge", ModAPI::Forge},
|
{"net.minecraftforge", ModAPI::Forge},
|
||||||
|
{"net.neoforged.neoforge", ModAPI::NeoForge},
|
||||||
{"net.fabricmc.fabric-loader", ModAPI::Fabric},
|
{"net.fabricmc.fabric-loader", ModAPI::Fabric},
|
||||||
{"org.quiltmc.quilt-loader", ModAPI::Quilt}
|
{"org.quiltmc.quilt-loader", ModAPI::Quilt}
|
||||||
};
|
};
|
||||||
|
@ -297,7 +297,7 @@ void LocalModParseTask::processAsZip()
|
|||||||
|
|
||||||
QuaZipFile file(&zip);
|
QuaZipFile file(&zip);
|
||||||
|
|
||||||
if (zip.setCurrentFile("META-INF/mods.toml")) {
|
if (zip.setCurrentFile("META-INF/neoforge.mods.toml") || zip.setCurrentFile("META-INF/mods.toml")) {
|
||||||
if (!file.open(QIODevice::ReadOnly)) {
|
if (!file.open(QIODevice::ReadOnly)) {
|
||||||
zip.close();
|
zip.close();
|
||||||
return;
|
return;
|
||||||
|
@ -60,7 +60,8 @@ class ModAPI {
|
|||||||
Cauldron = 1 << 1,
|
Cauldron = 1 << 1,
|
||||||
LiteLoader = 1 << 2,
|
LiteLoader = 1 << 2,
|
||||||
Fabric = 1 << 3,
|
Fabric = 1 << 3,
|
||||||
Quilt = 1 << 4
|
Quilt = 1 << 4,
|
||||||
|
NeoForge = 1 << 5
|
||||||
};
|
};
|
||||||
Q_DECLARE_FLAGS(ModLoaderTypes, ModLoaderType)
|
Q_DECLARE_FLAGS(ModLoaderTypes, ModLoaderType)
|
||||||
|
|
||||||
@ -93,6 +94,8 @@ class ModAPI {
|
|||||||
break;
|
break;
|
||||||
case Forge:
|
case Forge:
|
||||||
return "forge";
|
return "forge";
|
||||||
|
case NeoForge:
|
||||||
|
return "neoforge";
|
||||||
case Cauldron:
|
case Cauldron:
|
||||||
return "cauldron";
|
return "cauldron";
|
||||||
case LiteLoader:
|
case LiteLoader:
|
||||||
|
@ -79,6 +79,8 @@ class FlameAPI : public NetworkModAPI {
|
|||||||
// TODO: remove this once Quilt drops official Fabric support
|
// TODO: remove this once Quilt drops official Fabric support
|
||||||
if (loaders & Quilt) // NOTE: Most if not all Fabric mods should work *currently*
|
if (loaders & Quilt) // NOTE: Most if not all Fabric mods should work *currently*
|
||||||
return 4; // Quilt would probably be 5
|
return 4; // Quilt would probably be 5
|
||||||
|
if (loaders & NeoForge)
|
||||||
|
return 6;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -257,6 +257,7 @@ bool FlameCreationTask::createInstance()
|
|||||||
|
|
||||||
QString forgeVersion;
|
QString forgeVersion;
|
||||||
QString fabricVersion;
|
QString fabricVersion;
|
||||||
|
QString neoforgeVersion;
|
||||||
// TODO: is Quilt relevant here?
|
// TODO: is Quilt relevant here?
|
||||||
for (auto& loader : m_pack.minecraft.modLoaders) {
|
for (auto& loader : m_pack.minecraft.modLoaders) {
|
||||||
auto id = loader.id;
|
auto id = loader.id;
|
||||||
@ -270,6 +271,11 @@ bool FlameCreationTask::createInstance()
|
|||||||
fabricVersion = id;
|
fabricVersion = id;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (id.startsWith("neoforge-")) {
|
||||||
|
id.remove("neoforge-");
|
||||||
|
neoforgeVersion = id;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
logWarning(tr("Unknown mod loader in manifest: %1").arg(id));
|
logWarning(tr("Unknown mod loader in manifest: %1").arg(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,6 +306,8 @@ bool FlameCreationTask::createInstance()
|
|||||||
}
|
}
|
||||||
if (!fabricVersion.isEmpty())
|
if (!fabricVersion.isEmpty())
|
||||||
components->setComponentVersion("net.fabricmc.fabric-loader", fabricVersion);
|
components->setComponentVersion("net.fabricmc.fabric-loader", fabricVersion);
|
||||||
|
if (!neoforgeVersion.isEmpty())
|
||||||
|
components->setComponentVersion("net.neoforged.neoforge", neoforgeVersion);
|
||||||
|
|
||||||
if (m_instIcon != "default") {
|
if (m_instIcon != "default") {
|
||||||
instance.setIconKey(m_instIcon);
|
instance.setIconKey(m_instIcon);
|
||||||
|
@ -313,6 +313,8 @@ void PackInstallTask::install()
|
|||||||
components->setComponentVersion("net.minecraftforge", target.version);
|
components->setComponentVersion("net.minecraftforge", target.version);
|
||||||
} else if (target.name == "fabric") {
|
} else if (target.name == "fabric") {
|
||||||
components->setComponentVersion("net.fabricmc.fabric-loader", target.version);
|
components->setComponentVersion("net.fabricmc.fabric-loader", target.version);
|
||||||
|
} else if (target.name == "neoforge") {
|
||||||
|
components->setComponentVersion("net.neoforged.neoforge", target.version);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ class ModrinthAPI : public NetworkModAPI {
|
|||||||
static auto getModLoaderStrings(const ModLoaderTypes types) -> const QStringList
|
static auto getModLoaderStrings(const ModLoaderTypes types) -> const QStringList
|
||||||
{
|
{
|
||||||
QStringList l;
|
QStringList l;
|
||||||
for (auto loader : {Forge, Fabric, Quilt})
|
for (auto loader : {Forge, NeoForge, Fabric, Quilt})
|
||||||
{
|
{
|
||||||
if ((types & loader) || types == Unspecified)
|
if ((types & loader) || types == Unspecified)
|
||||||
{
|
{
|
||||||
@ -81,7 +81,7 @@ class ModrinthAPI : public NetworkModAPI {
|
|||||||
inline auto getModSearchURL(SearchArgs& args) const -> QString override
|
inline auto getModSearchURL(SearchArgs& args) const -> QString override
|
||||||
{
|
{
|
||||||
if (!validateModLoaders(args.loaders)) {
|
if (!validateModLoaders(args.loaders)) {
|
||||||
qWarning() << "Modrinth only have Forge and Fabric-compatible mods!";
|
qWarning() << "Modrinth only have Forge, NeoForge and Fabric-compatible mods!";
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ class ModrinthAPI : public NetworkModAPI {
|
|||||||
|
|
||||||
inline auto validateModLoaders(ModLoaderTypes loaders) const -> bool
|
inline auto validateModLoaders(ModLoaderTypes loaders) const -> bool
|
||||||
{
|
{
|
||||||
return (loaders == Unspecified) || (loaders & (Forge | Fabric | Quilt));
|
return (loaders == Unspecified) || (loaders & (Forge | NeoForge | Fabric | Quilt));
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -108,7 +108,7 @@ void ModrinthCheckUpdate::executeTask()
|
|||||||
// Sometimes a version may have multiple files, one with "forge" and one with "fabric",
|
// Sometimes a version may have multiple files, one with "forge" and one with "fabric",
|
||||||
// so we may want to filter it
|
// so we may want to filter it
|
||||||
QString loader_filter;
|
QString loader_filter;
|
||||||
static auto flags = { ModAPI::ModLoaderType::Forge, ModAPI::ModLoaderType::Fabric, ModAPI::ModLoaderType::Quilt };
|
static auto flags = { ModAPI::ModLoaderType::Forge, ModAPI::ModLoaderType::NeoForge, ModAPI::ModLoaderType::Fabric, ModAPI::ModLoaderType::Quilt };
|
||||||
for (auto flag : flags) {
|
for (auto flag : flags) {
|
||||||
if (m_loaders.testFlag(flag)) {
|
if (m_loaders.testFlag(flag)) {
|
||||||
loader_filter = api.getModLoaderString(flag);
|
loader_filter = api.getModLoaderString(flag);
|
||||||
|
@ -215,6 +215,8 @@ bool ModrinthCreationTask::createInstance()
|
|||||||
components->setComponentVersion("org.quiltmc.quilt-loader", quiltVersion);
|
components->setComponentVersion("org.quiltmc.quilt-loader", quiltVersion);
|
||||||
if (!forgeVersion.isEmpty())
|
if (!forgeVersion.isEmpty())
|
||||||
components->setComponentVersion("net.minecraftforge", forgeVersion);
|
components->setComponentVersion("net.minecraftforge", forgeVersion);
|
||||||
|
if (!neoforgeVersion.isEmpty())
|
||||||
|
components->setComponentVersion("net.neoforged.neoforge", neoforgeVersion);
|
||||||
|
|
||||||
if (m_instIcon != "default") {
|
if (m_instIcon != "default") {
|
||||||
instance.setIconKey(m_instIcon);
|
instance.setIconKey(m_instIcon);
|
||||||
@ -385,6 +387,8 @@ bool ModrinthCreationTask::parseManifest(const QString& index_path, std::vector<
|
|||||||
quiltVersion = Json::requireString(*it, "Quilt Loader version");
|
quiltVersion = Json::requireString(*it, "Quilt Loader version");
|
||||||
} else if (name == "forge") {
|
} else if (name == "forge") {
|
||||||
forgeVersion = Json::requireString(*it, "Forge version");
|
forgeVersion = Json::requireString(*it, "Forge version");
|
||||||
|
} else if (name == "neoforge") {
|
||||||
|
neoforgeVersion = Json::requireString(*it, "NeoForge version");
|
||||||
} else {
|
} else {
|
||||||
throw JSONValidationError("Unknown dependency type: " + name);
|
throw JSONValidationError("Unknown dependency type: " + name);
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ class ModrinthCreationTask final : public InstanceCreationTask {
|
|||||||
private:
|
private:
|
||||||
QWidget* m_parent = nullptr;
|
QWidget* m_parent = nullptr;
|
||||||
|
|
||||||
QString minecraftVersion, fabricVersion, quiltVersion, forgeVersion;
|
QString minecraftVersion, fabricVersion, quiltVersion, forgeVersion, neoforgeVersion;
|
||||||
QString m_managed_id, m_managed_version_id, m_managed_name;
|
QString m_managed_id, m_managed_version_id, m_managed_name;
|
||||||
QString m_source_url;
|
QString m_source_url;
|
||||||
|
|
||||||
|
@ -240,6 +240,9 @@ void VersionPage::updateVersionControls()
|
|||||||
|
|
||||||
ui->actionInstall_Forge->setEnabled(controlsEnabled);
|
ui->actionInstall_Forge->setEnabled(controlsEnabled);
|
||||||
|
|
||||||
|
bool supportsNeoForge = minecraftVersion >= Version("1.20.1");
|
||||||
|
ui->actionInstall_NeoForge->setEnabled(controlsEnabled && supportsNeoForge);
|
||||||
|
|
||||||
bool supportsFabric = minecraftVersion >= Version("1.14");
|
bool supportsFabric = minecraftVersion >= Version("1.14");
|
||||||
ui->actionInstall_Fabric->setEnabled(controlsEnabled && supportsFabric);
|
ui->actionInstall_Fabric->setEnabled(controlsEnabled && supportsFabric);
|
||||||
|
|
||||||
@ -464,6 +467,35 @@ void VersionPage::on_actionInstall_Forge_triggered()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VersionPage::on_actionInstall_NeoForge_triggered()
|
||||||
|
{
|
||||||
|
auto vlist = APPLICATION->metadataIndex()->get("net.neoforged.neoforge");
|
||||||
|
if(!vlist)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
VersionSelectDialog vselect(vlist.get(), tr("Select NeoForge version"), this);
|
||||||
|
vselect.setExactFilter(BaseVersionList::ParentVersionRole, m_profile->getComponentVersion("net.minecraft"));
|
||||||
|
vselect.setEmptyString(tr("No NeoForge versions are currently available for Minecraft ") + m_profile->getComponentVersion("net.minecraft"));
|
||||||
|
vselect.setEmptyErrorString(tr("Couldn't load or download the NeoForge version lists!"));
|
||||||
|
|
||||||
|
auto currentVersion = m_profile->getComponentVersion("net.neoforged.neoforge");
|
||||||
|
if(!currentVersion.isEmpty())
|
||||||
|
{
|
||||||
|
vselect.setCurrentVersion(currentVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vselect.exec() && vselect.selectedVersion())
|
||||||
|
{
|
||||||
|
auto vsn = vselect.selectedVersion();
|
||||||
|
m_profile->setComponentVersion("net.neoforged.neoforge", vsn->descriptor());
|
||||||
|
m_profile->resolve(Net::Mode::Online);
|
||||||
|
// m_profile->installVersion();
|
||||||
|
preselect(m_profile->rowCount(QModelIndex())-1);
|
||||||
|
m_container->refreshContainer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void VersionPage::on_actionInstall_Fabric_triggered()
|
void VersionPage::on_actionInstall_Fabric_triggered()
|
||||||
{
|
{
|
||||||
auto vlist = APPLICATION->metadataIndex()->get("net.fabricmc.fabric-loader");
|
auto vlist = APPLICATION->metadataIndex()->get("net.fabricmc.fabric-loader");
|
||||||
|
@ -72,6 +72,7 @@ public:
|
|||||||
private slots:
|
private slots:
|
||||||
void on_actionChange_version_triggered();
|
void on_actionChange_version_triggered();
|
||||||
void on_actionInstall_Forge_triggered();
|
void on_actionInstall_Forge_triggered();
|
||||||
|
void on_actionInstall_NeoForge_triggered();
|
||||||
void on_actionInstall_Fabric_triggered();
|
void on_actionInstall_Fabric_triggered();
|
||||||
void on_actionInstall_Quilt_triggered();
|
void on_actionInstall_Quilt_triggered();
|
||||||
void on_actionAdd_Empty_triggered();
|
void on_actionAdd_Empty_triggered();
|
||||||
|
@ -106,6 +106,7 @@
|
|||||||
<addaction name="actionRevert"/>
|
<addaction name="actionRevert"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionInstall_Forge"/>
|
<addaction name="actionInstall_Forge"/>
|
||||||
|
<addaction name="actionInstall_NeoForge"/>
|
||||||
<addaction name="actionInstall_Fabric"/>
|
<addaction name="actionInstall_Fabric"/>
|
||||||
<addaction name="actionInstall_Quilt"/>
|
<addaction name="actionInstall_Quilt"/>
|
||||||
<addaction name="actionInstall_LiteLoader"/>
|
<addaction name="actionInstall_LiteLoader"/>
|
||||||
@ -185,6 +186,14 @@
|
|||||||
<string>Install the Minecraft Forge package.</string>
|
<string>Install the Minecraft Forge package.</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionInstall_NeoForge">
|
||||||
|
<property name="text">
|
||||||
|
<string>Install NeoForge</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Install the NeoForge package.</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
<action name="actionInstall_Fabric">
|
<action name="actionInstall_Fabric">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Install Fabric</string>
|
<string>Install Fabric</string>
|
||||||
|
@ -64,6 +64,7 @@ VanillaPage::VanillaPage(NewInstanceDialog *dialog, QWidget *parent)
|
|||||||
connect(ui->loaderVersionList, &VersionSelectWidget::selectedVersionChanged, this, &VanillaPage::setSelectedLoaderVersion);
|
connect(ui->loaderVersionList, &VersionSelectWidget::selectedVersionChanged, this, &VanillaPage::setSelectedLoaderVersion);
|
||||||
connect(ui->noneFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
connect(ui->noneFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
||||||
connect(ui->forgeFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
connect(ui->forgeFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
||||||
|
connect(ui->neoForgeFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
||||||
connect(ui->fabricFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
connect(ui->fabricFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
||||||
connect(ui->quiltFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
connect(ui->quiltFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
||||||
connect(ui->liteLoaderFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
connect(ui->liteLoaderFilter, &QRadioButton::toggled, this, &VanillaPage::loaderFilterChanged);
|
||||||
@ -142,6 +143,11 @@ void VanillaPage::loaderFilterChanged()
|
|||||||
ui->loaderVersionList->setExactFilter(BaseVersionList::ParentVersionRole, minecraftVersion);
|
ui->loaderVersionList->setExactFilter(BaseVersionList::ParentVersionRole, minecraftVersion);
|
||||||
m_selectedLoader = "net.minecraftforge";
|
m_selectedLoader = "net.minecraftforge";
|
||||||
}
|
}
|
||||||
|
else if(ui->neoForgeFilter->isChecked())
|
||||||
|
{
|
||||||
|
ui->loaderVersionList->setExactFilter(BaseVersionList::ParentVersionRole, minecraftVersion);
|
||||||
|
m_selectedLoader = "net.neoforged.neoforge";
|
||||||
|
}
|
||||||
else if(ui->fabricFilter->isChecked())
|
else if(ui->fabricFilter->isChecked())
|
||||||
{
|
{
|
||||||
// FIXME: dirty hack because the launcher is unaware of Fabric's dependencies
|
// FIXME: dirty hack because the launcher is unaware of Fabric's dependencies
|
||||||
|
@ -204,6 +204,16 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="neoForgeFilter">
|
||||||
|
<property name="text">
|
||||||
|
<string>NeoForge</string>
|
||||||
|
</property>
|
||||||
|
<attribute name="buttonGroup">
|
||||||
|
<string notr="true">loaderBtnGroup</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QRadioButton" name="fabricFilter">
|
<widget class="QRadioButton" name="fabricFilter">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
84
nix/default.nix
Normal file
84
nix/default.nix
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
{ stdenv
|
||||||
|
, lib
|
||||||
|
, symlinkJoin
|
||||||
|
, addOpenGLRunpath
|
||||||
|
, polymc-unwrapped
|
||||||
|
, wrapQtAppsHook
|
||||||
|
, jdk8
|
||||||
|
, jdk17
|
||||||
|
, jdk21
|
||||||
|
, xorg
|
||||||
|
, gamemode
|
||||||
|
, glxinfo
|
||||||
|
, libpulseaudio
|
||||||
|
, qtbase
|
||||||
|
, libGL
|
||||||
|
, glfw
|
||||||
|
, openal
|
||||||
|
, udev
|
||||||
|
, wayland
|
||||||
|
, qtwayland
|
||||||
|
, msaClientID ? ""
|
||||||
|
, jdks ? [ jdk21 jdk17 jdk8 ]
|
||||||
|
, enableLTO ? false
|
||||||
|
, gamemodeSupport ? stdenv.isLinux
|
||||||
|
, additionalLibs ? [ ]
|
||||||
|
, additionalBins ? [ ]
|
||||||
|
, self
|
||||||
|
, version
|
||||||
|
# flake
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
polymcInner = polymc-unwrapped.override { inherit msaClientID enableLTO gamemodeSupport; };
|
||||||
|
in
|
||||||
|
|
||||||
|
symlinkJoin {
|
||||||
|
name = "polymc";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
paths = [ polymcInner ];
|
||||||
|
|
||||||
|
nativeBuildInputs = [ wrapQtAppsHook ];
|
||||||
|
buildInputs = [ qtbase qtwayland ];
|
||||||
|
|
||||||
|
postBuild = ''
|
||||||
|
wrapQtAppsHook
|
||||||
|
'';
|
||||||
|
|
||||||
|
qtWrapperArgs =
|
||||||
|
let
|
||||||
|
runtimeLibs = (with xorg; [
|
||||||
|
libX11
|
||||||
|
libXext
|
||||||
|
libXcursor
|
||||||
|
libXrandr
|
||||||
|
libXxf86vm
|
||||||
|
]) ++
|
||||||
|
# lwjgl
|
||||||
|
[
|
||||||
|
libpulseaudio
|
||||||
|
libGL
|
||||||
|
glfw
|
||||||
|
openal
|
||||||
|
stdenv.cc.cc.lib
|
||||||
|
udev # OSHI
|
||||||
|
wayland
|
||||||
|
]
|
||||||
|
++ lib.optional gamemodeSupport gamemode.lib
|
||||||
|
++ additionalLibs;
|
||||||
|
|
||||||
|
runtimeBins = [
|
||||||
|
# Required by old LWJGL versions
|
||||||
|
xorg.xrandr
|
||||||
|
glxinfo
|
||||||
|
] ++ additionalBins;
|
||||||
|
in
|
||||||
|
[
|
||||||
|
"--prefix POLYMC_JAVA_PATHS : ${lib.makeSearchPath "bin/java" jdks}"
|
||||||
|
"--set LD_LIBRARY_PATH ${addOpenGLRunpath.driverLink}/lib:${lib.makeLibraryPath runtimeLibs}"
|
||||||
|
"--prefix PATH : ${lib.makeBinPath runtimeBins}"
|
||||||
|
];
|
||||||
|
|
||||||
|
inherit (polymcInner) meta;
|
||||||
|
}
|
73
nix/unwrapped.nix
Normal file
73
nix/unwrapped.nix
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
{ stdenv
|
||||||
|
, lib
|
||||||
|
, cmake
|
||||||
|
, ninja
|
||||||
|
, jdk8
|
||||||
|
, gamemode
|
||||||
|
, ghc_filesystem
|
||||||
|
, zlib
|
||||||
|
, file
|
||||||
|
, qtbase
|
||||||
|
, quazip
|
||||||
|
, extra-cmake-modules
|
||||||
|
, qtcharts
|
||||||
|
, qtwayland
|
||||||
|
# flake
|
||||||
|
, self
|
||||||
|
, version
|
||||||
|
, libnbtplusplus
|
||||||
|
, tomlplusplus
|
||||||
|
, msaClientID ? ""
|
||||||
|
, gamemodeSupport ? stdenv.isLinux
|
||||||
|
, enableLTO ? false
|
||||||
|
}:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "polymc-unwrapped";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = lib.cleanSource self;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ cmake extra-cmake-modules ninja jdk8 ghc_filesystem file ];
|
||||||
|
buildInputs = [ qtbase quazip zlib qtcharts ]
|
||||||
|
++ lib.optional (lib.versionAtLeast qtbase.version "6") qtwayland
|
||||||
|
++ lib.optional gamemodeSupport gamemode;
|
||||||
|
|
||||||
|
postUnpack = ''
|
||||||
|
# Copy libnbtplusplus
|
||||||
|
rm -rf source/libraries/libnbtplusplus
|
||||||
|
mkdir source/libraries/libnbtplusplus
|
||||||
|
cp -a ${libnbtplusplus}/* source/libraries/libnbtplusplus
|
||||||
|
chmod a+r+w source/libraries/libnbtplusplus/*
|
||||||
|
# Copy tomlplusplus
|
||||||
|
rm -rf source/libraries/tomlplusplus
|
||||||
|
mkdir source/libraries/tomlplusplus
|
||||||
|
cp -a ${tomlplusplus}/* source/libraries/tomlplusplus
|
||||||
|
chmod a+r+w source/libraries/tomlplusplus/*
|
||||||
|
'';
|
||||||
|
|
||||||
|
dontWrapQtApps = true;
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
"-GNinja"
|
||||||
|
"-DLauncher_QT_VERSION_MAJOR=${lib.versions.major qtbase.version}"
|
||||||
|
"-DLauncher_BUILD_PLATFORM=nix"
|
||||||
|
]
|
||||||
|
++ lib.optionals enableLTO [ "-DENABLE_LTO=on" ]
|
||||||
|
++ lib.optionals (msaClientID != "") [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ];
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://polymc.org/";
|
||||||
|
downloadPage = "https://polymc.org/download/";
|
||||||
|
changelog = "https://github.com/PolyMC/PolyMC/releases";
|
||||||
|
description = "A free, open source launcher for Minecraft";
|
||||||
|
longDescription = ''
|
||||||
|
Allows you to have multiple, separate instances of Minecraft (each with
|
||||||
|
their own mods, texture packs, saves, etc) and helps you manage them and
|
||||||
|
their associated options with a simple interface.
|
||||||
|
'';
|
||||||
|
platforms = platforms.unix;
|
||||||
|
license = licenses.gpl3Only;
|
||||||
|
maintainers = with maintainers; [ starcraft66 kloenk ];
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user