Modifold - Kotlin CLI tool for moving curseforge mods to modrinth

Overview

Modifold

Modifold is a Kotlin CLI utility that allows you to transfer mods from curseforge to modrinth. This project is not affiliated with curseforge or modrinth

Usage

The first thing you need to know is how to get a curseforge project ID. On this sidebar "About Project" tab, you can find that ID. You will need the numerical ID of every curseforge project you want to transfer to modrinth.

An image showing where the curseforge project ID is located on the project page

You will also need your curseforge username, this is used to verify the ownership of each mod being moved to modrinth, and will be discarded if it does not match. (You must be listed in the authors section)

There is a full -h menu, however the simplest invocation of modifold is simply java -jar modifold.jar <Owner Name> <Curseforge Project IDs...>. This will walk you through any necessary steps, with notices along the way, so please read carefully to avoid confusion. The tool will only move entire projects, not individual files.

Some other common flags would be -l LICENSE to set the default license and -d DISCORD to set the discord link. License field will be verified by the modrinth team so make sure you update it, its "arr" by default.

Remember to update the projects once created! Modifold creates the mods as drafts so that you can add sources, issues, delete if needed, ect.

FAQ


Q: Will you ever add individual file transfer support?

A: No, that's out of scope for this, and im concerned it would make people rely on this tool instead of properly embracing modrinth.


Q: Is this safe to use?

A: Probably! It uses the same internal API proxy that other 3rd party tools use. However, this API may be discontinued in the future, but we'll cross that bridge if we come to it.


Q: Modrinth v2 api? / Mod-pack support?

A: When on stable modrinth, this tool will get a rewrite to support those. Support will not be instantaneous, obviously.

