Jump to content

[Java 8][Win, Linux, Mac] Ultra-complete Mod Manager - v0.1.8.7alpha


Recommended Posts

Hey have you seen that Llorx? It has been posted here about the same time as you did post your tool. It's in Java too and some features are on your to-do list, while some others would be interesting complementary features. Have you discussed with yos233?

(By the way, you forgot adding "Column sorting" in the first post, I hope it is still on the list!)

Yes saw it. The bad thing is that is impossible for the two Managers to work together :-/ And I'm not used to work with people, I prefer to program alone because there are chances that the project can be stopped or slowed down because of that (see KSPMM Reloaded), is like business, the more people, the more problems xD Let's see how grow both projects, maybe we can do something together in the future when we have a final release, or he can merge my project with his project if I stop supporting it or viceversa.

And yes, I've just taken a break, but when I continue programming I will read all the posts again (included the other thread too) and gather all the features that I forgot :P

Link to comment
Share on other sites

if I stop supporting it

I have to warn you, you'll die in terrible pain if you end up doing that. Just sayin'. redface.gif

I understand your point yes. I was more thinking about merging or taking advice from each other as you haven't started by coding the same features, so that both applications seem quite complementary so far and not very redundant. What he has done is quite similar to (better than) my last suggestion actually. :D

I hope you'll be back soon to add Curse in the list of supported websites, as it has become the official host site now. :) Have a good rest!

Edited by Korb Biakustra
Link to comment
Share on other sites

Just wanted to say, we need your manager now more than ever, Llorx, so thanks for all your hard work. I'm not much for Java, but if you need any help cleaning up the English, I'm available as I'm sure others here are.

Link to comment
Share on other sites

I have to warn you, you'll die in terrible pain if you end up doing that. Just sayin'. http://forum-images.hardware.fr/icones/redface.gif

Hahaha, don't worry, when the day arrives I will free the licenses so surely someone is going to continue it xD Or maybe KSP starts using Steam Workshop (That would be great).

I understand your point yes. I was more thinking about merging or taking advice from each other as you haven't started by coding the same features, so that both applications seem quite complementary so far and not very redundant. What he has done is quite similar to (better than) my last suggestion actually. :D

I hope you'll be back soon to add Curse in the list of supported websites, as it has become the official host site now. :) Have a good rest!

The problem is that currently both apps install mods and keeps track of them (each one in its own way), so is difficult for one app to know what changes has made the other app to the GameData/saves folder. And this is going to be more difficult as we further develop our apps (more features). The only thing we can do is to pact a default method of installing mods, saving/keeping track of data and such things and that's really difficult because we cannot wait to the other one to reply each time we want to modify those methods because of a new feature. So the only thing we can do is to wait how the projects grow to a final state and see what we can do xD

Oh, a new official platform! That's great news! Don't knowed about that :P I'm going back to work after the next weekend, maybe I'll do little things meanwhile, like adding Curse.

Thanx :-P

Just wanted to say, we need your manager now more than ever, Llorx, so thanks for all your hard work. I'm not much for Java, but if you need any help cleaning up the English, I'm available as I'm sure others here are.

Thank you for your words :-)

And yes, my english is a bit... errrmm... well, you can see it lol. If you encounter some grammar errors or know a better way of writting something please tell it to me, I'll change it, especially long sentences xD

Edited by Llorx
Link to comment
Share on other sites

Ok, I see the problem. Going to search a fix. I will post it here when I fix it.

Thank you!

EDIT: Can't find what is happening because the library is there and everyone that tries the app can load it. Have you tried reinstalling java? If you don't mind, I can make some test builds and send them to you to see what is happening.

Also, if you have Winrar, open the .jar file and extract the lib folder. Then try to run the .bat file again. If it goes fine then we advanced a bit in finding what problem you have xD

I have uninstalled all the Java software on my computer, reboot, reinstall the last version, reboot again but it doesn't change anything.

