ModPack Manager

ModPack Manager
0

Lazy Dog doesn’t wanna copypaste the Changelog I see. XD

2 Likes

why have a changelog.txt then xD More like Encurage Reading changelog files.

2 Likes

Is there a reason the most recent versions of mods aren’t being pulled? I’ve tried updating the repository multiple times, but the newest version of some mods isn’t available. For example, the newest build of JEI for 1.12 is 2 days old, but the newest available in the launcher is from late June.

3 Likes

Thanks for the report.

Yes we are aware of that issue, sadly it is that we can’t do anything about it in the short term.
We are working on a patch that will fix these issues for good, but these can’t be done in a short time.
Especially since I also have other projects. But this should be fixed for good in a couple of weeks.

To explain the issue:
We are using a webpage that convers curse page data into 1 massive textfile that is a lot easier to read. The problem is that this page isn’t as relyable as we need it to be. That came up after we were done making the software. So it’s all designed around that page.

So we have to cut that page out completly. Thats sadly not a quick fix. ^^"

3 Likes

Ah okay, I just wanted to make sure I wasn’t messing something up on my end. Thanks for working on this!

3 Likes

is there a fetching page limit? I want to fetch every mod but when I try to it limits me to 568 or something pages

(dumb question >_>)

3 Likes

Are you sure you wanted to delete your Question?

1 Like

Yes there is a page limit. But I think you realized that yourself.
The limit is how many pages of mods CurseForge has. Which was at the time of writing your comment 568.

2 Likes

Would you be open to a suggestion? I’ve got a modpack for our family and I often like to test new mods. When I find one which is incompatible I have to chuck it out, of course. It would be great if I could add a blacklist on MPM for mods I know I don’t want, not only for those I find incompatible but also for those that replicate functionality already available.

3 Likes

Using the button “sync with folder”, is it supposed to do a one way sync only? At least it doesn’t sync back from the folder with v1.5.1

Added due to posting policy:

A bug/irritation in Chrome is that downloaded files get a “+” where there should be a " ", which probably confuses import of modules from existing instances. I just tested with “World Edit CUI Forge Edition 2”. However, it seems MPM doesn’t do import of existing files, (drag’n’drop a file isn’t able to import the file).

One method to try to add drag’n’drop is to take the MD5 of the dropped file, do a google search for the hash, parse the page URL (of the first result, or several results) to find the slug of the project and ask the user if it is the correct.

I’m basically avoiding making my own modpack manager by aksing for features :wink:

3 Likes

Adding mods, the shift + A is a handy shortcut, but I can’t use keyboard (on Mac) to actually open the buttons. I think that’s a failing of macOS. Could you add keyboard shortcuts for going straight to either adding method?

Could there be a method for adding mod files?

Could it be possible to also add the mods to the selected project when using “CurseForge Links”? As it stands now you better have to add them at once or forget them :wink:

Could the list of mods in the recipitory have a column(s) for file data (changed date, created) etc?

Could you cache/make global the “Common|Client|Server”-option. I just tested and it seems that if I select “client”-side in one modpack, the other modpacks doesn’t know that.

3 Likes

So if you install a pack it automatically drops these mods?
If you mean that, I have to think about that, It’s a interesting idea.

Eh yeah, I notice these issues and started working on concepts how to solve that issue.
Next patch that issue should “hopefully” be gone for good.

Oh ok you mean the keybindings. Yeah already thinking of a solution, but stuff like this takes time.

Eh there is a drag & drop feature in the main screen. The other one isn’t that already a thing?

Yeah that won’t work since creating the file basically sets it to the date it got created not when the owner made it.
Also Internal jars internal data goes almost back to epoch (1970).

The repository actually caches the result. But it does not transfer unless you export in a non curseforge format.
But the feature is on the edge of Deprecation because it relies on the fact that users have to provide the data and is barely used so far.

Also I should note this. The next patch will still take a bit of time because there is a background change that is rather large. (Dropping the wrapper page because its not relyable)

I hope that answers your questions.

3 Likes