Comments
  • Exception in thread

    Exception in thread "main" java.lang.NoSuchMethodError: java.io.InputStream.readAllBytes()

    Dunno what im doing wrong?

    java -jar Modifold-2.2.1-all.jar --token %redacted% itsmineblock11 648562 653216
    WARN: Unknown modrinth categories: [128x, 16x, 256x, 32x, 512x+, 64x, 8x-, audio, blocks, core-shaders, economy, entities, environment, fonts, game-mechanics, gui, items, management, minigame, mobs, modded, models, realistic, simplistic, social, themed, transportation, tweaks, vanilla-like]
    WARN: These cannot be converted to with this version of the tool, make sure to apply them yourself if relevant
    ONLY USE THIS TOOL ON PROJECTS YOU OWN
    I built this for honest users who want to move off curseforge, I don't want to have to deal with people blaming me because someone stole their mods.
    Modrinth moderation also checks for ownership anyways, so you're unlikely to get anywhere
    ? I understand this tool should only be used on my own projects Yes
    Token was passed through CLI, using that
    Modrinth login successful, user is mineblock11 (bOHH0P9Z)
    Collecting curseforge projects
    Collecting curseforge project info for project 648562 [DONE] (279ms)
    Collecting curseforge project info for project 653216 [DONE] (1951ms)
    Collecting existing modrinth projects
    Done matching projects
     What data should be written to disk locally while transferring?
     What set of files should be transferred? All files
    Creating modrinth projects from curseforge projects
    Making modrinth project for ArrowCam (648562) [/] (306ms)Exception in thread "main" java.lang.NoSuchMethodError: java.io.InputStream.readAllBytes()[B
            at com.github.p03w.modifold.modrinth_api.ModrinthAPI$makeProject$1$1.invoke(ModrinthAPI.kt:87)
            at com.github.p03w.modifold.modrinth_api.ModrinthAPI$makeProject$1$1.invoke(ModrinthAPI.kt:84)
            at io.ktor.client.request.forms.MultiPartFormDataContent.writeTo(FormDataContent.kt:113)
            at io.ktor.client.engine.cio.UtilsKt.write(utils.kt:90)
            at io.ktor.client.engine.cio.UtilsKt.write$default(utils.kt:22)
            at io.ktor.client.engine.cio.Endpoint.writeRequestAndReadResponse(Endpoint.kt:147)
            at io.ktor.client.engine.cio.Endpoint.access$writeRequestAndReadResponse(Endpoint.kt:21)
            at io.ktor.client.engine.cio.Endpoint$makeDedicatedRequest$1$responseData$1.invokeSuspend(Endpoint.kt:122)
            at io.ktor.client.engine.cio.Endpoint$makeDedicatedRequest$1$responseData$1.invoke(Endpoint.kt)
            at io.ktor.client.engine.cio.Endpoint$makeDedicatedRequest$1$responseData$1.invoke(Endpoint.kt)
            at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturnIgnoreTimeout(Undispatched.kt:100)
            at kotlinx.coroutines.TimeoutKt.setupTimeout(Timeout.kt:148)
            at kotlinx.coroutines.TimeoutKt.withTimeout(Timeout.kt:44)
            at io.ktor.client.engine.cio.EndpointKt.handleTimeout(Endpoint.kt:269)
            at io.ktor.client.engine.cio.EndpointKt.access$handleTimeout(Endpoint.kt:1)
            at io.ktor.client.engine.cio.Endpoint$makeDedicatedRequest$1.invokeSuspend(Endpoint.kt:121)
            at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
            at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
            at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
            at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
            at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
            at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    Making modrinth project for ArrowCam (648562) [/] (321ms)
    
    opened by mineblock11 4
  • feat: add donation link arg, make gradle parallel for faster builds

    feat: add donation link arg, make gradle parallel for faster builds

    Hi again! Been using Modifold a lot for transferring all my projects, thank you for making it.

    This PR lets multiple donation links be specified with --donation <link>. It also sets org.gradle.parallel to true in gradle.properties, which really sped up the build for me.

    I've used this already and the link was successfully added to my project.

    opened by Jamalam360 2
  • chore: make gradlew executable

    chore: make gradlew executable

    Tiny fix for anyone trying to compile this on Linux, gradlew should be executable, so I've run chmod +x on it.

    Also side note, I don't think the latest release has a jar uploaded with it, which is why I was trying to compile myself.

    opened by Jamalam360 2
  • feat: migrate project body

    feat: migrate project body

    This is not a perfect solution, as Curseforge uses custom HTML where they should really be using standards (like spoilers). It can be disabled with a --dont flag.

    opened by Jamalam360 0
  • Detect server/client designation

    Detect server/client designation

    Curseforge allows tagging this per-file, while modrinth only allows it project wide

    Ideally, modifold should be able to look at the most recent 3(?) files and fill it in automatically for the project

    opened by SilverAndro 0
Releases(2.2.3)
Owner
Minecraft mod developer, mostly doing server-side and modpack utility dev in Kotlin.
null
The Klutter CLI tool gives access to all tasks to create and manage a Klutter project.

Klutter CLI The Klutter CLI tool gives access to all tasks to create and manage a Klutter project. Gettings started Download the tool. Unzip the file.

Gillian 2 Mar 31, 2022
A CLI tool to convert multi-module Jetpack Compose compiler metrics into beautiful HTML reports

A CLI tool to convert multi-module Jetpack Compose compiler metrics into beautiful HTML reports 1. What are Jetpack Compose compiler metrics? The Comp

Jaya Surya Thotapalli 116 Jan 3, 2023
Theia - A Kotlin program used to analyze and discover backdoors in Minecraft Java 1.12.2 forge mods

Theia A Kotlin program used to analyse and discover backdoors in Minecraft Java

null 7 Jan 13, 2022
An easy to use package manager for Fabric Minecraft mods.

pacmc pacmc is a package manager for Fabric Minecraft mods. The aim of this project is to massively reduce the effort you have to put in to installing

Jakob K 109 Dec 30, 2022
🚀 CLI-like personal webpage built with Kotlin/JS

kotlin-cv.js Personal terminal-like simple webpage template built with Kotlin/JS. The template features CLI commands help, cat, ls, their completion a

Viktor 9 Sep 10, 2022
A plugin for Termux to use native Android GUI components from CLI applications.

Termux:GUI This is a plugin for Termux that enables command line programs to use the native android GUI. In the examples directory you can find demo v

null 342 Dec 23, 2022
Reapp is everything you need to build amazing apps with React: a collection of packages that work together, our UI kit, and a CLI that scaffolds your app and includes a server and build system.

What is it? Reapp is everything you need to build amazing apps with React: a collection of packages that work together, our UI kit, and a CLI that sca

reapp 3.4k Nov 20, 2022
Solid - A CLI that tries to cover a dry-run phase for liquibase database change management

solid a CLI that tries to cover a dry-run phase for liquibase database change ma

Giovanni Panice (mos_) 1 Jan 28, 2022
Download tool based on kotlin and coroutine.

DownloadX A multi-threaded download tool written with Coroutine and Kotlin Read this in other languages: 中文, English, Changelog Prepare Add jitpack re

Season 138 Dec 22, 2022
An experimental tool for building console UI in Kotlin using the Jetpack Compose compiler/runtime

An experimental tool for building console UI in Kotlin using the Jetpack Compose compiler/runtime

Jake Wharton 1.4k Dec 28, 2022
Utility - The cross-platform native Kotlin command line tool template

Utility The cross-platform native Kotlin command line tool template. Usage Make

null 0 Jan 3, 2022
A tool that can mock out an existing Appium session, supports both Java and Kotlin.

appium-mocker A tool that can mock out an existing Appium session, supports both Java and Kotlin. How to install latest appium-mocker Beta/Snapshots <

aaronLLL 21 Jun 8, 2022
A powerful tool (iOS & Android) that focuses on mobile operation behavior!

DiDiPrism,中文名:小桔棱镜,是一款专注于移动端操作行为的工具,涵盖APP操作回放、操作检测、以及数据可视化能力。我们在整个方案的实现过程中沉淀出了一套技术框架,希望可以逐步开源出来帮助更多人,同时也希望棱镜在大家的合力下能够更快的成长。 它有哪些亮点? 零入侵 业务代码无需任何适配。 高可

DiDi 1.6k Dec 22, 2022
An tool to help developer to use Retrofit elegantly while using kotlinx.coroutines.

one An tool to help developer to use Retrofit elegantly while using kotlinx.coroutines. Feature Transform different data structs to one. {errorCode, d

ChengTao 30 Dec 27, 2022
ViaBackwardsTranslator - A tool to translate ViaBackwards mapping locale

ViaBackwardsTranslator A tool to translate ViaBackwards mapping locale. How to O

null 2 Sep 30, 2022
AndroRAT is a tool designed to give the control of the android system remotely and retrieve informations from it.

AndroRAT is a tool designed to give the control of the android system remotely and retrieve informations from it. Androrat is a client/server application developed in Java Android for the client side and the Server is in Python.

Neeraj Singh 1.5k Dec 30, 2022
Run Kotlin/JS libraries in Kotlin/JVM and Kotlin/Native programs

Zipline This library streamlines using Kotlin/JS libraries from Kotlin/JVM and Kotlin/Native programs. It makes it possible to do continuous deploymen

Cash App 1.5k Dec 30, 2022
A somewhat copy past of Jetbrain's code from the kotlin plugin repo to make it humanly possible to test Intellij IDEA kotlin plugins that work on kotlin

A somewhat copy past of Jetbrain's code from the kotlin plugin repo to make it humanly possible to test Intellij IDEA kotlin plugins that work on kotlin

common sense OSS 0 Jan 20, 2022
Real life Kotlin Multiplatform project with an iOS application developed in Swift with SwiftUI, an Android application developed in Kotlin with Jetpack Compose and a backed in Kotlin hosted on AppEngine.

Conferences4Hall Real life Kotlin Multiplatform project with an iOS application developed in Swift with SwiftUI, an Android application developed in K

Gérard Paligot 98 Dec 15, 2022