But I have done your trick and extract the lib folder at the emplacement of ModManager executable and now it works perfectly.

I will be happy to help you debugging this thing if you want to send me some tests to execute.

Edited by Romn
Link to comment
Share on other sites

Now it is working, I have some ergonomic suggestions :

- on the install window, we can click "install this gamedata" which do the wanted thing and there is the "Ok" button which do nothing and is a bit misleading.

- it could be good if the program check the page (and ask for the confirmation for the file) just after adding it, not before downloading it (so I can put everything in download queue and go aways while it is working).

Link to comment
Share on other sites

Now it is working, I have some ergonomic suggestions :

- on the install window, we can click "install this gamedata" which do the wanted thing and there is the "Ok" button which do nothing and is a bit misleading.

- it could be good if the program check the page (and ask for the confirmation for the file) just after adding it, not before downloading it (so I can put everything in download queue and go aways while it is working).

- Yes, seems misleading. Going to change it to "Close" and if you don't install any GameData before clicking "Close" it will warn you. I've made this way just in case it finds multiple GameDatas, like in KW Rocketry. Also wanted to add a "Uninstall this GameData" under each "Install this GameData" just in case you installed them in the wrong order or installed a GameData that you don't wanted to.

- That's pretty good. To the featurelist-cave! xD

Thank you for your suggestions!

PD: Going to check why you can't run it without extracting the lib folder.

Link to comment
Share on other sites

- Yes, seems misleading. Going to change it to "Close" and if you don't install any GameData before clicking "Close" it will warn you. I've made this way just in case it finds multiple GameDatas, like in KW Rocketry. Also wanted to add a "Uninstall this GameData" under each "Install this GameData" just in case you installed them in the wrong order or installed a GameData that you don't wanted to.

- That's pretty good. To the featurelist-cave! xD

Thank you for your suggestions!

PD: Going to check why you can't run it without extracting the lib folder.

i also have to extract the lib folder for it to work

Link to comment
Share on other sites

i also have to extract the lib folder for it to work

I'm working on it. Can you, please, download the new version, copy it to a new folder (so you don't lose the config files) and try to run it via double-click? Then check the errors.txt file and send it to me, please.

Link to comment
Share on other sites

I'm also experiencing the same bug:

1. I select the main installation folder.

2. I press "[+] Download Mod"

3. I add a url and a name. And hit "OK".

4. Pop-up closes. Nothing happens.

Here's my error log:

java.lang.NoClassDefFoundError: org/jsoup/Jsoup
at llorx.kspModManager.Http.get(Http.java:24)
at llorx.kspModManager.ManagerConfig.checkVersion(ManagerConfig.java:171)
at llorx.kspModManager.Main.loadConfigFile(Main.java:1358)
at llorx.kspModManager.Main.main(Main.java:1496)
Caused by: java.lang.ClassNotFoundException: org.jsoup.Jsoup
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more
java.lang.NoClassDefFoundError: org/jsoup/Jsoup
at llorx.kspModManager.Http.get(Http.java:24)
at llorx.kspModManager.ModDataParser.parseKspForumData(ModDataParser.java:91)
at llorx.kspModManager.ModDataParser.parseModData(ModDataParser.java:38)
at llorx.kspModManager.Mod.reloadMod(Mod.java:235)
at llorx.kspModManager.Mod.<init>(Mod.java:241)
at llorx.kspModManager.Main.getAddon(Main.java:1134)
at llorx.kspModManager.Main.getAddon(Main.java:1098)
at llorx.kspModManager.Main.actionPerformed(Main.java:368)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Hope it helps!

Link to comment
Share on other sites

I'm also experiencing the same bug:

1. I select the main installation folder.

2. I press "[+] Download Mod"

3. I add a url and a name. And hit "OK".

4. Pop-up closes. Nothing happens.

Here's my error log:

