Skip to content

Commit

Permalink
Merge branch 'feature_liteloader' of https://github.com/02JanDal/Mult…
Browse files Browse the repository at this point in the history
…iMC5 into develop
  • Loading branch information
peterix committed Dec 28, 2013
2 parents c816a26 + 5b54a4c commit 695ad14
Show file tree
Hide file tree
Showing 7 changed files with 177 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,8 @@ logic/OpSys.h
logic/OpSys.cpp
logic/ForgeInstaller.h
logic/ForgeInstaller.cpp
logic/LiteLoaderInstaller.h
logic/LiteLoaderInstaller.cpp

# Nostalgia
logic/NostalgiaInstance.h
Expand Down
20 changes: 20 additions & 0 deletions gui/dialogs/OneSixModEditDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "logic/EnabledItemFilter.h"
#include "logic/lists/ForgeVersionList.h"
#include "logic/ForgeInstaller.h"
#include "logic/LiteLoaderInstaller.h"

OneSixModEditDialog::OneSixModEditDialog(OneSixInstance *inst, QWidget *parent)
: QDialog(parent), ui(new Ui::OneSixModEditDialog), m_inst(inst)
Expand Down Expand Up @@ -71,6 +72,8 @@ OneSixModEditDialog::OneSixModEditDialog(OneSixInstance *inst, QWidget *parent)
auto smodel = ui->loaderModTreeView->selectionModel();
connect(smodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
SLOT(loaderCurrent(QModelIndex, QModelIndex)));

ui->liteloaderBtn->setEnabled(LiteLoaderInstaller(m_inst->intendedVersionId()).canApply());
}
// resource packs
{
Expand Down Expand Up @@ -204,6 +207,23 @@ void OneSixModEditDialog::on_forgeBtn_clicked()
}
}

void OneSixModEditDialog::on_liteloaderBtn_clicked()
{
LiteLoaderInstaller liteloader(m_inst->intendedVersionId());
if (!liteloader.canApply())
{
QMessageBox::critical(
this, tr("LiteLoader"),
tr("There is no information available on how to install LiteLoader "
"into this version of Minecraft"));
return;
}
if (!liteloader.apply(m_version))
{
// failure notice
}
}

bool OneSixModEditDialog::loaderListFilter(QKeyEvent *keyEvent)
{
switch (keyEvent->key())
Expand Down
1 change: 1 addition & 0 deletions gui/dialogs/OneSixModEditDialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ private
// Questionable: SettingsDialog doesn't need this for some reason?
void on_buttonBox_rejected();
void on_forgeBtn_clicked();
void on_liteloaderBtn_clicked();
void on_customizeBtn_clicked();
void on_revertBtn_clicked();
void updateVersionControls();
Expand Down
7 changes: 7 additions & 0 deletions gui/dialogs/OneSixModEditDialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,13 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="liteloaderBtn">
<property name="text">
<string>Install LiteLoader</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="customizeBtn">
<property name="toolTip">
Expand Down
102 changes: 102 additions & 0 deletions logic/LiteLoaderInstaller.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
/* Copyright 2013 MultiMC Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include "LiteLoaderInstaller.h"

#include "OneSixVersion.h"
#include "OneSixLibrary.h"

QMap<QString, QString> LiteLoaderInstaller::m_launcherWrapperVersionMapping;

LiteLoaderInstaller::LiteLoaderInstaller(const QString &mcVersion) : m_mcVersion(mcVersion)
{
if (m_launcherWrapperVersionMapping.isEmpty())
{
m_launcherWrapperVersionMapping["1.6.2"] = "1.3";
m_launcherWrapperVersionMapping["1.6.4"] = "1.8";
//m_launcherWrapperVersionMapping["1.7.2"] = "1.8";
//m_launcherWrapperVersionMapping["1.7.4"] = "1.8";
}
}

bool LiteLoaderInstaller::canApply() const
{
return m_launcherWrapperVersionMapping.contains(m_mcVersion);
}

bool LiteLoaderInstaller::apply(std::shared_ptr<OneSixVersion> to)
{
to->externalUpdateStart();

applyLaunchwrapper(to);
applyLiteLoader(to);

to->mainClass = "net.minecraft.launchwrapper.Launch";
if (!to->minecraftArguments.contains(
" --tweakClass com.mumfrey.liteloader.launch.LiteLoaderTweaker"))
{
to->minecraftArguments.append(
" --tweakClass com.mumfrey.liteloader.launch.LiteLoaderTweaker");
}

to->externalUpdateFinish();
return to->toOriginalFile();
}

void LiteLoaderInstaller::applyLaunchwrapper(std::shared_ptr<OneSixVersion> to)
{
const QString intendedVersion = m_launcherWrapperVersionMapping[m_mcVersion];

QMutableListIterator<std::shared_ptr<OneSixLibrary>> it(to->libraries);
while (it.hasNext())
{
it.next();
if (it.value()->rawName().startsWith("net.minecraft:launchwrapper:"))
{
if (it.value()->version() >= intendedVersion)
{
return;
}
else
{
it.remove();
}
}
}

std::shared_ptr<OneSixLibrary> lib(new OneSixLibrary(
"net.minecraft:launchwrapper:" + m_launcherWrapperVersionMapping[m_mcVersion]));
lib->finalize();
to->libraries.prepend(lib);
}

void LiteLoaderInstaller::applyLiteLoader(std::shared_ptr<OneSixVersion> to)
{
QMutableListIterator<std::shared_ptr<OneSixLibrary>> it(to->libraries);
while (it.hasNext())
{
it.next();
if (it.value()->rawName().startsWith("com.mumfrey:liteloader:"))
{
it.remove();
}
}

std::shared_ptr<OneSixLibrary> lib(
new OneSixLibrary("com.mumfrey:liteloader:" + m_mcVersion));
lib->setBaseUrl("http://dl.liteloader.com/versions/");
lib->finalize();
to->libraries.prepend(lib);
}
39 changes: 39 additions & 0 deletions logic/LiteLoaderInstaller.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/* Copyright 2013 MultiMC Contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#pragma once
#include <QString>
#include <QMap>
#include <memory>

class OneSixVersion;

class LiteLoaderInstaller
{
public:
LiteLoaderInstaller(const QString &mcVersion);

bool canApply() const;

bool apply(std::shared_ptr<OneSixVersion> to);

private:
QString m_mcVersion;

void applyLaunchwrapper(std::shared_ptr<OneSixVersion> to);
void applyLiteLoader(std::shared_ptr<OneSixVersion> to);

static QMap<QString, QString> m_launcherWrapperVersionMapping;
};
6 changes: 6 additions & 0 deletions logic/OneSixLibrary.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,12 @@ class OneSixLibrary
m_name = name;
}

/// Returns the raw name field
QString rawName() const
{
return m_name;
}

QJsonObject toJson();

/**
Expand Down

0 comments on commit 695ad14

Please sign in to comment.