That’s not a chrome thing, that’s a misconfigured server not sending the right filename in the header (either that or the file really does have +'s).

4 Likes

Yes but the MD5 is still a good idea for “finding” the files. It solves a lot of problems.

3 Likes

Thank you, I was twidling around with creating my own modpack manager, and I found the REST API from Twtich quite lacking in features needed for getting from b to a. This is the only way I could actually get the right mod from an installed file with no meta info. There are some darn developers that have completely different names between the mod, the slug, and files.

3 Likes

I’m still considering making my own modpack manager, where I can add functionality which makes my own day to day easier. There are so many mods and they all interact in strange ways, and to be honest I forget which mods I’ve already tested and found not good.

Furthermore, I’m trying to find mods that don’t duplicate features from other mods, and info for each mod about what to remove together with it. ATM MPM can find a dependency, but it don’t prune away dependent lib/core/utility mods installed with a specific mod, so cleaning up is hit and miss; especially since some developers fail to add proper secure tests in their code thus crashing forge with no information.

I’ve even had libs that crash if no mod depends on them.

Regardless of where you take MPM I’m happy it is around, though a bit cumbersome until I found that I should use the “CurseForge Link” functionality adding both the link to the modpage and to the file I want. Then it mostly initializes the local repository properly; but I most often as not need to add via the local repository one more time.

Any way, I’m pretty near finished with the birthday modpack for my 7-year old, so I will stop spamming your dev-thread :slight_smile:

3 Likes

Yes I found also the twitch API yesterday and it lacks anything without forcing to open the webpages themselves. (Which I am currently doing)
The issue with that there is no “Scanning” & “MD5” feature/info.
Already opened a issue for feature requests.

(The issue with MPM is that with the new version it can be likely that you can get ddos ban from curse for a day or two. Already implemented loads of features to reduce the likely hood drastically)

^^" Yeah loads of work though and the infos required are not really present. (You would be forced to open every page or download every file to get the missing MD5)

Because not every mod is properly told with “Dependencies” (Some of mine included)

Thanks.
I am working on it but this scale project takes a lot longer to fix/make. (I am not making “fix single issue” patch right now. I am making a overhaul that fixes foundational issues)
And I am dealing also with CF which has not much data provided, or data that can piss of their protection. I hope that they at least fix their shit.

4 Likes

I was a bit unclear. I’m thinking another column with the “module added date”. This is for guys like me who adds a lot of mods, then something breaks and I need to retrace my steps backwards. As a developer I think that’s an awful parctice, but it is no fun doing things the right way by doing one change at a time, testing, committing to github and do rollback if something happens downstream.

Oh no, please don’t deprecate it! I just found a use for it, made a script in bash, took me a lot of time, to automatically enable and disable modules based on the “CustomSide” status in the ModUpdaterPack.json. The script is launched by MultiMC before launching Minecraft so that all the server only mods aren’t started.

Likewise in my server startup script I turn off all client-side mods.

That’s the problem with the CF API. However, the MD5 is most likely unqiue within the domain of mods for Minecraft, so a “site:curseforge.com MD5HASHHERE” will in most cases return the correct mod as the first result, except when there is no posted MD5 for the file.

Anyway, now that my local repository is populated it recognizes what I need, and I also figured out how the “Sync with folder” and “Import Non Curse Mods” actually have fields to the right which I can write info into. That wasn’t immedieatly obvious to me. I’m a happier camper already.

Take your time, I’ve found a way to use MPM with my modpack design and it saves me a lot of work as it is. No pressure from me.

As for CF: pigs will fly, and hell freeze over :confused:

5 Likes
#!/bin/bash
# This script is used with ModPack Manager ()

export DEBUG=false
export MC_CLIENT=true

if $MC_CLIENT;
then
    LOGFILE=logs/clientstart.log
else
    LOGFILE=logs/serverstart.log
fi

echo "INFO: Starting script at $(date -u +%Y-%m-%d_%H:%M:%S)" >${LOGFILE}

export MC_HOME=$(dirname "$0")
export MC_SPONGEFORGE=`find . -type f -name "spongeforge*.jar"`
export MPM_JSON=ModUpdaterPack.json
sed -n '/Mods/,/]/p' $MPM_JSON > tmp.json
sed -n '/{/,/}/p' tmp.json > mod.json
export MODS=`sed -n '/{/,/}/p' mod.json`
IFS=',' read -r -a array <<< "$MODS"


oldIFS="$IFS"
IFS='
'
#IFS=${IFS} # this is useful to format your code with tabs
lines=( $MODS )
IFS="$oldIFS"
#line 4 is the filename
#line 5 CustomSide

# number of modules is ${#lines[@]} / 10 - 1
export NOS=`expr "${#lines[@]}" / 7 - 1`

SERVER_ONLY="1"
CLIENT_ONLY="2"
BOTH="0"

for (( c=0; c<=$NOS; c++ ))
do 
    NAMES=`expr 7 \* $c + 4`
    TYPE=`expr 7 \* $c + 5`
    CURRENT=${lines[$TYPE]: -1:1}
    MODFILE=`echo ${lines[$NAMES]} | sed 's/"//g' | cut -c11- | sed 's/,//g'`
    MOD=`echo ${MODFILE} | sed 's/.jar//g' | sed 's/.disabled//g'`
    if [ "${CURRENT}" == $SERVER_ONLY ];
    then
        export SERVER_SIDE_MOD_FILES="$SERVER_SIDE_MOD_FILES $MODFILE"
        export SERVER_SIDE_MODS="$SERVER_SIDE_MODS $MOD"
    elif [ "${CURRENT}" == $CLIENT_ONLY ];
    then
        export CLIENT_SIDE_MOD_FILES="$CLIENT_SIDE_MOD_FILES $MODFILE"
        export CLIENT_SIDE_MODS="$CLIENT_SIDE_MODS $MOD"
    else
        # | sed 's/.jar,//g' | sed 's/.disabled,//g'
        export COMMON_MOD_FILES="$COMMON_MOD_FILES $MODFILE"
        export COMMON_MODS="$COMMON_MODS $MOD"
    fi
done

if $MC_CLIENT;
then
    ENABLED_MODLIST="$COMMON_MODS $CLIENT_SIDE_MODS"
    ENABLED_MODFILES="$COMMON_MOD_FILES $CLIENT_SIDE_MOD_FILES"
    DISABLED_MODLIST="$SERVER_SIDE_MODS"
    DISABLED_MODFILES="$SERVER_SIDE_MOD_FILES"
else
    ENABLED_MODLIST="$COMMON_MODS $SERVER_SIDE_MODS"
    ENABLED_MODFILES="$COMMON_MOD_FILES $SERVER_SIDE_MOD_FILES"
    DISABLED_MODLIST="$CLIENT_SIDE_MODS"
    DISABLED_MODFILES="$CLIENT_SIDE_MOD_FILES"
fi

if $DEBUG;
then
    echo "Enabled mods: $ENABLED_MODLIST"
    echo
    echo "Enabled mod files: $ENABLED_MODFILES"
    echo "*****"
    echo "Disabled mods: $DISABLED_MODLIST"
    echo
    echo "Disabled mod files: $DISABLED_MODFILES"
    echo "*****"
    echo "Common mod files: $COMMON_MOD_FILES"
    echo
    echo "Server mod files: $SERVER_SIDE_MOD_FILES"
    echo
    echo "Client mod files: $CLIENT_SIDE_MOD_FILES"
    echo "*******"
fi
cd mods
pwd 
for f in $DISABLED_MODLIST;
do
    tmp=`find . -type f -name "$f.*"` > /dev/null 2>&1
    mv "$tmp" "$f.jar.disabled" > /dev/null 2>&1
done

for f in $ENABLED_MODLIST;
do
    tmp=`find . -type f -name "$f.*"`
    mv "$tmp" "$f.jar"
done
cd ..
pwd
echo "INFO: Ending script at $(date -u +%Y-%m-%d_%H:%M:%S)" >>${LOGFILE}

I tried to minimize the use of looping, and man I don’t like handling textfiles in shell scripts. Will only work on Mac and perhaps linux. It’s just because the codebase is shared between the server and client while developing.

4 Likes

Oh something like that is planned in MPM. A Change tracker, not a full versioning system because I don’t have the required knowledge to make sure to properly implement it. (For now only tracking changes)

Well its still implemented in the repository, and my through process was this:

  1. Drop it because nobody uses it. (Not knowing you had an idea)
  2. Leave it like before but have a file on github where people can submit “inital values”.

Also if you are using your scripts the current export you will not be able to read easily since i moved from Json to a custom json-like gzip compressed format that wont be readable by default. Thats easier to deal with and protects the data from being changed. (To ensure I don’t have to distrust every value that exists)

Yeah they exist. But they will be dropped soon for a better “Self Detection” System. (Ofc the manual one is there to but it will be universal)
Once i am mostly done I can start showing screenshots of the changes I made but I am not so close to do that yet.

Well its mostly self pressure because i want to use that for some things outside of mc ^^"

3 Likes