java.lang.NoClassDefFoundError: org/jsoup/Jsoup
at llorx.kspModManager.Http.get(Http.java:24)
at llorx.kspModManager.ManagerConfig.checkVersion(ManagerConfig.java:171)
at llorx.kspModManager.Main.loadConfigFile(Main.java:1358)
at llorx.kspModManager.Main.main(Main.java:1496)
Caused by: java.lang.ClassNotFoundException: org.jsoup.Jsoup
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more
java.lang.NoClassDefFoundError: org/jsoup/Jsoup
at llorx.kspModManager.Http.get(Http.java:24)
at llorx.kspModManager.ModDataParser.parseKspForumData(ModDataParser.java:91)
at llorx.kspModManager.ModDataParser.parseModData(ModDataParser.java:38)
at llorx.kspModManager.Mod.reloadMod(Mod.java:235)
at llorx.kspModManager.Mod.<init>(Mod.java:241)
at llorx.kspModManager.Main.getAddon(Main.java:1134)
at llorx.kspModManager.Main.getAddon(Main.java:1098)
at llorx.kspModManager.Main.actionPerformed(Main.java:368)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Hope it helps!

Perfect, working on it. The strange thing is that some people can run it and others don't, altough we have the same version.

How hard will it be to integrate Curse support now that they are on with Kerbal?

Not hard, but currently I've taken a little break. Surely I will have it after this weekend.

EDIT: Error fixed, no more lib folder extraction needed :P

Edited by Llorx
Link to comment
Share on other sites

Bug (Linux): left/right/middleclicking on the modules does not bring up a menu. (2:39 of your video).


