Added stdinstance plugin and a ton of plugin stuff.
This commit is contained in:
parent
6e5017e48b
commit
f71479ec33
@ -16,8 +16,8 @@ ENDIF(${BIGENDIAN})
|
|||||||
include_directories(hacks)
|
include_directories(hacks)
|
||||||
|
|
||||||
#### Find the required Qt parts ####
|
#### Find the required Qt parts ####
|
||||||
find_package(Qt5Widgets)
|
find_package(Qt5Widgets REQUIRED)
|
||||||
find_package(Qt5Network)
|
find_package(Qt5Network REQUIRED)
|
||||||
#find_package(Qt5Declarative)
|
#find_package(Qt5Declarative)
|
||||||
|
|
||||||
include_directories(${Qt5Widgets_INCLUDE_DIRS})
|
include_directories(${Qt5Widgets_INCLUDE_DIRS})
|
||||||
@ -35,6 +35,10 @@ include_directories(patchlib)
|
|||||||
# add the java launcher
|
# add the java launcher
|
||||||
add_subdirectory(launcher)
|
add_subdirectory(launcher)
|
||||||
|
|
||||||
|
# Add the stdinstance plugin.
|
||||||
|
add_subdirectory(plugins/stdinstance)
|
||||||
|
|
||||||
|
|
||||||
IF(APPLE)
|
IF(APPLE)
|
||||||
# assume clang 4.1.0+, add C++0x/C++11 stuff
|
# assume clang 4.1.0+, add C++0x/C++11 stuff
|
||||||
message(STATUS "Using APPLE CMAKE_CXX_FLAGS")
|
message(STATUS "Using APPLE CMAKE_CXX_FLAGS")
|
||||||
@ -108,6 +112,8 @@ data/inst/instancetype.cpp
|
|||||||
data/inst/instance.cpp
|
data/inst/instance.cpp
|
||||||
data/inst/instancelist.cpp
|
data/inst/instancelist.cpp
|
||||||
|
|
||||||
|
data/plugin/pluginmanager.cpp
|
||||||
|
|
||||||
data/version/instversion.cpp
|
data/version/instversion.cpp
|
||||||
data/version/instversionlist.cpp
|
data/version/instversionlist.cpp
|
||||||
|
|
||||||
@ -149,6 +155,9 @@ data/inst/instancetype.h
|
|||||||
data/inst/instance.h
|
data/inst/instance.h
|
||||||
data/inst/instancelist.h
|
data/inst/instancelist.h
|
||||||
|
|
||||||
|
data/plugin/pluginmanager.h
|
||||||
|
data/plugin/instancetypeplugin.h
|
||||||
|
|
||||||
data/version/instversion.h
|
data/version/instversion.h
|
||||||
data/version/instversionlist.h
|
data/version/instversionlist.h
|
||||||
|
|
||||||
@ -205,7 +214,7 @@ QT5_ADD_RESOURCES(MULTIMC_QRC multimc.qrc)
|
|||||||
|
|
||||||
add_executable(MultiMC MACOSX_BUNDLE WIN32 ${MULTIMC_SOURCES} ${MULTIMC_HEADERS} ${MULTIMC_UI} ${MULTIMC_QRC})
|
add_executable(MultiMC MACOSX_BUNDLE WIN32 ${MULTIMC_SOURCES} ${MULTIMC_HEADERS} ${MULTIMC_UI} ${MULTIMC_QRC})
|
||||||
qt5_use_modules(MultiMC Widgets Network)
|
qt5_use_modules(MultiMC Widgets Network)
|
||||||
target_link_libraries(MultiMC quazip patchlib ${MultiMC_LINK_ADDITIONAL_LIBS})
|
target_link_libraries(MultiMC quazip patchlib stdinstance ${MultiMC_LINK_ADDITIONAL_LIBS})
|
||||||
add_dependencies(MultiMC MultiMCLauncher)
|
add_dependencies(MultiMC MultiMCLauncher)
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,6 +44,61 @@ InstanceList *Instance::instList()
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString Instance::minecraftDir() const
|
||||||
|
{
|
||||||
|
QFileInfo mcDir(PathCombine(rootDir(), "minecraft"));
|
||||||
|
QFileInfo dotMCDir(PathCombine(rootDir(), ".minecraft"));
|
||||||
|
|
||||||
|
if (dotMCDir.exists() && !mcDir.exists())
|
||||||
|
{
|
||||||
|
return dotMCDir.path();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return mcDir.path();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Instance::binDir() const
|
||||||
|
{
|
||||||
|
return PathCombine(minecraftDir(), "bin");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Instance::savesDir() const
|
||||||
|
{
|
||||||
|
return PathCombine(minecraftDir(), "saves");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Instance::mlModsDir() const
|
||||||
|
{
|
||||||
|
return PathCombine(minecraftDir(), "mods");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Instance::coreModsDir() const
|
||||||
|
{
|
||||||
|
return PathCombine(minecraftDir(), "coremods");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Instance::resourceDir() const
|
||||||
|
{
|
||||||
|
return PathCombine(minecraftDir(), "resources");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Instance::screenshotsDir() const
|
||||||
|
{
|
||||||
|
return PathCombine(minecraftDir(), "screenshots");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Instance::texturePacksDir() const
|
||||||
|
{
|
||||||
|
return PathCombine(minecraftDir(), "texturepacks");
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Instance::mcJar() const
|
||||||
|
{
|
||||||
|
return PathCombine(binDir(), "minecraft.jar");
|
||||||
|
}
|
||||||
|
|
||||||
QVariant Instance::getField(const QString &name, QVariant defVal) const
|
QVariant Instance::getField(const QString &name, QVariant defVal) const
|
||||||
{
|
{
|
||||||
return config.get(name, defVal);
|
return config.get(name, defVal);
|
||||||
|
@ -214,6 +214,51 @@ public:
|
|||||||
{ setField("lastLaunchTime", val); }
|
{ setField("lastLaunchTime", val); }
|
||||||
|
|
||||||
|
|
||||||
|
////// Directories //////
|
||||||
|
//! Gets the path to the instance's minecraft folder.
|
||||||
|
QString minecraftDir() const;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Gets the path to the instance's instance mods folder.
|
||||||
|
* This is the folder where the jar mods are kept.
|
||||||
|
*/
|
||||||
|
QString instModsDir() const;
|
||||||
|
|
||||||
|
//! Gets the path to the instance's bin folder.
|
||||||
|
QString binDir() const;
|
||||||
|
|
||||||
|
//! Gets the path to the instance's saves folder.
|
||||||
|
QString savesDir() const;
|
||||||
|
|
||||||
|
//! Gets the path to the instance's mods folder. (.minecraft/mods)
|
||||||
|
QString mlModsDir() const;
|
||||||
|
|
||||||
|
//! Gets the path to the instance's coremods folder.
|
||||||
|
QString coreModsDir() const;
|
||||||
|
|
||||||
|
//! Gets the path to the instance's resources folder.
|
||||||
|
QString resourceDir() const;
|
||||||
|
|
||||||
|
//! Gets the path to the instance's screenshots folder.
|
||||||
|
QString screenshotsDir() const;
|
||||||
|
|
||||||
|
//! Gets the path to the instance's texture packs folder.
|
||||||
|
QString texturePacksDir() const;
|
||||||
|
|
||||||
|
|
||||||
|
////// Files //////
|
||||||
|
//! Gets the path to the instance's minecraft.jar
|
||||||
|
QString mcJar() const;
|
||||||
|
|
||||||
|
//! Gets the path to the instance's mcbackup.jar.
|
||||||
|
QString mcBackup() const;
|
||||||
|
|
||||||
|
//! Gets the path to the instance's config file.
|
||||||
|
QString configFile() const;
|
||||||
|
|
||||||
|
//! Gets the path to the instance's modlist file.
|
||||||
|
QString modListFile() const;
|
||||||
|
|
||||||
////// Settings //////
|
////// Settings //////
|
||||||
|
|
||||||
//// Java Settings ////
|
//// Java Settings ////
|
||||||
|
@ -37,9 +37,7 @@ public:
|
|||||||
friend class InstanceLoader;
|
friend class InstanceLoader;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the ID for this instance type.
|
* \brief Gets the ID for this instance type.
|
||||||
* By default this is the name of the Instance class that this type
|
|
||||||
* creates, but this can be changed by overriding this function.
|
|
||||||
* The type ID should be unique as it is used to identify the type
|
* The type ID should be unique as it is used to identify the type
|
||||||
* of instances when they are loaded.
|
* of instances when they are loaded.
|
||||||
* Changing this value at runtime results in undefined behavior.
|
* Changing this value at runtime results in undefined behavior.
|
||||||
|
41
data/plugin/instancetypeplugin.h
Normal file
41
data/plugin/instancetypeplugin.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INSTANCETYPEPLUGIN_H
|
||||||
|
#define INSTANCETYPEPLUGIN_H
|
||||||
|
|
||||||
|
#include <QList>
|
||||||
|
|
||||||
|
#include "data/inst/instancetype.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Interface for plugins that want to provide custom instance types.
|
||||||
|
*/
|
||||||
|
class InstanceTypePlugin
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/*!
|
||||||
|
* \brief Gets a QList containing the instance types that this plugin provides.
|
||||||
|
* These instance types are then registered with the InstanceLoader.
|
||||||
|
* The InstanceType objects should \e not be deleted by the plugin. Once they
|
||||||
|
* are registered, they belong to the InstanceLoader.
|
||||||
|
* \return A QList containing this plugin's instance types.
|
||||||
|
*/
|
||||||
|
virtual QList<InstanceType *> getInstanceTypes() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_INTERFACE(InstanceTypePlugin, "net.forkk.MultiMC.InstanceTypePlugin/0.1")
|
||||||
|
|
||||||
|
#endif // INSTANCETYPEPLUGIN_H
|
96
data/plugin/pluginmanager.cpp
Normal file
96
data/plugin/pluginmanager.cpp
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
/* 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 "pluginmanager.h"
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QDirIterator>
|
||||||
|
#include <QFileInfo>
|
||||||
|
|
||||||
|
#include <QtPlugin>
|
||||||
|
|
||||||
|
#include "data/plugin/instancetypeplugin.h"
|
||||||
|
|
||||||
|
PluginManager PluginManager::manager;
|
||||||
|
|
||||||
|
PluginManager::PluginManager() :
|
||||||
|
QObject(NULL)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PluginManager::loadPlugins(QString pluginDir)
|
||||||
|
{
|
||||||
|
m_plugins.clear();
|
||||||
|
|
||||||
|
QDir dir(pluginDir);
|
||||||
|
QDirIterator iter(dir);
|
||||||
|
|
||||||
|
while (iter.hasNext())
|
||||||
|
{
|
||||||
|
QFileInfo pluginFile(dir.absoluteFilePath(iter.next()));
|
||||||
|
|
||||||
|
if (pluginFile.exists() && pluginFile.isFile())
|
||||||
|
{
|
||||||
|
QPluginLoader pluginLoader(pluginFile.absoluteFilePath());
|
||||||
|
pluginLoader.load();
|
||||||
|
QObject *plugin = pluginLoader.instance();
|
||||||
|
if (plugin)
|
||||||
|
{
|
||||||
|
qDebug(QString("Loaded plugin %1.").
|
||||||
|
arg(pluginFile.baseName()).toUtf8());
|
||||||
|
m_plugins.push_back(plugin);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qWarning(QString("Error loading plugin %1. Not a valid plugin.").
|
||||||
|
arg(pluginFile.baseName()).toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PluginManager::initInstanceTypes()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < m_plugins.count(); i++)
|
||||||
|
{
|
||||||
|
InstanceTypePlugin *plugin = qobject_cast<InstanceTypePlugin *>(m_plugins[i]);
|
||||||
|
if (plugin)
|
||||||
|
{
|
||||||
|
QList<InstanceType *> instanceTypes = plugin->getInstanceTypes();
|
||||||
|
|
||||||
|
for (int i = 0; i < instanceTypes.count(); i++)
|
||||||
|
{
|
||||||
|
InstanceLoader::InstTypeError error =
|
||||||
|
InstanceLoader::loader.registerInstanceType(instanceTypes[i]);
|
||||||
|
switch (error)
|
||||||
|
{
|
||||||
|
case InstanceLoader::TypeIDExists:
|
||||||
|
qWarning(QString("Instance type %1 already registered.").
|
||||||
|
arg(instanceTypes[i]->typeID()).toUtf8());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
QObject *PluginManager::getPlugin(int index)
|
||||||
|
{
|
||||||
|
return m_plugins[index];
|
||||||
|
}
|
71
data/plugin/pluginmanager.h
Normal file
71
data/plugin/pluginmanager.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PLUGINMANAGER_H
|
||||||
|
#define PLUGINMANAGER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QList>
|
||||||
|
#include <QPluginLoader>
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This class is a singleton that manages loading plugins.
|
||||||
|
*/
|
||||||
|
class PluginManager : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
/*!
|
||||||
|
* \brief Gets the plugin manager instance.
|
||||||
|
*/
|
||||||
|
static PluginManager &get() { return manager; }
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Loads plugins from the given directory.
|
||||||
|
* This function does \e not initialize the plugins. It simply loads their
|
||||||
|
* classes. Use the init functions to initialize the various plugin types.
|
||||||
|
* \param The directory to load plugins from.
|
||||||
|
* \return True if successful. False on failure.
|
||||||
|
*/
|
||||||
|
bool loadPlugins(QString pluginDir);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Initializes the instance type plugins.
|
||||||
|
* \return True if successful. False on failure.
|
||||||
|
*/
|
||||||
|
bool initInstanceTypes();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Checks how many plugins are loaded.
|
||||||
|
* \return The number of plugins.
|
||||||
|
*/
|
||||||
|
int count() { return m_plugins.count(); }
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Gets the plugin at the given index.
|
||||||
|
* \param index The index of the plugin to get.
|
||||||
|
* \return The plugin at the given index.
|
||||||
|
*/
|
||||||
|
QObject *getPlugin(int index);
|
||||||
|
|
||||||
|
private:
|
||||||
|
PluginManager();
|
||||||
|
|
||||||
|
QList<QObject *> m_plugins;
|
||||||
|
|
||||||
|
static PluginManager manager;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // PLUGINMANAGER_H
|
31
libinstance/CMakeLists.txt
Normal file
31
libinstance/CMakeLists.txt
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
project(stdinstance)
|
||||||
|
|
||||||
|
ADD_DEFINITIONS(-DQT_PLUGIN)
|
||||||
|
|
||||||
|
# Find Qt
|
||||||
|
find_package(Qt5Core REQUIRED)
|
||||||
|
find_package(Qt5Network REQUIRED)
|
||||||
|
|
||||||
|
# Include Qt headers.
|
||||||
|
include_directories(${Qt5Base_INCLUDE_DIRS})
|
||||||
|
include_directories(${Qt5Network_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
# Include MultiMC's headers.
|
||||||
|
include_directories(../../)
|
||||||
|
|
||||||
|
SET(STDINST_HEADERS
|
||||||
|
stdinstplugin.h
|
||||||
|
stdinstancetype.h
|
||||||
|
stdinstance.h
|
||||||
|
)
|
||||||
|
|
||||||
|
SET(STDINST_SOURCES
|
||||||
|
stdinstplugin.cpp
|
||||||
|
stdinstancetype.cpp
|
||||||
|
stdinstance.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(stdinstance SHARED ${STDINST_SOURCES} ${STDINST_HEADERS})
|
||||||
|
set_target_properties(stdinstance PROPERTIES PREFIX "")
|
||||||
|
qt5_use_modules(stdinstance Core Network)
|
||||||
|
target_link_libraries(stdinstance quazip patchlib)
|
10
main.cpp
10
main.cpp
@ -18,9 +18,12 @@
|
|||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
|
||||||
#include "data/appsettings.h"
|
#include "data/appsettings.h"
|
||||||
|
|
||||||
#include "data/loginresponse.h"
|
#include "data/loginresponse.h"
|
||||||
|
|
||||||
|
#include "data/plugin/pluginmanager.h"
|
||||||
|
|
||||||
|
#include "util/pathutils.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
@ -32,6 +35,11 @@ int main(int argc, char *argv[])
|
|||||||
// Register meta types.
|
// Register meta types.
|
||||||
qRegisterMetaType<LoginResponse>("LoginResponse");
|
qRegisterMetaType<LoginResponse>("LoginResponse");
|
||||||
|
|
||||||
|
|
||||||
|
// Initialize plugins.
|
||||||
|
PluginManager::get().loadPlugins(PathCombine(qApp->applicationDirPath(), "plugins"));
|
||||||
|
PluginManager::get().initInstanceTypes();
|
||||||
|
|
||||||
MainWindow mainWin;
|
MainWindow mainWin;
|
||||||
mainWin.show();
|
mainWin.show();
|
||||||
|
|
||||||
|
31
plugins/stdinstance/CMakeLists.txt
Normal file
31
plugins/stdinstance/CMakeLists.txt
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
project(stdinstance)
|
||||||
|
|
||||||
|
ADD_DEFINITIONS(-DQT_PLUGIN)
|
||||||
|
|
||||||
|
# Find Qt
|
||||||
|
find_package(Qt5Core REQUIRED)
|
||||||
|
find_package(Qt5Network REQUIRED)
|
||||||
|
|
||||||
|
# Include Qt headers.
|
||||||
|
include_directories(${Qt5Base_INCLUDE_DIRS})
|
||||||
|
include_directories(${Qt5Network_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
# Include MultiMC's headers.
|
||||||
|
include_directories(../../)
|
||||||
|
|
||||||
|
SET(STDINST_HEADERS
|
||||||
|
stdinstplugin.h
|
||||||
|
stdinstancetype.h
|
||||||
|
stdinstance.h
|
||||||
|
)
|
||||||
|
|
||||||
|
SET(STDINST_SOURCES
|
||||||
|
stdinstplugin.cpp
|
||||||
|
stdinstancetype.cpp
|
||||||
|
stdinstance.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(stdinstance SHARED ${STDINST_SOURCES} ${STDINST_HEADERS})
|
||||||
|
set_target_properties(stdinstance PROPERTIES PREFIX "")
|
||||||
|
qt5_use_modules(stdinstance Core Network)
|
||||||
|
target_link_libraries(stdinstance quazip patchlib)
|
53
plugins/stdinstance/stdinstance.cpp
Normal file
53
plugins/stdinstance/stdinstance.cpp
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/* 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 "stdinstance.h"
|
||||||
|
|
||||||
|
#include <QFileInfo>
|
||||||
|
|
||||||
|
#include <java/javautils.h>
|
||||||
|
|
||||||
|
StdInstance::StdInstance(const QString &rootDir, QObject *parent) :
|
||||||
|
Instance(rootDir, parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool StdInstance::shouldUpdateCurrentVersion()
|
||||||
|
{
|
||||||
|
QFileInfo jar(mcJar());
|
||||||
|
return jar.lastModified().toUTC().toMSecsSinceEpoch() != lastVersionUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void StdInstance::updateCurrentVersion(bool keepCurrent)
|
||||||
|
{
|
||||||
|
QFileInfo jar(mcJar());
|
||||||
|
|
||||||
|
if(!jar.exists())
|
||||||
|
{
|
||||||
|
setLastVersionUpdate(0);
|
||||||
|
setCurrentVersion("Unknown");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qint64 time = jar.lastModified().toUTC().toMSecsSinceEpoch();
|
||||||
|
|
||||||
|
setLastVersionUpdate(time);
|
||||||
|
if (!keepCurrent)
|
||||||
|
{
|
||||||
|
QString newVersion = javautils::GetMinecraftJarVersion(jar.absoluteFilePath());
|
||||||
|
setCurrentVersion(newVersion);
|
||||||
|
}
|
||||||
|
}
|
36
plugins/stdinstance/stdinstance.h
Normal file
36
plugins/stdinstance/stdinstance.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef STDINSTANCE_H
|
||||||
|
#define STDINSTANCE_H
|
||||||
|
|
||||||
|
#include <data/inst/instance.h>
|
||||||
|
|
||||||
|
class StdInstance : public Instance
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit StdInstance(const QString &rootDir, QObject *parent = 0);
|
||||||
|
|
||||||
|
virtual bool shouldUpdateCurrentVersion();
|
||||||
|
|
||||||
|
virtual void updateCurrentVersion(bool keepCurrent);
|
||||||
|
|
||||||
|
////// TIMESTAMPS //////
|
||||||
|
virtual qint64 lastVersionUpdate() { return getField("lastVersionUpdate", 0).value<qint64>(); }
|
||||||
|
virtual void setLastVersionUpdate(qint64 val) { setField("lastVersionUpdate", val); }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // STDINSTANCE_H
|
1
plugins/stdinstance/stdinstance.json
Normal file
1
plugins/stdinstance/stdinstance.json
Normal file
@ -0,0 +1 @@
|
|||||||
|
{}
|
34
plugins/stdinstance/stdinstancetype.cpp
Normal file
34
plugins/stdinstance/stdinstancetype.cpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/* 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 "stdinstancetype.h"
|
||||||
|
|
||||||
|
StdInstanceType::StdInstanceType(QObject *parent) :
|
||||||
|
InstanceType(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
InstanceLoader::InstTypeError StdInstanceType::createInstance(Instance *inst,
|
||||||
|
const QString &instDir) const
|
||||||
|
{
|
||||||
|
return InstanceLoader::NoError;
|
||||||
|
}
|
||||||
|
|
||||||
|
InstanceLoader::InstTypeError StdInstanceType::loadInstance(Instance *inst,
|
||||||
|
const QString &instDir) const
|
||||||
|
{
|
||||||
|
return InstanceLoader::NoError;
|
||||||
|
}
|
38
plugins/stdinstance/stdinstancetype.h
Normal file
38
plugins/stdinstance/stdinstancetype.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef STDINSTANCETYPE_H
|
||||||
|
#define STDINSTANCETYPE_H
|
||||||
|
|
||||||
|
#include <data/inst/instancetype.h>
|
||||||
|
|
||||||
|
class StdInstanceType : public InstanceType
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit StdInstanceType(QObject *parent = 0);
|
||||||
|
|
||||||
|
virtual QString typeID() const { return "net.forkk.MultiMC.StdInstance"; }
|
||||||
|
|
||||||
|
virtual QString displayName() const { return "Standard Instance"; }
|
||||||
|
|
||||||
|
virtual QString description() const { return "A standard Minecraft instance."; }
|
||||||
|
|
||||||
|
virtual InstanceLoader::InstTypeError createInstance(Instance *inst, const QString &instDir) const;
|
||||||
|
|
||||||
|
virtual InstanceLoader::InstTypeError loadInstance(Instance *inst, const QString &instDir) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // STDINSTANCETYPE_H
|
27
plugins/stdinstance/stdinstplugin.cpp
Normal file
27
plugins/stdinstance/stdinstplugin.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/* 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 "stdinstplugin.h"
|
||||||
|
|
||||||
|
#include <QtPlugin>
|
||||||
|
|
||||||
|
#include "stdinstancetype.h"
|
||||||
|
|
||||||
|
QList<InstanceType *> StdInstPlugin::getInstanceTypes()
|
||||||
|
{
|
||||||
|
QList<InstanceType *> types;
|
||||||
|
types.push_back(new StdInstanceType(this));
|
||||||
|
return types;
|
||||||
|
}
|
33
plugins/stdinstance/stdinstplugin.h
Normal file
33
plugins/stdinstance/stdinstplugin.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef STDINSTPLUGIN_H
|
||||||
|
#define STDINSTPLUGIN_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include <data/plugin/instancetypeplugin.h>
|
||||||
|
|
||||||
|
class StdInstPlugin : public QObject, InstanceTypePlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_INTERFACES(InstanceTypePlugin)
|
||||||
|
Q_PLUGIN_METADATA(IID "net.forkk.MultiMC.Plugins.StdInstance")
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual QList<InstanceType *> getInstanceTypes();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // STDINSTPLUGIN_H
|
Loading…
Reference in New Issue
Block a user