fixed crashing when removing mods
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Hello Minecraft! Launcher.
|
||||
* Copyright (C) 2013 huangyuhui
|
||||
*
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
@@ -38,5 +38,5 @@ public abstract class IMinecraftModService extends IMinecraftService {
|
||||
|
||||
public abstract boolean addMod(File f);
|
||||
|
||||
public abstract void removeMod(int[] index);
|
||||
public abstract void removeMod(Object[] mods);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Hello Minecraft! Launcher.
|
||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
||||
*
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
@@ -88,6 +88,11 @@ public class ModInfo implements Comparable<ModInfo> {
|
||||
return location.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getFileName();
|
||||
}
|
||||
|
||||
public String getFileName() {
|
||||
String n = location.getName();
|
||||
return FileUtils.removeExtension(isActive() ? n : n.substring(0, n.length() - ".disabled".length()));
|
||||
@@ -107,8 +112,8 @@ public class ModInfo implements Comparable<ModInfo> {
|
||||
ModInfo i = new ModInfo();
|
||||
i.location = f;
|
||||
List<ModInfo> m = C.gson.fromJson(new InputStreamReader(jar.getInputStream(entry)),
|
||||
new TypeToken<List<ModInfo>>() {
|
||||
}.getType());
|
||||
new TypeToken<List<ModInfo>>() {
|
||||
}.getType());
|
||||
if (m != null && m.size() > 0) {
|
||||
i = m.get(0);
|
||||
i.location = f;
|
||||
@@ -118,8 +123,9 @@ public class ModInfo implements Comparable<ModInfo> {
|
||||
|
||||
private static ModInfo getLiteLoaderModInfo(File f, ZipFile jar, ZipEntry entry) throws IOException {
|
||||
ModInfo m = C.gson.fromJson(new InputStreamReader(jar.getInputStream(entry)),
|
||||
ModInfo.class);
|
||||
if (m == null) m = new ModInfo();
|
||||
ModInfo.class);
|
||||
if (m == null)
|
||||
m = new ModInfo();
|
||||
m.location = f;
|
||||
return m;
|
||||
}
|
||||
|
||||
@@ -104,13 +104,14 @@ public class MinecraftModService extends IMinecraftModService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeMod(int[] rows) {
|
||||
Arrays.sort(rows);
|
||||
for (int idx : rows) {
|
||||
ModInfo mi = getMods().get(idx);
|
||||
File f = mi.location;
|
||||
f.delete();
|
||||
}
|
||||
public void removeMod(Object[] rows) {
|
||||
if (rows.length == 0)
|
||||
return;
|
||||
for (Object r : rows)
|
||||
if (r instanceof ModInfo)
|
||||
((ModInfo) r).location.delete();
|
||||
else if (r instanceof Number)
|
||||
getMods().get(((Number) r).intValue()).location.delete();
|
||||
recacheMods();
|
||||
}
|
||||
|
||||
|
||||
@@ -615,9 +615,6 @@
|
||||
<TableColumnModel selectionModel="1"/>
|
||||
</Property>
|
||||
<Property name="columnSelectionAllowed" type="boolean" value="true"/>
|
||||
<Property name="selectionModel" type="javax.swing.ListSelectionModel" editor="org.netbeans.modules.form.editors2.JTableSelectionModelEditor">
|
||||
<JTableSelectionModel selectionMode="0"/>
|
||||
</Property>
|
||||
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
|
||||
<TableHeader reorderingAllowed="false" resizingAllowed="true"/>
|
||||
</Property>
|
||||
|
||||
@@ -610,7 +610,6 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
||||
|
||||
lstExternalMods.setModel(SwingUtils.makeDefaultTableModel(new String[]{"", "Mod", C.i18n("ui.label.version")}, new Class[]{Boolean.class,String.class,String.class}, new boolean[]{true,false,false}));
|
||||
lstExternalMods.setColumnSelectionAllowed(true);
|
||||
lstExternalMods.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
||||
lstExternalMods.getTableHeader().setReorderingAllowed(false);
|
||||
lstExternalMods.addKeyListener(new java.awt.event.KeyAdapter() {
|
||||
public void keyPressed(java.awt.event.KeyEvent evt) {
|
||||
@@ -1069,7 +1068,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
||||
}//GEN-LAST:event_btnAddModActionPerformed
|
||||
|
||||
private void btnRemoveModActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRemoveModActionPerformed
|
||||
getProfile().getMinecraftProvider().getModService().removeMod(lstExternalMods.getSelectedRows());
|
||||
getProfile().getMinecraftProvider().getModService().removeMod(SwingUtils.getValueBySelectedRow(lstExternalMods, lstExternalMods.getSelectedRows(), 1));
|
||||
reloadMods();
|
||||
}//GEN-LAST:event_btnRemoveModActionPerformed
|
||||
|
||||
@@ -1248,12 +1247,13 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
||||
reloadingMods = true;
|
||||
DefaultTableModel model = SwingUtils.clearDefaultTable(lstExternalMods);
|
||||
Observable.<List<ModInfo>>createWithEmptySubscription(
|
||||
t -> t.onNext(getProfile().getMinecraftProvider().getModService().recacheMods()))
|
||||
.subscribeOn(Schedulers.newThread()).observeOn(Schedulers.eventQueue())
|
||||
.flatMap(t -> Observable.from(t))
|
||||
.subscribe(t -> model.addRow(new Object[] {t.isActive(), t.getFileName(), t.version}),
|
||||
null,
|
||||
() -> reloadingMods = false);
|
||||
t -> t.onNext(getProfile().getMinecraftProvider().getModService().recacheMods()))
|
||||
.subscribeOn(Schedulers.newThread()).observeOn(Schedulers.eventQueue())
|
||||
.subscribe(t -> {
|
||||
for (ModInfo x : t)
|
||||
model.addRow(new Object[]{x.isActive(), x, x.version});
|
||||
reloadingMods = false;
|
||||
});
|
||||
}
|
||||
|
||||
// </editor-fold>
|
||||
|
||||
@@ -139,7 +139,7 @@ public final class MainFrame extends DraggableFrame {
|
||||
|
||||
if (enableShadow)
|
||||
try {
|
||||
//setBackground(new Color(0, 0, 0, 0));
|
||||
setBackground(new Color(0, 0, 0, 0));
|
||||
getRootPane().setBorder(border = new DropShadowBorder(borderColor, 4));
|
||||
} catch (Throwable ex) {
|
||||
HMCLog.err("Failed to set window transparent.", ex);
|
||||
|
||||
Reference in New Issue
Block a user