NOISSUE add a way to use native system versions of OpenAL and GLFW
If your OS comes with patched/fixed/newer versions of those, you can now check the checkboxes and stop using the old ones shipped by Mojang.
This commit is contained in:
		@@ -100,6 +100,11 @@ MinecraftInstance::MinecraftInstance(SettingsObjectPtr globalSettings, SettingsO
 | 
			
		||||
    auto launchMethodOverride = m_settings->registerSetting("OverrideMCLaunchMethod", false);
 | 
			
		||||
    m_settings->registerOverride(globalSettings->getSetting("MCLaunchMethod"), launchMethodOverride);
 | 
			
		||||
 | 
			
		||||
    // Native library workarounds
 | 
			
		||||
    auto nativeLibraryWorkaroundsOverride = m_settings->registerSetting("OverrideNativeWorkarounds", false);
 | 
			
		||||
    m_settings->registerOverride(globalSettings->getSetting("UseNativeOpenAL"), nativeLibraryWorkaroundsOverride);
 | 
			
		||||
    m_settings->registerOverride(globalSettings->getSetting("UseNativeGLFW"), nativeLibraryWorkaroundsOverride);
 | 
			
		||||
 | 
			
		||||
    // DEPRECATED: Read what versions the user configuration thinks should be used
 | 
			
		||||
    m_settings->registerSetting({"IntendedVersion", "MinecraftVersion"}, "");
 | 
			
		||||
    m_settings->registerSetting("LWJGLVersion", "");
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ static QString replaceSuffix (QString target, const QString &suffix, const QStri
 | 
			
		||||
    return target + replacement;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool unzipNatives(QString source, QString targetFolder, bool applyJnilibHack)
 | 
			
		||||
static bool unzipNatives(QString source, QString targetFolder, bool applyJnilibHack, bool nativeOpenAL, bool nativeGLFW)
 | 
			
		||||
{
 | 
			
		||||
    QuaZip zip(source);
 | 
			
		||||
    if(!zip.open(QuaZip::mdUnzip))
 | 
			
		||||
@@ -48,6 +48,13 @@ static bool unzipNatives(QString source, QString targetFolder, bool applyJnilibH
 | 
			
		||||
    do
 | 
			
		||||
    {
 | 
			
		||||
        QString name = zip.getCurrentFileName();
 | 
			
		||||
        auto lowercase = name.toLower();
 | 
			
		||||
        if (nativeGLFW && name.contains("glfw")) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (nativeOpenAL && name.contains("openal")) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if(applyJnilibHack)
 | 
			
		||||
        {
 | 
			
		||||
            name = replaceSuffix(name, ".jnilib", ".dylib");
 | 
			
		||||
@@ -76,12 +83,16 @@ void ExtractNatives::executeTask()
 | 
			
		||||
        emitSucceeded();
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    auto settings = minecraftInstance->settings();
 | 
			
		||||
    bool nativeOpenAL = settings->get("UseNativeOpenAL").toBool();
 | 
			
		||||
    bool nativeGLFW = settings->get("UseNativeGLFW").toBool();
 | 
			
		||||
 | 
			
		||||
    auto outputPath  = minecraftInstance->getNativePath();
 | 
			
		||||
    auto javaVersion = minecraftInstance->getJavaVersion();
 | 
			
		||||
    bool jniHackEnabled = javaVersion.major() >= 8;
 | 
			
		||||
    for(const auto &source: toExtract)
 | 
			
		||||
    {
 | 
			
		||||
        if(!unzipNatives(source, outputPath, jniHackEnabled))
 | 
			
		||||
        if(!unzipNatives(source, outputPath, jniHackEnabled, nativeOpenAL, nativeGLFW))
 | 
			
		||||
        {
 | 
			
		||||
            auto reason = tr("Couldn't extract native jar '%1' to destination '%2'").arg(source, outputPath);
 | 
			
		||||
            emit logLine(reason, MessageLevel::Fatal);
 | 
			
		||||
 
 | 
			
		||||
@@ -509,6 +509,10 @@ MultiMC::MultiMC(int &argc, char **argv) : QApplication(argc, argv)
 | 
			
		||||
        m_settings->registerSetting("LastHostname", "");
 | 
			
		||||
        m_settings->registerSetting("JvmArgs", "");
 | 
			
		||||
 | 
			
		||||
        // Native library workarounds
 | 
			
		||||
        m_settings->registerSetting("UseNativeOpenAL", false);
 | 
			
		||||
        m_settings->registerSetting("UseNativeGLFW", false);
 | 
			
		||||
 | 
			
		||||
        // Minecraft launch method
 | 
			
		||||
        m_settings->registerSetting("MCLaunchMethod", "LauncherPart");
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -63,6 +63,10 @@ void MinecraftPage::applySettings()
 | 
			
		||||
    s->set("LaunchMaximized", ui->maximizedCheckBox->isChecked());
 | 
			
		||||
    s->set("MinecraftWinWidth", ui->windowWidthSpinBox->value());
 | 
			
		||||
    s->set("MinecraftWinHeight", ui->windowHeightSpinBox->value());
 | 
			
		||||
 | 
			
		||||
    // Native library workarounds
 | 
			
		||||
    s->set("UseNativeOpenAL", ui->useNativeOpenALCheck->isChecked());
 | 
			
		||||
    s->set("UseNativeGLFW", ui->useNativeGLFWCheck->isChecked());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MinecraftPage::loadSettings()
 | 
			
		||||
@@ -73,4 +77,7 @@ void MinecraftPage::loadSettings()
 | 
			
		||||
    ui->maximizedCheckBox->setChecked(s->get("LaunchMaximized").toBool());
 | 
			
		||||
    ui->windowWidthSpinBox->setValue(s->get("MinecraftWinWidth").toInt());
 | 
			
		||||
    ui->windowHeightSpinBox->setValue(s->get("MinecraftWinHeight").toInt());
 | 
			
		||||
 | 
			
		||||
    ui->useNativeOpenALCheck->setChecked(s->get("UseNativeOpenAL").toBool());
 | 
			
		||||
    ui->useNativeGLFWCheck->setChecked(s->get("UseNativeGLFW").toBool());
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@
 | 
			
		||||
   <rect>
 | 
			
		||||
    <x>0</x>
 | 
			
		||||
    <y>0</y>
 | 
			
		||||
    <width>545</width>
 | 
			
		||||
    <height>195</height>
 | 
			
		||||
    <width>936</width>
 | 
			
		||||
    <height>1134</height>
 | 
			
		||||
   </rect>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="sizePolicy">
 | 
			
		||||
@@ -111,6 +111,29 @@
 | 
			
		||||
         </layout>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item>
 | 
			
		||||
        <widget class="QGroupBox" name="nativeLibWorkaroundGroupBox">
 | 
			
		||||
         <property name="title">
 | 
			
		||||
          <string>Native library workarounds</string>
 | 
			
		||||
         </property>
 | 
			
		||||
         <layout class="QVBoxLayout" name="verticalLayout_5">
 | 
			
		||||
          <item>
 | 
			
		||||
           <widget class="QCheckBox" name="useNativeGLFWCheck">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Use system installation of GLFW</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item>
 | 
			
		||||
           <widget class="QCheckBox" name="useNativeOpenALCheck">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Use system installation of OpenAL</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
         </layout>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item>
 | 
			
		||||
        <spacer name="verticalSpacerMinecraft">
 | 
			
		||||
         <property name="orientation">
 | 
			
		||||
@@ -135,6 +158,8 @@
 | 
			
		||||
  <tabstop>maximizedCheckBox</tabstop>
 | 
			
		||||
  <tabstop>windowWidthSpinBox</tabstop>
 | 
			
		||||
  <tabstop>windowHeightSpinBox</tabstop>
 | 
			
		||||
  <tabstop>useNativeGLFWCheck</tabstop>
 | 
			
		||||
  <tabstop>useNativeOpenALCheck</tabstop>
 | 
			
		||||
 </tabstops>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections/>
 | 
			
		||||
 
 | 
			
		||||
@@ -163,6 +163,20 @@ void InstanceSettingsPage::applySettings()
 | 
			
		||||
        m_settings->reset("WrapperCommand");
 | 
			
		||||
        m_settings->reset("PostExitCommand");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Workarounds
 | 
			
		||||
    bool workarounds = ui->nativeWorkaroundsGroupBox->isChecked();
 | 
			
		||||
    m_settings->set("OverrideNativeWorkarounds", workarounds);
 | 
			
		||||
    if(workarounds)
 | 
			
		||||
    {
 | 
			
		||||
        m_settings->set("UseNativeOpenAL", ui->useNativeOpenALCheck->isChecked());
 | 
			
		||||
        m_settings->set("UseNativeGLFW", ui->useNativeGLFWCheck->isChecked());
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        m_settings->reset("UseNativeOpenAL");
 | 
			
		||||
        m_settings->reset("UseNativeGLFW");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void InstanceSettingsPage::loadSettings()
 | 
			
		||||
@@ -219,6 +233,11 @@ void InstanceSettingsPage::loadSettings()
 | 
			
		||||
        m_settings->get("WrapperCommand").toString(),
 | 
			
		||||
        m_settings->get("PostExitCommand").toString()
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    // Workarounds
 | 
			
		||||
    ui->nativeWorkaroundsGroupBox->setChecked(m_settings->get("OverrideNativeWorkarounds").toBool());
 | 
			
		||||
    ui->useNativeGLFWCheck->setChecked(m_settings->get("UseNativeGLFW").toBool());
 | 
			
		||||
    ui->useNativeOpenALCheck->setChecked(m_settings->get("UseNativeOpenAL").toBool());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void InstanceSettingsPage::on_javaDetectBtn_clicked()
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@
 | 
			
		||||
   <rect>
 | 
			
		||||
    <x>0</x>
 | 
			
		||||
    <y>0</y>
 | 
			
		||||
    <width>738</width>
 | 
			
		||||
    <height>804</height>
 | 
			
		||||
    <width>691</width>
 | 
			
		||||
    <height>581</height>
 | 
			
		||||
   </rect>
 | 
			
		||||
  </property>
 | 
			
		||||
  <layout class="QVBoxLayout" name="verticalLayout">
 | 
			
		||||
@@ -364,6 +364,58 @@
 | 
			
		||||
       </item>
 | 
			
		||||
      </layout>
 | 
			
		||||
     </widget>
 | 
			
		||||
     <widget class="QWidget" name="workaroundsPage">
 | 
			
		||||
      <attribute name="title">
 | 
			
		||||
       <string>Workarounds</string>
 | 
			
		||||
      </attribute>
 | 
			
		||||
      <layout class="QVBoxLayout" name="verticalLayout_8">
 | 
			
		||||
       <item>
 | 
			
		||||
        <widget class="QGroupBox" name="nativeWorkaroundsGroupBox">
 | 
			
		||||
         <property name="enabled">
 | 
			
		||||
          <bool>true</bool>
 | 
			
		||||
         </property>
 | 
			
		||||
         <property name="title">
 | 
			
		||||
          <string>Native libraries</string>
 | 
			
		||||
         </property>
 | 
			
		||||
         <property name="checkable">
 | 
			
		||||
          <bool>true</bool>
 | 
			
		||||
         </property>
 | 
			
		||||
         <property name="checked">
 | 
			
		||||
          <bool>false</bool>
 | 
			
		||||
         </property>
 | 
			
		||||
         <layout class="QVBoxLayout" name="verticalLayout_7">
 | 
			
		||||
          <item>
 | 
			
		||||
           <widget class="QCheckBox" name="useNativeGLFWCheck">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Use system installation of GLFW</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
          <item>
 | 
			
		||||
           <widget class="QCheckBox" name="useNativeOpenALCheck">
 | 
			
		||||
            <property name="text">
 | 
			
		||||
             <string>Use system installation of OpenAL</string>
 | 
			
		||||
            </property>
 | 
			
		||||
           </widget>
 | 
			
		||||
          </item>
 | 
			
		||||
         </layout>
 | 
			
		||||
        </widget>
 | 
			
		||||
       </item>
 | 
			
		||||
       <item>
 | 
			
		||||
        <spacer name="verticalSpacer">
 | 
			
		||||
         <property name="orientation">
 | 
			
		||||
          <enum>Qt::Vertical</enum>
 | 
			
		||||
         </property>
 | 
			
		||||
         <property name="sizeHint" stdset="0">
 | 
			
		||||
          <size>
 | 
			
		||||
           <width>20</width>
 | 
			
		||||
           <height>40</height>
 | 
			
		||||
          </size>
 | 
			
		||||
         </property>
 | 
			
		||||
        </spacer>
 | 
			
		||||
       </item>
 | 
			
		||||
      </layout>
 | 
			
		||||
     </widget>
 | 
			
		||||
    </widget>
 | 
			
		||||
   </item>
 | 
			
		||||
  </layout>
 | 
			
		||||
@@ -398,6 +450,9 @@
 | 
			
		||||
  <tabstop>showConsoleCheck</tabstop>
 | 
			
		||||
  <tabstop>autoCloseConsoleCheck</tabstop>
 | 
			
		||||
  <tabstop>showConsoleErrorCheck</tabstop>
 | 
			
		||||
  <tabstop>nativeWorkaroundsGroupBox</tabstop>
 | 
			
		||||
  <tabstop>useNativeGLFWCheck</tabstop>
 | 
			
		||||
  <tabstop>useNativeOpenALCheck</tabstop>
 | 
			
		||||
 </tabstops>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections/>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user