--- a/llorx/kspModManager/Main.java
+++ b/llorx/kspModManager/Main.java
@@ -247,7 +247,7 @@ public class Main extends JFrame implements ActionListener {
int rowindex = mainList.getSelectedRow();
if (rowindex < 0)
return;
- if (e.isPopupTrigger() && e.getComponent() instanceof JTable ) {
+ if ( e.getComponent() instanceof JTable ) {
JPopupMenu popup = new MyPopMenu(getSelectedMod());
popup.show(e.getComponent(), e.getX(), e.getY());
}

... and the menu appears (albeit on any mouse click, right mouse only would be preferable, but my java is ... like an overcautious Jeb). It seems for some reason e.isPopupTrigger stays false?

Additional Problem: I have multiple KSP installations, I am led to believe many people with mods do (plain install for bug reports, BTSM install, test-installs (e.g. Kerbstein)). You already have profiles on the TODO list, could that be expanded to profiles possibly having a different KSP installation folder? Then I could simply do an 'update mods', switch through the profiles and re-install the mods that were changed. (It may also be useful to store what mods of what version are installed inside the KSP directory, as just moving or renaming the directory would break kspModManager's tracking.)

Link to comment
Share on other sites

Bug (Linux): left/right/middleclicking on the modules does not bring up a menu. (2:39 of your video).


--- a/llorx/kspModManager/Main.java
+++ b/llorx/kspModManager/Main.java
@@ -247,7 +247,7 @@ public class Main extends JFrame implements ActionListener {
int rowindex = mainList.getSelectedRow();
if (rowindex < 0)
return;
- if (e.isPopupTrigger() && e.getComponent() instanceof JTable ) {
+ if ( e.getComponent() instanceof JTable ) {
JPopupMenu popup = new MyPopMenu(getSelectedMod());
popup.show(e.getComponent(), e.getX(), e.getY());
}

... and the menu appears (albeit on any mouse click, right mouse only would be preferable, but my java is ... like an overcautious Jeb). It seems for some reason e.isPopupTrigger stays false?

Additional Problem: I have multiple KSP installations, I am led to believe many people with mods do (plain install for bug reports, BTSM install, test-installs (e.g. Kerbstein)). You already have profiles on the TODO list, could that be expanded to profiles possibly having a different KSP installation folder? Then I could simply do an 'update mods', switch through the profiles and re-install the mods that were changed. (It may also be useful to store what mods of what version are installed inside the KSP directory, as just moving or renaming the directory would break kspModManager's tracking.)

Yay, thank you for researching the code and posting it :-) Sorry for the messy and uncommented code :-/

Yes, that's easy, when creating a new profile just adding a checkbox asking if is a new KSP installation (disabled by default) will do the trick.

And yes, I already thought in saving the configs inside the KSP installation folder, is better that way.

I've already updated the code. Thank you again!

Link to comment
Share on other sites

Yay, thank you for researching the code and posting it :-) Sorry for the messy and uncommented code :-/

You're welcome.

Next problem: Curse doesn't work. Say's it's not a zip. A bit of learning more about java finds out ... curse thinks "application/x-zip-compressed" is the way to go ...


diff --git a/llorx/kspModManager/Http.java b/llorx/kspModManager/Http.java
index 5e2f596..41970fc 100644
--- a/llorx/kspModManager/Http.java
+++ b/llorx/kspModManager/Http.java
@@ -35,6 +35,9 @@ public class Http {
if (type.indexOf("application/") > -1) {
if (type.indexOf("application/zip") > -1) {
return Http.ZIP_EXTENSION;
+ } else
+ if (type.indexOf("application/x-zip-compressed") > -1) {
+ return Http.ZIP_EXTENSION;
} else {
String header = conn.getHeaderField("Content-Disposition");
if (header != null && header.indexOf("=") != -1) {

Additional evil bug (data loss!): a module on the check list (but not downloaded) will be DELETED when --- trying to download --- one can't produce a valid download URL! It should really just stay in the list as "not downloaded/installed".

One more bug: Several times now when installing multiple mods kspModManager gets confused: Mod-name and directory structure don't match (I think it's looking at the *next* mod already --- because it seems towards the end mods can have no directories ...)

EDIT: One more bug: Doesn't show ReadMe files etc.

EDIT 2: No 'reinstall' choice in the right-click menu. This means for a re-install I must re-download.

EDIT 3: With the "Final Frontier" mod it reports one GameData folder in the pop-up, but shows 2: 000_Toolbar (and shouldn't that get an 'ignore bundled' checkbox, like Module Manager?) and Nereid.

Edited by weissel
More bugs
Link to comment
Share on other sites

I downloaded this and immediately ran into a problem - it said to select my main KSP installation folder, and I did, and it wouldn't accept it.

Turns out you have to highlight the folder, then click OK, not double-click on the folder (entering into the KSP folder), and then hit OK with nothing selected. This is a major UI bug, since every other "select a folder" dialog lets you do it either way.

Once into the app, I had no idea what URL I'm supposed to input. I tried:

* https://github.com/henrybauer/AutoAsparagus

* https://github.com/henrybauer/AutoAsparagus/releases

* https://github.com/henrybauer/AutoAsparagus/releases/download/v0.4/AutoAsparagus-v0.4.zip

All of them failed. Either github support isn't working or I'm doing it wrong, but there's no indication how to do it right. Maybe sample URLs on the URL input screen? Or better yet, allow searches of github/forums for a matching name.

The Spaceport link worked (http://kerbalspaceprogram.com/autoasparagus/) but Spaceport is going away since the Curse announcement.

The forum post URL (http://forum.kerbalspaceprogram.com/threads/61238-AutoAsparagus-v0-4) did let me add it, but of course the date showed that I edited it today, despite the latest version being 4 months old. When I click "download", I get "No files detected. Download a file manually from the website". There's no "cancel" button, so I closed that window and the app locked up. Had to force quit Java.

Aside from UI fixes, the main thing a mod manager needs is automation. I don't want to go find every mod's URL and put that into the program; the program should have some way to find the mod on its own:

* define some standard that authors can use to specify the download location. For example Gamedata/modname/download.txt, specifying a URL

* keep a list of popular mods and their download locations/forums threads, and have some way for the community to update it (such as a public github project). If you take this idea all the way, it would be reinventing Curse/NexusMods, basically.

* search github for a matching project

* as fallback, search the add-ons forums for a likely thread

But really, if the program defined URLs for the most popular mods (MechJeb, Kethane, KW Rocketry, etc), and relied on search/manual input for the rest, that'd probably be enough.

Link to comment
Share on other sites

The forum post URL (http://forum.kerbalspaceprogram.com/threads/61238-AutoAsparagus-v0-4) did let me add it, but of course the date showed that I edited it today, despite the latest version being 4 months old.
This is the main limitation of this dirty workaround based on thread edit date: it warns you when the mod creator has put something new, but it's not necessarily the mod. Either you check it using the "Browse" option, or you redownload anyway if that is not big a deal for your connection (and if the mod installation is easy, i.e., no custom files).

I don't see any way to filter only mod updates from forum URLs, perhaps Llorx does. Perhaps combine forum recognition and domain recognition for the URLs inside the FP, to check if there is an new edition, and if so, go through the links inside the FP and check them if they belong to a supported domain (Github, etc.)? In some lengthy FP, it may involve checking many URLs which may be problematic. Or keep track of last URL that was used inside a thread? LLM already offers selecting one of the several links found in a thread, and keeping that URL for later updates; but then I believe it kind of overwrites the forum URL instead of just hierarchizing them, right?

Anyway I find it useful that it actually monitors the threads' FP even when there are no mod updates, but that may totally be just me.

When I click "download", I get "No files detected. Download a file manually from the website". There's no "cancel" button, so I closed that window and the app locked up. Had to force quit Java.

Anyway when you initiate the download process but abort it, LMM will remove the mod from the mod list, considering the URL you entered is likely invalid or you cancelled because you changed your mind about this mod. I think this should not be the default behaviour, already discussed it with Llorx in this thread or the earlier one in WIP section, but I do not remember exactly what he will do for that. :D

Link to comment
Share on other sites

You're welcome.

Next problem: Curse doesn't work. Say's it's not a zip. A bit of learning more about java finds out ... curse thinks "application/x-zip-compressed" is the way to go ...


diff --git a/llorx/kspModManager/Http.java b/llorx/kspModManager/Http.java
index 5e2f596..41970fc 100644
--- a/llorx/kspModManager/Http.java
+++ b/llorx/kspModManager/Http.java
@@ -35,6 +35,9 @@ public class Http {
if (type.indexOf("application/") > -1) {
if (type.indexOf("application/zip") > -1) {
return Http.ZIP_EXTENSION;
+ } else
+ if (type.indexOf("application/x-zip-compressed") > -1) {
+ return Http.ZIP_EXTENSION;
} else {
String header = conn.getHeaderField("Content-Disposition");
if (header != null && header.indexOf("=") != -1) {

Additional evil bug (data loss!): a module on the check list (but not downloaded) will be DELETED when --- trying to download --- one can't produce a valid download URL! It should really just stay in the list as "not downloaded/installed".

One more bug: Several times now when installing multiple mods kspModManager gets confused: Mod-name and directory structure don't match (I think it's looking at the *next* mod already --- because it seems towards the end mods can have no directories ...)

EDIT: One more bug: Doesn't show ReadMe files etc.

EDIT 2: No 'reinstall' choice in the right-click menu. This means for a re-install I must re-download.

EDIT 3: With the "Final Frontier" mod it reports one GameData folder in the pop-up, but shows 2: 000_Toolbar (and shouldn't that get an 'ignore bundled' checkbox, like Module Manager?) and Nereid.

Yep, Curse is still not supported, going to work today on it. Also, don't heard about that header, going to add it. Thank you!

Doesn't show ReadMe files on what mod? Everyone? It works here, but I'm on WIndows 7. What happens exactly? Check if a "errors.txt" is created.

Yes, for reinstalling you must redownload because it deletes downloaded files as they are installed (space saving). Maybe I can add an option to save the downloaded file elsewhere for reinstalling later, and because of that the manager will include a version recovery system.

And in the "Final Frontier" mod, the Manager detects GameData folders, so if inside a GameData folder there are 2 folders, it will show 1 GameData with 2 folders. The Manager can't know if each folder is from different mods because there are mods that come with different folders altough they are from the same mod, like "Triangular Truss" (I think that is written that way xD). I thought in detecting them like ModuleManager (looking for the names and excluding them), but thinking on the vast number of mods that are bundled and that in the future are going to come more mods that are going to be bundled I let it as it is, so people has to check manually if they install or not install those bundled mods (Sometimes people don't want to download and install a bundled mod just because 1 mod asks for it, and just installs the bundled one). One workaroud for this can be to create a .txt file that will have a list of bundled mods and their download locations (disabled by default), so if a user wants to disable bundled mods they can enable that option and modify the .txt to your likings adding and removing mods that you consider bundled. Also when the Manager excludes a bundled mod, it will warn you so you will know if you have to install something additionaly or not.

I downloaded this and immediately ran into a problem - it said to select my main KSP installation folder, and I did, and it wouldn't accept it.

Turns out you have to highlight the folder, then click OK, not double-click on the folder (entering into the KSP folder), and then hit OK with nothing selected. This is a major UI bug, since every other "select a folder" dialog lets you do it either way.

Once into the app, I had no idea what URL I'm supposed to input. I tried:

* https://github.com/henrybauer/AutoAsparagus

* https://github.com/henrybauer/AutoAsparagus/releases

* https://github.com/henrybauer/AutoAsparagus/releases/download/v0.4/AutoAsparagus-v0.4.zip

All of them failed. Either github support isn't working or I'm doing it wrong, but there's no indication how to do it right. Maybe sample URLs on the URL input screen? Or better yet, allow searches of github/forums for a matching name.

The Spaceport link worked (http://kerbalspaceprogram.com/autoasparagus/) but Spaceport is going away since the Curse announcement.

The forum post URL (http://forum.kerbalspaceprogram.com/threads/61238-AutoAsparagus-v0-4) did let me add it, but of course the date showed that I edited it today, despite the latest version being 4 months old. When I click "download", I get "No files detected. Download a file manually from the website". There's no "cancel" button, so I closed that window and the app locked up. Had to force quit Java.

Aside from UI fixes, the main thing a mod manager needs is automation. I don't want to go find every mod's URL and put that into the program; the program should have some way to find the mod on its own:

* define some standard that authors can use to specify the download location. For example Gamedata/modname/download.txt, specifying a URL

* keep a list of popular mods and their download locations/forums threads, and have some way for the community to update it (such as a public github project). If you take this idea all the way, it would be reinventing Curse/NexusMods, basically.

* search github for a matching project

* as fallback, search the add-ons forums for a likely thread

But really, if the program defined URLs for the most popular mods (MechJeb, Kethane, KW Rocketry, etc), and relied on search/manual input for the rest, that'd probably be enough.

You are adding the GitHub link the right way, it seems that the Manager won't detect it for some reason, going to check it. Thank you for the feedback.

Yep, the forum post has that problem, is impossible for the Manager to know if developers only added data or updated the mod. But that rarely happens, normally when a post is edited is for adding a mod update. The Java lock is the strange thing.

First *: But for reading Gamedata/modname/download.txt a file must be downloaded first, isn't it? xD I already thought in defining a standard, but most developers won't follow it. If they keep moving to Curse, an standard is not going to be required.

Second *: Yep, already thoght about that too, but is difficult/requires a maintained server/requires troll control. Btw I know that searching for a bunch of mods is tedious, but that's only the first time, after that the mod will be in the list forever/until you uninstall it/until a bug happens xD. Also with Curse this is going to be less tedious.

Third and final *: That's difficult too. If the forum html code is changed or the GitHub html code is changed those features are going to break. Currently I have to maintain different html codes for detecting versions/downloads, don't want to add more. Is the same as above, I know that searching for mods is tedious, but is not an everyday work.

I'm still thinking in the Second * (defined URLs for the most popular mods). Maybe I can simply add a .txt file with all the modlist (The manager will read and parse it), so people can edit it properly. I know that Bukkit curseforge has an API, if KSP Curseforge has an API too I can make most of the features that you said (Only for Curse), because APIs rarely break. With that almost all your suggestions are included, because all major mods are on Curse.

This is the main limitation of this dirty workaround based on thread edit date: it warns you when the mod creator has put something new, but it's not necessarily the mod. Either you check it using the "Browse" option, or you redownload anyway if that is not big a deal for your connection (and if the mod installation is easy, i.e., no custom files).

I don't see any way to filter only mod updates from forum URLs, perhaps Llorx does. Perhaps combine forum recognition and domain recognition for the URLs inside the FP, to check if there is an new edition, and if so, go through the links inside the FP and check them if they belong to a supported domain (Github, etc.)? In some lengthy FP, it may involve checking many URLs which may be problematic. Or keep track of last URL that was used inside a thread? LLM already offers selecting one of the several links found in a thread, and keeping that URL for later updates; but then I believe it kind of overwrites the forum URL instead of just hierarchizing them, right?

Anyway I find it useful that it actually monitors the threads' FP even when there are no mod updates, but that may totally be just me.

Anyway when you initiate the download process but abort it, LMM will remove the mod from the mod list, considering the URL you entered is likely invalid or you cancelled because you changed your mind about this mod. I think this should not be the default behaviour, already discussed it with Llorx in this thread or the earlier one in WIP section, but I do not remember exactly what he will do for that. :D

As you said, the only option to check if an edited post has an updated mod is that way, but this has problems too, because, for example, in mediafire you can upload a new file maintaining the URL, so a file download is required to compare checksums.

The best and less buggy one is manual checking xD

When LMM searches a forum thread and shows you a list of files is only for downloading, it won't save it for later use because the thread can be updated with new links, or simply, as I said before, the same link can be used but with different files. The best way is to check the same thread each time.

And yes, we discussed it and I'm with you, going to change that after I add support to Curse xD

Edited by Llorx
Link to comment
Share on other sites

Its the first time i used a Mod manager and i like this one. It is easy to use and useful.

Multi-Mod Lists support would be a nice feature. That you can choose which kind of Mod list you are going to use. For me personally i don´t use that but i am sure some People would like that.

And i just don´t like that it is copy, installing and delete directly in the KSP Main folder.

Because if you are making a mistake or installing a buggy update from a mod you cant restore the old one.

For me now i just made a New Folder with a GamaData Folder inside and used that as KSP Main folder in the Manager. That works fine also. Then when i am done with downloading and installing the Mods i just take this folder and copy it in the KSP Main Folder

Link to comment
Share on other sites

Its the first time i used a Mod manager and i like this one. It is easy to use and useful.

Multi-Mod Lists support would be a nice feature. That you can choose which kind of Mod list you are going to use. For me personally i don´t use that but i am sure some People would like that.

And i just don´t like that it is copy, installing and delete directly in the KSP Main folder.

Because if you are making a mistake or installing a buggy update from a mod you cant restore the old one.

For me now i just made a New Folder with a GamaData Folder inside and used that as KSP Main folder in the Manager. That works fine also. Then when i am done with downloading and installing the Mods i just take this folder and copy it in the KSP Main Folder

Fine, thank you!

Yep, modlists are in the feature list :)

In the future there are going to be much features that will help with buggy plugins, like saving downloaded files for reinstalling in the future, so if you download a new one and don't like it you can remove it and install the old one, and backup manager, so if you install a mod that rewrites other mods or stock files, when you uninstall it those files will be restored.

Right now is a default Mod Manager with some features that I wanted to have and others don't had xD

PD: Updated and added what type of mod is each one (Spaceport, KSP forums, etc...), so you can start moving your Spaceport mods to elsewhere.

Link to comment
Share on other sites

Doesn't show ReadMe files on what mod? Everyone? It works here, but I'm on WIndows 7. What happens exactly? Check if a "errors.txt" is created.

ReadMe files are shown on no mod I've tested. e.g. 000_Toolbar (Images link to full size images):

i-bwpQ4xs-M.png

Klicking on the 2 buttons to read the files says this in the errors.txt:


java.lang.UnsupportedOperationException: The EDIT action is not supported on the current platform!
at java.awt.Desktop.checkActionSupport(Desktop.java:225)
at java.awt.Desktop.edit(Desktop.java:300)
at llorx.kspModManager.Main$MyAsyncModInstall$2$1.actionPerformed(Main.java:839)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
at java.awt.Dialog.show(Dialog.java:1084)
at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:869)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:666)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:637)
at llorx.kspModManager.Main$MyAsyncModInstall$2.actionPerformed(Main.java:847)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
java.lang.UnsupportedOperationException: The EDIT action is not supported on the current platform!
at java.awt.Desktop.checkActionSupport(Desktop.java:225)
at java.awt.Desktop.edit(Desktop.java:300)
at llorx.kspModManager.Main$MyAsyncModInstall$2$1.actionPerformed(Main.java:839)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
at java.awt.Dialog.show(Dialog.java:1084)
at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:869)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:666)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:637)
at llorx.kspModManager.Main$MyAsyncModInstall$2.actionPerformed(Main.java:847)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

And here's what happened to me trying to install 2 mods. Note that the missing zips are not repeatable, it seems to happen every 10th or 20th time, so it might be a race condition or something else broken --- but when it happens, not only one module is affected.

i-z4922cV-L.png

i-KKgH49F-L.png

error.txt had this to say:


java.io.FileNotFoundException: temp/default.zip (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:131)
at java.io.FileInputStream.<init>(FileInputStream.java:87)
at llorx.kspModManager.Zip.getModInfo(Main.java:1572)
at llorx.kspModManager.Main$MyAsyncModInstall.run(Main.java:921)
at java.lang.Thread.run(Thread.java:745)
java.io.FileNotFoundException: temp/default.zip (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:131)
at java.io.FileInputStream.<init>(FileInputStream.java:87)
at llorx.kspModManager.Zip.extract(Main.java:1538)
at llorx.kspModManager.Main$MyAsyncModInstall.run(Main.java:939)
at java.lang.Thread.run(Thread.java:745)

Note the MechJeb link from the forum to Curse.com is broken at the moment, but I clicked from their custom 404-page through "Downloads", "Kerbal Space Program", "MechJeb" (which is/was on first position), to the download link and it did load.

Note also that the above bug, when re-trying with "redownload" didn't appear (just the usual(?) Curse popup error):

i-SpZ9C8N-XL.png

BTW: it would be nice if the windows (especially main window and browser window) were resizeable.

Link to comment
Share on other sites

Ok. There's a problem with Desktop edit/browse and such things on Linux. Have added a class file for it to work, hope that it fixed it.

Now, 0 files error, that's because it don't downloaded the file, also don't received the http headers because the filename is in the headers. Seems a problem with the servers or connection or maybe Java and a bad socket implementation for Linux (Just like the edit and browse implementation). Going to add a checker so when a file is not downloaded tries to download it again.

And the Curse problem. As you can see, you have MechJeb as a KspForum mod, so the manager will try to download checking the forum post. I don't noticed that curse had kerbal projects too so I don't implemented it. Going to do so xD

After the next update, the next time that you browse from the forum to a curse link it will ask you if you want to check mod updates from there. Also you can add mods adding directly the curse link.

Link to comment
Share on other sites

Done. Update published.

Now it will use another methods for opening readme files, check if it works now.

Also Curse.com support was added.

And when you download a file, don't know what really happens so a LatestDownloadHeaders.txt file is created. When you encounter the error that don't donwloads any file send the header file to me please. I'll check it for fixing that in the future.

And for resizing, yes, going to add that.

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...