An easy to use package manager for Fabric Minecraft mods.

Overview

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 - and most importantly - keeping your mods up to date.

Installation

Arch Linux

pacmc is the name of the package in the AUR.

Windows via scoop

scoop bucket add games
scoop install pacmc
# update later with
scoop update pacmc

Other

Download one of the released archives from the releases page. Extract the archive. Inside there will be a bin directory. Run the shell script using ./pacmc.

Quick start

# add the .minecraft folder as an archive
pacmc init
# search for mods
pacmc search minihud
# install a mod
pacmc install lithium

Usage

The main command is pacmc. You can add -h to any command to get help.

Command overview

Commands:
  install  Installs a minecraft mod
  update   Updates the mods inside an archive
  search   Searches for mods
  list     Lists the installed mods
  remove   Removes a minecraft mod
  archive  Manages your mod archives
  init     Sets the pacmc defaults
  refresh  Refreshes the local mod files according to the database
  load     Loads one archive into another
  info     Displays the formatted project description
  debug    Prints debug information

Archives

Archives are the places (folders) where your mods are stored. Your .minecraft folder is an archive by default, but you can add more (for example to manage mods on a server, which pacmc is designed for aswell).

Init the default archive

To add the .minecraft folder as an archive:

pacmc init

Add an archive

pacmc archive add myarchive [./path/to/my/archive]

List all existing archives

pacmc archive list

Remove an archive

pacmc archive remove myarchive

Search for mods

pacmc search sodium
# or
pacmc search "Fabric API"

this searches for mods for the latest minecraft version by default

For a specific game version:

pacmc search -g 1.15.2 "Fabric API"

or version independent:

pacmc search -i "minimap"

Install a mod

# via the mod id
pacmc install 447425
# or via a search term
pacmc install tweakeroo

or to a specific archive:

pacmc install -a myarchive 447425

when installing using a search term, you may be prompted to select a mod from a couple of options

Comments
  • mod name in file name

    mod name in file name

    Hi, I think it would be nice, if the filename of the .jar would contain the actual mod's name instead of a string of characters (for example pacmc_modrinth_indium.jar instead of pacmc_modrinth_Orvt0mRa_1ApUEVoW_0.jar.

    opened by fischer-felix 14
  • Platform independent PowerShell: unable to resolve the correct dataLocalDir

    Platform independent PowerShell: unable to resolve the correct dataLocalDir

    $ pacmc init
    Exception in thread "main" java.lang.ExceptionInInitializerError
            at net.axay.pacmc.commands.Init$run$1.invokeSuspend(Init.kt:25)
            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)
    Caused by: org.kodein.db.leveldb.LevelDBException: NotFound: D:\files\app\games\Minecraft\.minecraft\null\axay\pacmc\data\db1/LOCK: ?????????
            at org.kodein.db.leveldb.jni.Native.dbOpen(Native Method)
            at org.kodein.db.leveldb.jni.LevelDBJNI$Factory.open(LevelDBJNI.kt:29)
            at org.kodein.db.leveldb.jvm.LevelDBJvm.open(LevelDBJvm.kt)
            at org.kodein.db.impl.kv.AbstractKeyValueDBFactory.open(AbstractKeyValueDBFactory.kt:20)
            at org.kodein.db.impl.kv.AbstractKeyValueDBFactory.open(AbstractKeyValueDBFactory.kt:12)
            at org.kodein.db.impl.data.AbstractDataDBFactory.open(AbstractDataDBFactory.kt:20)
            at org.kodein.db.impl.data.AbstractDataDBFactory.open(AbstractDataDBFactory.kt:12)
            at org.kodein.db.impl.model.AbstractModelDBFactory.open(AbstractModelDBFactory.kt:29)
            at org.kodein.db.impl.model.AbstractModelDBFactory.open(AbstractModelDBFactory.kt:9)
            at org.kodein.db.impl.AbstractDBFactory.open(AbstractDBFactory.kt:25)
            at org.kodein.db.impl.AbstractDBFactory.open(AbstractDBFactory.kt:10)
            at org.kodein.db.impl.DefaultKt.open(default.kt:7)
            at net.axay.pacmc.storage.DatabaseKt.<clinit>(Database.kt:14)
            ... 7 more
    

    Pacmc version:

    $ scoop update pacmc
    pacmc: 0.2.1 (latest version)
    

    JDK version:

    $ java --version
    openjdk 16.0.1 2021-04-20
    OpenJDK Runtime Environment (build 16.0.1+9-24)
    OpenJDK 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
    
    bug 
    opened by WordlessEcho 13
  • Build: Unable to delete directory 'packages'

    Build: Unable to delete directory 'packages'

    I am trying to build this project on IntelliJ IDEA 2021.1.3 on Windows 11.

    Unable to delete directory 'D:\files\src\pacmc\packages'
      Failed to delete some children. This might happen because a process has files open or has its working directory set in the target directory.
      - D:\files\src\pacmc\packages\aur\pacmc\.SRCINFO
      - D:\files\src\pacmc\packages\aur\pacmc
      - D:\files\src\pacmc\packages\aur
    
    opened by WordlessEcho 6
  • Search not working so well

    Search not working so well

    The first mod I tried searching for was https://www.curseforge.com/minecraft/mc-mods/playerex, however pacmc search playerex gives no results. Other search queries (like pacmc search minihud) do work, though.

    opened by hinrik 5
  • Unexpected JSON token at offset 867: Unexpected 'null' value instead of string literal

    Unexpected JSON token at offset 867: Unexpected 'null' value instead of string literal

    When installing a mod from modrinth, i get this error

    Failed to deserialize the response to the following request: https://api.modrinth.com/api/v1/mod/aXf2OSFU/version
    
    Unexpected JSON token at offset 867: Unexpected 'null' value instead of string literalJSON input: .....endencies":[{"version_id":null,"project_id":"mOgUt4GM","depe.....
    

    (in this case i used pacmc install "ok zoomer")

    bug 
    opened by mooziii 4
  • False positive in dependency removal.

    False positive in dependency removal.

    If a mod depending on FabricAPI is outdated, it gets removed before a new version will be downloaded. That's ok but this causes pacmc to flag Fabric API as unneeded. Removing the dependency Fabric API because it is no longer needed

    Suggestion: move the dependency check to appear after Updating mods one and eventually run Deleting old files again to flush actually unneeded dependencies.

    bug 
    opened by JustCryen 4
  • Incompatible with Java 16 due to xodus-dnq

    Incompatible with Java 16 due to xodus-dnq

    Hi, im getting this error when running pacmc list or pacmc install <mod> Im on manjaro linux with java 16

    Exception in thread "main" java.lang.ExceptionInInitializerError
    	at javassist.util.proxy.DefineClassHelper.<clinit>(DefineClassHelper.java:216)
    	at javassist.util.proxy.FactoryHelper.toClass(FactoryHelper.java:128)
    	at javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:552)
    	at javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:475)
    	at javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:444)
    	at javassist.util.proxy.ProxyFactory.create(ProxyFactory.java:721)
    	at kotlinx.dnq.util.XdHierarchyNode$naturalPersistentClassInstance$2.invoke(XdHierarchyNode.kt:96)
    	at kotlinx.dnq.util.XdHierarchyNode$naturalPersistentClassInstance$2.invoke(XdHierarchyNode.kt:33)
    	at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
    	at kotlinx.dnq.util.XdHierarchyNode.getNaturalPersistentClassInstance(XdHierarchyNode.kt)
    	at kotlinx.dnq.util.DNQMetaDataUtilKt.initMetaData(DNQMetaDataUtil.kt:46)
    	at net.axay.pacmc.storage.Xodus.<clinit>(Xodus.kt:28)
    	at net.axay.pacmc.commands.Archive$List.run(Archive.kt:54)
    	at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:204)
    	at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:213)
    	at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:213)
    	at com.github.ajalt.clikt.parsers.Parser.parse(Parser.kt:17)
    	at com.github.ajalt.clikt.core.CliktCommand.parse(CliktCommand.kt:396)
    	at com.github.ajalt.clikt.core.CliktCommand.parse$default(CliktCommand.kt:393)
    	at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:411)
    	at com.github.ajalt.clikt.core.CliktCommand.main(CliktCommand.kt:436)
    	at net.axay.pacmc.ManagerKt.main(Manager.kt:10)
    Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @5fb2de77
    	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
    	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    	at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
    	at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
    	at javassist.util.proxy.SecurityActions$3.run(SecurityActions.java:94)
    	at javassist.util.proxy.SecurityActions$3.run(SecurityActions.java:90)
    	at java.base/java.security.AccessController.doPrivileged(AccessController.java:554)
    	at javassist.util.proxy.SecurityActions.getMethodHandle(SecurityActions.java:89)
    	at javassist.util.proxy.DefineClassHelper$SecuredPrivileged$2.getDefineClassMethodHandle(DefineClassHelper.java:143)
    	at javassist.util.proxy.DefineClassHelper$SecuredPrivileged$2.<init>(DefineClassHelper.java:136)
    	at javassist.util.proxy.DefineClassHelper$SecuredPrivileged.<clinit>(DefineClassHelper.java:134)
    	... 22 more````
    
    
    opened by mooziii 4
  • Error when installing

    Error when installing

    Linux Ubuntu 20 LTS openjdk-11

    > pacmc install entityculling -a client
    
    Resolving versions and dependencies...
    [✓] resolved slugs
    
    1) modrinth/entityculling
    2) curseforge/entityculling
    Which one did you mean? (provide the number): 2
    
    kotlinx.serialization.json.internal.JsonDecodingException: Unexpected JSON token at offset 405: Expected string literal but 'null' literal was found.
    Use 'coerceInputValues = true' in 'Json {}` builder to coerce nulls to default values.
    JSON input: .....ownloadCount":0,"downloadUrl":null,"gameVersions":["Fabric",.....
            at kotlinx.serialization.json.internal.JsonExceptionsKt.JsonDecodingException(JsonExceptions.kt:24)
            at kotlinx.serialization.json.internal.JsonExceptionsKt.JsonDecodingException(JsonExceptions.kt:32)
            at kotlinx.serialization.json.internal.AbstractJsonLexer.fail(AbstractJsonLexer.kt:524)
            at kotlinx.serialization.json.internal.AbstractJsonLexer.unexpectedToken(AbstractJsonLexer.kt:202)
            at kotlinx.serialization.json.internal.StringJsonLexer.consumeNextToken(StringJsonLexer.kt:74)
            at kotlinx.serialization.json.internal.StringJsonLexer.consumeKeyString(StringJsonLexer.kt:85)
            at kotlinx.serialization.json.internal.AbstractJsonLexer.consumeString(AbstractJsonLexer.kt:310)
            at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeString(StreamingJsonDecoder.kt:256)
            at kotlinx.serialization.encoding.AbstractDecoder.decodeStringElement(AbstractDecoder.kt:58)
            at net.axay.pacmc.repoapi.curseforge.model.File$$serializer.deserialize(File.kt:6)
            at net.axay.pacmc.repoapi.curseforge.model.File$$serializer.deserialize(File.kt:6)
            at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59)
            at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36)
            at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43)
            at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70)
            at kotlinx.serialization.encoding.CompositeDecoder$DefaultImpls.decodeSerializableElement$default(Decoding.kt:535)
            at kotlinx.serialization.internal.ListLikeSerializer.readElement(CollectionSerializers.kt:80)
            at kotlinx.serialization.internal.AbstractCollectionSerializer.readElement$default(CollectionSerializers.kt:51)
            at kotlinx.serialization.internal.AbstractCollectionSerializer.merge(CollectionSerializers.kt:36)
            at kotlinx.serialization.internal.AbstractCollectionSerializer.deserialize(CollectionSerializers.kt:43)
            at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59)
            at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36)
            at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43)
            at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70)
            at net.axay.pacmc.repoapi.curseforge.model.CurseforgeDataWrapper$$serializer.deserialize(CurseforgeDataWrapper.kt:5)
            at net.axay.pacmc.repoapi.curseforge.model.CurseforgeDataWrapper$$serializer.deserialize(CurseforgeDataWrapper.kt:5)
            at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59)
            at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36)
            at kotlinx.serialization.internal.NullableSerializer.deserialize(NullableSerializer.kt:30)
            at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59)
            at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36)
            at kotlinx.serialization.json.Json.decodeFromString(Json.kt:100)
            at net.axay.pacmc.repoapi.curseforge.CurseforgeApi$getProjectVersions$2$1$1.invokeSuspend(CurseforgeApi.kt:116)
            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:570)
            at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749)
            at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
            at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
    
    opened by color-space 3
  • Dependencies installed twice if modrinth/curseforge mods are mixed together

    Dependencies installed twice if modrinth/curseforge mods are mixed together

    The troublesome mod from #41 is now available from Modrinth. Installing it gives:

    + add modrinth/entityculling (1.5.1-fabric-1.18)
    + add modrinth/fabric-api (0.53.4+1.18.2) (dependency)
    

    Which is kinda correct but not really, because I already have fabric-api installed from curseforge as a dependency of other mods from there. I think it might not even be possible to accurately say if two mods from different sources are in fact the same mod. (Well, mod name will be most likely the same, but you never know)

    Moreover, pacmc doesn't allow to uninstall this additional mod afterwards, as it's a required dependency.

    This is somewhat related to #20. Pacmc now asks if the list of the mods to be installed is correct. If it asked after resolving dependencies it would be possible to select which mods from the list should actually be installed. (That would of course require additional feature to select mods, now you can only answer y/n)

    opened by endrjux 3
  • Allow user to change default archive

    Allow user to change default archive

    I'd like to set my default archive to $HOME/.local/share/multimc/instances/1.18.2/.minecraft, so that when I run pacmc install sodium the jar will automatically be placed in $HOME/.local/share/multimc/instances/1.18.2/.minecraft/mods. I am unsure how to do this in pacmc's current state.

    I believe this would require some kind of change to line 59 in pacmc/pacmc-cli/src/main/kotlin/net/axay/pacmc/commands/Install.kt:

    private val archiveName by option("-a", "--archive", help = "The archive where the mod should be installed").default(".minecraft")
    
    enhancement 
    opened by carterprince 3
  • Update command doesn't update to newest version

    Update command doesn't update to newest version

    It seems "update" command can't always find the newest version of the mod (at least for curseforge mods), for example:

    I have version 3.4.1 of curseforge/357540 installed (1.18.1). But the latest version is 3.4.2: image

    I suspect it might be because this version is marked as "beta". Unfortunately there is no way to select which release type should be installed.

    bug 
    opened by endrjux 3
  • Support more project types

    Support more project types

    New Project Types

    This PR adds support for:

    • Rift (modrinth only)
    • Risugami's ModLoader However, this requires some more work to be usable that has to do with minecraft version handling as described in #47 (modrinth only)
    • LiteLoader (curseforge and modrinth)
    • Bukkit (modrinth only atm)
    • Spigot (modrinth only atm)
    • Paper (modrinth only atm)
    • Purpur (modrinth only atm)
    • BungeeCord (modrinth only)
    • Waterfall (modrinth only)
    • Velocity (modrinth only)
    • Sponge (modrinth only)
    • CurseForge support for Quilt

    Loader Compatibility

    You can now create a Quilt archive and the archive will also be able to contain Fabric mods. Same for Purpur Archives and Bukkit / Spigot / Paper Plugins and of course Waterfall archives with BungeeCord plugins.

    This closes #68

    opened by mooziii 3
  • Detect whether archive is in mods folder or not

    Detect whether archive is in mods folder or not

    It happened to me and other people that they would create the archive using the path to their .minecraft folder, not the mods folder. So my suggestion is that pacmc should check if this is the case (maybe by checking if a server.properties or a options.txt folder exists there) and warn the user about it

    enhancement 
    opened by mooziii 0
  • Empty transaction for no compatible version

    Empty transaction for no compatible version

    $ pacmc install voxelmap
    Resolving versions and dependencies...
    [+] resolved slugs
    [+] resolved install transaction
    
    Installing the given mods will result in the following transaction:
    
    Is this okay? (Y/n)
    

    Voxelmap doesn't support Minecraft 1.19.2.

    opened by WordlessEcho 0
  • Cannot search

    Cannot search "Item Scroller` by masady from CurseForge

    Item Scroller - Mods - Minecraft - CurseForge

    $ pacmc search itemscroller
    Searching with the given query 'itemscroller'
    
    modrinth/recipebookmasscraft 1.19 by F53
      Adds the ability to use the built in recipe book for selecting mass crafting recipes in ItemScroller
    
    $ pacmc search "item scroller"
    Searching with the given query 'item scroller'
    
    modrinth/recipebookmasscraft 1.19 by F53
      Adds the ability to use the built in recipe book for selecting mass crafting recipes in ItemScroller
    modrinth/item-model-fix 1.19.2 by peppercode1
      A Fabric mod that fixes gaps in generated item models.
    modrinth/isnrmn 1.19.2 by realrttv
      When using tab completion on a command you don't have to prefix with the mods id
    modrinth/item-stitching-fix 1.19 by cy4shot
      Removes the annoying gap in Item Models!
    modrinth/item-collectors 1.19.2 by SuperMartijn642
      Item Collectors adds Collectors which collect items in a specified range!
    modrinth/itemcommander 1.18.2 by CamperSamu
      A simple Serverside Fabric mod that allows you to assign commands to Item(Stacks)
    modrinth/itemwallet 1.19.2 by Feytox
      Mod for counting your given currency items.
    modrinth/boat-item-view 1.19.2 by 50ap5ud5
      See your held items when in a moving boat!
    curseforge/coin-item 1.16.5 by uluru555
      Contains a coin and a music disc. Crafting of that coin is in the description.
    curseforge/item-effects 1.16.5 by HygerianYT
      This Mod adds some new enchantments and items with special abilities!!!
    curseforge/itemwallet 1.19.2 by Feyt0x
      Mod for counting your given currency items.
    curseforge/random-item 1.19.2 by U1timateJ7
      Gives everyone a random item at the end of the timer.
    curseforge/crastal-mod 1.18.2 by spearixal
      Green Crystals And So Much More!
    curseforge/cryptic-cove-custom-item-pack 1.17.1 by Frostisce
      The official resourcepack of the Cryptic Cove server. Requires Optifine.
    curseforge/mineheart-craftable-item 1.12.2 by xxnoahlambxx
      mod to bring recipes for vanilla items
    curseforge/the-item-generator 1.10 by CommandModBoxTeam
      A World where you only get a grass block, a double chest, water, and a random item generator.
    
    $ pacmc search "Item Scroller"
    Searching with the given query 'Item Scroller'
    
    modrinth/recipebookmasscraft 1.19 by F53
      Adds the ability to use the built in recipe book for selecting mass crafting recipes in ItemScroller
    modrinth/item-model-fix 1.19.2 by peppercode1
      A Fabric mod that fixes gaps in generated item models.
    modrinth/isnrmn 1.19.2 by realrttv
      When using tab completion on a command you don't have to prefix with the mods id
    modrinth/item-stitching-fix 1.19 by cy4shot
      Removes the annoying gap in Item Models!
    modrinth/item-collectors 1.19.2 by SuperMartijn642
      Item Collectors adds Collectors which collect items in a specified range!
    modrinth/itemcommander 1.18.2 by CamperSamu
      A simple Serverside Fabric mod that allows you to assign commands to Item(Stacks)
    modrinth/itemwallet 1.19.2 by Feytox
      Mod for counting your given currency items.
    modrinth/boat-item-view 1.19.2 by 50ap5ud5
      See your held items when in a moving boat!
    curseforge/coin-item 1.16.5 by uluru555
      Contains a coin and a music disc. Crafting of that coin is in the description.
    curseforge/item-effects 1.16.5 by HygerianYT
      This Mod adds some new enchantments and items with special abilities!!!
    curseforge/itemwallet 1.19.2 by Feyt0x
      Mod for counting your given currency items.
    curseforge/random-item 1.19.2 by U1timateJ7
      Gives everyone a random item at the end of the timer.
    curseforge/crastal-mod 1.18.2 by spearixal
      Green Crystals And So Much More!
    curseforge/cryptic-cove-custom-item-pack 1.17.1 by Frostisce
      The official resourcepack of the Cryptic Cove server. Requires Optifine.
    curseforge/mineheart-craftable-item 1.12.2 by xxnoahlambxx
      mod to bring recipes for vanilla items
    curseforge/the-item-generator 1.10 by CommandModBoxTeam
      A World where you only get a grass block, a double chest, water, and a random item generator.
    
    $ pacmc search masady
    Searching with the given query 'masady'
    
    curseforge/vanishment-point 1.12.2 by masady
      Adds a block that vanishes between a configurable time-of-day window
    curseforge/placement-preview 1.12.2 by masady
      A client-side mod to show a preview of the block-to-be-placed
    curseforge/multishot 1.12.2 by masady
      Automatic motion and screenshots for timelapses etc.
    curseforge/ore-control 1.12.2 by masady
      A small mod that can disable some or all of vanilla ore generation (including andesite/diorite/granite and silverfish blocks)
    curseforge/servux 1.19.2 by masady
      Servux is a server-side mod that provides support for some client-side mods, such as sending structure bounding boxes for MiniHUD
    curseforge/autoverse 1.12.2 by masady
      Items control everything
    curseforge/low-tech-crafting 1.18.2 by masady
      Adds a version of the vanilla Crafting Table that can be accessed by automation
    curseforge/painted-biomes 1.12.2 by masady
      Painted Biomes allows using image templates for the biome layout
    
    $ pacmc search item-scroller
    Searching with the given query 'item-scroller'
    
    modrinth/recipebookmasscraft 1.19 by F53
      Adds the ability to use the built in recipe book for selecting mass crafting recipes in ItemScroller
    modrinth/item-model-fix 1.19.2 by peppercode1
      A Fabric mod that fixes gaps in generated item models.
    modrinth/isnrmn 1.19.2 by realrttv
      When using tab completion on a command you don't have to prefix with the mods id
    modrinth/item-stitching-fix 1.19 by cy4shot
      Removes the annoying gap in Item Models!
    modrinth/item-collectors 1.19.2 by SuperMartijn642
      Item Collectors adds Collectors which collect items in a specified range!
    modrinth/itemcommander 1.18.2 by CamperSamu
      A simple Serverside Fabric mod that allows you to assign commands to Item(Stacks)
    modrinth/itemwallet 1.19.2 by Feytox
      Mod for counting your given currency items.
    modrinth/boat-item-view 1.19.2 by 50ap5ud5
      See your held items when in a moving boat!
    curseforge/coin-item 1.16.5 by uluru555
      Contains a coin and a music disc. Crafting of that coin is in the description.
    curseforge/item-effects 1.16.5 by HygerianYT
      This Mod adds some new enchantments and items with special abilities!!!
    curseforge/itemwallet 1.19.2 by Feyt0x
      Mod for counting your given currency items.
    curseforge/random-item 1.19.2 by U1timateJ7
      Gives everyone a random item at the end of the timer.
    curseforge/crastal-mod 1.18.2 by spearixal
      Green Crystals And So Much More!
    curseforge/cryptic-cove-custom-item-pack 1.17.1 by Frostisce
      The official resourcepack of the Cryptic Cove server. Requires Optifine.
    curseforge/mineheart-craftable-item 1.12.2 by xxnoahlambxx
      mod to bring recipes for vanilla items
    curseforge/the-item-generator 1.10 by CommandModBoxTeam
      A World where you only get a grass block, a double chest, water, and a random item generator.
    

    But it could be installed:

    $ pacmc install item-scroller
    Resolving versions and dependencies...
    [+] resolved slugs
    [+] resolved install transaction
    
    Installing the given mods will result in the following transaction:
    + add curseforge/item-scroller (itemscroller-fabric-1.19.1-0.17.1)
    + add curseforge/malilib (malilib-fabric-1.19.2-0.13.0) (dependency)
    
    Is this okay? (Y/n)
    

    Showed project ID: curseforge/242064 to the right result.

    bug enhancement 
    opened by WordlessEcho 2
  • Exception when calling

    Exception when calling "pacmc search better"

    When using "better" as the search term, SerializationException is raised saying that ProjectType does not contain element with name 'resourcepack'. This bug exists in both main and release branches.

    Full error message:

    Searching with the given query 'better' kotlinx.serialization.SerializationException: net.axay.pacmc.repoapi.modrinth.model.ServerRenderedProject.ProjectType does not contain element with name 'resourcepack' at kotlinx.serialization.json.internal.JsonNamesMapKt.getJsonNameIndexOrThrow(JsonNamesMap.kt:63) at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeEnum(StreamingJsonDecoder.kt:265) at net.axay.pacmc.repoapi.modrinth.model.ServerRenderedProject$ProjectType$$serializer.deserialize(ServerRenderedProject.kt:69) at net.axay.pacmc.repoapi.modrinth.model.ServerRenderedProject$ProjectType$$serializer.deserialize(ServerRenderedProject.kt:69) at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59) at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36) at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43) at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70) at net.axay.pacmc.repoapi.modrinth.model.ProjectResult$$serializer.deserialize(ProjectResult.kt:10) at net.axay.pacmc.repoapi.modrinth.model.ProjectResult$$serializer.deserialize(ProjectResult.kt:10) at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59) at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36) at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43) at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70) at kotlinx.serialization.encoding.CompositeDecoder$DefaultImpls.decodeSerializableElement$default(Decoding.kt:535) at kotlinx.serialization.internal.ListLikeSerializer.readElement(CollectionSerializers.kt:80) at kotlinx.serialization.internal.AbstractCollectionSerializer.readElement$default(CollectionSerializers.kt:51) at kotlinx.serialization.internal.AbstractCollectionSerializer.merge(CollectionSerializers.kt:36) at kotlinx.serialization.internal.AbstractCollectionSerializer.deserialize(CollectionSerializers.kt:43) at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59) at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36) at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43) at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70) at net.axay.pacmc.repoapi.modrinth.model.SearchResults$$serializer.deserialize(SearchResults.kt:8) at net.axay.pacmc.repoapi.modrinth.model.SearchResults$$serializer.deserialize(SearchResults.kt:8) at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59) at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36) at kotlinx.serialization.internal.NullableSerializer.deserialize(NullableSerializer.kt:30) at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:59) at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:36) at kotlinx.serialization.json.Json.decodeFromString(Json.kt:100) at net.axay.pacmc.repoapi.modrinth.ModrinthApi.searchProjects(ModrinthApi.kt:107) at net.axay.pacmc.repoapi.modrinth.ModrinthApi$searchProjects$1.invokeSuspend(ModrinthApi.kt) 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:570) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)

    opened by nik875 3
Releases(0.5.2)
  • 0.5.2(May 13, 2022)

  • 0.5.1(May 13, 2022)

    This release adds Curseforge support back in, this time using the new Curseforge API! #30

    additional features and fixes:

    • improved slug handling - and will ask which slug was meant if it is present in multiple repositories
    • fixed some mods not being removed correctly
    • added pacmc debug test for OS packages which require a basic test

    Additionally, there should be a Homebrew package soon!

    Source code(tar.gz)
    Source code(zip)
    pacmc-0.5.1.tar(34.29 MB)
    pacmc-0.5.1.zip(32.87 MB)
  • 0.5.0(May 9, 2022)

    After a long time and a lot of work, the pacmc rewrite is coming together nicely - although still not completed.

    New features and changes

    • modifications to an archive are now abstracted into transactions, which can always be previewed and must be confirmed
    • you can now change the default archive using pacmc archive set-default #34
    • the version of installed content will now always be shown by pacmc list #17
    • improved file and dependency resolving (will probably also fix #22)
    • pacmc archive init replaces pacmc init
    • now using and displaying project slugs everywhere
    • now supporting Fabric, Quilt and Forge as mod loaders
    • removing a mod now also removes unused dependencies
    • mods are now downloaded in parallel
    • better feedback while loading using spinners
    • allow installing and removing multiple mods at once #18
    • added -y (yes flag) which automatically accepts all confirmation questions (this enables pacmc to be reliably used in scripting)
    • mod files now have a more usable file name in the format slug_repo_id.pacmc.jar (e.g. sodium_mr_AANobbMI.pacmc.jar) #19
    • archives now have a random color assigned to them, which will be displayed

    New repository APIs

    pacmc now uses the Modrinth v2 API, which fixes all issues with the old Modrinth API (#32, #33).

    The foundation has been built for supporting the new Curseforge API, but sadly it was not possible to finish it for this release and before Curseforge shuts down its old API - that's why Curseforge support has been dropped in this release and will hopefully be back in the next release.

    Internal changes

    pacmc now uses a different database (which is not backwards compatible to the old one), so you have to recreate your archives. Additionally, pacmc is now highly modularized, and thanks to Kotlin multiplatform, the doors are now open for other frontends like pacmc-gui or even a web frontend.

    The location where pacmc stores its data has changed. It is now $dataLocalDir/pacmc/data/ for data, and $configDir/pacmc/config/ for config files. pacmc now caches requests, the cache is located under $dataLocalDir/pacmc/cache/. Cached requests can be used for displaying metadata in commands like pacmc list.

    A lot more to come

    I have a lot of plans for new features, frontends and more, the rewrite is just the beginning, required for all the other cool stuff!

    Source code(tar.gz)
    Source code(zip)
    pacmc-0.5.0.tar(34.18 MB)
    pacmc-0.5.0.zip(32.75 MB)
  • 0.4.2(Oct 19, 2021)

  • 0.4.1(Sep 3, 2021)

  • 0.4.0(Aug 28, 2021)

    pacmc 0.4.0

    Modrinth support This release brings primary Modrinth support to pacmc. Modrinth is an open source modding platform, it has a documented API and is much more package manager friendly :)

    Fixed Curseforge search Curseforge deleted the Fabric category, which affected pacmc. Pacmc now does not use this category anymore.

    Info command (The old info command has been renamed to debug) There is a new pacmc info modname command which requests the detailed mod description from Modrinth and renders it into your terminal.

    New appearance

    • a lot of command messages have been tweaked in their appearance
    • now using a Windows Terminal compatible arrow on Windows (lol)

    Internal changes

    • database migration
    • updated Kotlin to 1.5.30
    • better abstraction of repository interaction
    Source code(tar.gz)
    Source code(zip)
    pacmc-0.4.0.tar(10.99 MB)
    pacmc-0.4.0.zip(10.09 MB)
  • 0.3.0(Jul 16, 2021)

    pacmc 0.3.0 - Improved archive handling

    Features

    Update archive version

    You can now update the Minecraft version of an archive to the latest available version! This can be done using the following command: pacmc archive update [(archivename)] (as usual, the archive name defaults to ".minecraft")

    After the update, pacmc will download the correct files of all your mods for that version.

    Change archive version #5

    You can also set the version of an archive to a specific Minecraft version: pacmc archive version [mcversion] [(archivename)] (as usual, the archive name defaults to ".minecraft")

    This will also refresh the files for that new (or older) Minecraft version.

    Add archives without specifying the path

    pacmc archive add [archivename] now works too. (Previously only pacmc archive add [archivename] [archivepath] worked)

    If you do not specifiy a path, now it will default to the pacmc data directory, more specifically: pacmcdatadir/archives/archivename

    You can find out what pacmcdatadir is on your system using pacmc info and having a look at the dataLocalDir field.

    Fixes

    • you now cannot create two archives at the same position anymore (if you have old archive definitions in your database, you may have to redefine them for this safety feature to work for that path).
    • when refreshing the mods of an archive, you will now receive a warning if a mod is not available for the current Minecraft version or if it has been deleted by its owner
    • reduced the size of the log output for deleting old mod files
    • ignore mods of other unknown mod loaders for now
    Source code(tar.gz)
    Source code(zip)
    pacmc-0.3.0.tar(10.82 MB)
    pacmc-0.3.0.zip(9.93 MB)
  • 0.2.2(Jul 14, 2021)

  • 0.2.1(Jul 13, 2021)

  • 0.2.0(Jul 11, 2021)

    New features

    Refresh command
    • pacmc refresh refreshes an archive by:
      • updating all mods and their dependencies
      • resolving all dependencies again
      • deleting all old files
      • redownloading every single files
    Load command
    • pacmc load loads one archive into another, this way you can use archives for handling your own "mod packs" - e.g. you can create multiple different "mod profiles" and load them into your main .minecraft mods folder on demand Usage: pacmc load sourcearchive [-a targetarchive] (as usual, the targetarchive defaults to the .minecraft/mods archive)

    Feature improvements

    • added more help messages
    • improved look of the command output

    Performance and compatibility

    • compatibility with Java 16 (#3)
      • removed xodus-dnq
    • major performance improvements
    • no file system warning on Windows anymore
    • better overall feel because pacmc reacts instantly before a long running task is executed

    Upgrading This is a breaking update! Save the list of archives and mods before updating. You will have to reinstall the previously installed mods and run the new pacmc refresh command to refresh all local files in the archive.

    Source code(tar.gz)
    Source code(zip)
    pacmc-0.2.0.tar(10.79 MB)
    pacmc-0.2.0.zip(9.91 MB)
  • 0.1.3(Jun 27, 2021)

  • 0.1.2(Jun 26, 2021)

  • 0.1.1(Jun 25, 2021)

  • 0.1.0(Jun 24, 2021)

    First release of the pacmc package manager.

    This release includes:

    • installing packages with their correct version
    • resolving dependencies
    • updating packages
    • searching for mods
    • managing multiple mod archives (.minecraft is a default archive)
    • remove mods

    Coming in the future:

    • refresh an archive
    • autoremove dependencies which are no longer needed with remove command
    • manage the minecraft version of an archive after the creation

    Maybe:

    • Modrinth support
    Source code(tar.gz)
    Source code(zip)
    pacmc-0.1.0.tar(18.76 MB)
    pacmc-0.1.0.zip(16.86 MB)
Owner
Jakob K
Using Kotlin 🌿 and Fabric 📇
Jakob K
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
Simple random ore mod for Minecraft/Fabric. Heavily inspired by Randomite.

Rand'Ore >> Download << Simple random ores for Fabric! This mod is open source and under a permissive license. As such, it can be included in any modp

null 3 Dec 31, 2021
ClickMachine Fabric - Click Machine for minecraft

Minecraft mod for Fabric Adds one block to the game: Auto Clicker. This autoclic

null 0 Jan 10, 2022
A fabric modding base for the latest Minecraft version.

Amber A fabric modding base for the latest Minecraft version. Setup Create a fabric mod using this repo as an example. Add this mod as a dependency vi

Redstonecrafter0 1 Apr 13, 2022
Modifold - Kotlin CLI tool for moving curseforge mods to modrinth

Modifold Modifold is a Kotlin CLI utility that allows you to transfer mods from

null 12 Nov 13, 2022
A unique technology modification ported from Forge to Fabric.

Fracdustry Reimagined >> Download << Thank you, MikhailTapio. This mod is open source and under a permissive license. As such, it can be included in a

Team (Another) Fractal 3 Dec 18, 2021
UltralightFabric - Ultralight, a HTML + CSS renderer for Fabric

Xander's Fabric Template for Kotlin The best Fabric template using kotlin. Usage Mod Development: Please read the Fabric Wiki for general mod developm

Xander 15 Dec 30, 2022
🤝 Link your Fabric server and Discord with ease!

Fabric2Discord Link your Fabric server and Discord with ease! ?? Getting Started I wrote few helpful articles about this mod, so if you need help you

Igor Ryzhenkov 10 Oct 25, 2022
A simple, configurable HUD mod for Fabric/Quilt

Modrinth | CurseForge Requirements Minecraft >1.19.2 Fabric Loader >0.14.8 or the equivalent Quilt version ModMenu >4.0.0 Fabric Language Kotlin >1.8.

null 3 Dec 15, 2022
Plugin for Minecraft Dev projects that allows use BON2 as analog of fg.reobf from ForgeGradle

Bon2Gradle Plugin for Minecraft Dev projects that allows use BON2 as analog of fg.reobf from ForgeGradle. Usage Dependencies Gradle 6.8+ (Provider as

Yaroslav Novitsky 3 Nov 10, 2022
Carousel Recyclerview let's you create carousel layout with the power of recyclerview by creating custom layout manager.

Carousel Recyclerview Create carousel effect in recyclerview with the CarouselRecyclerview in a simple way. Including in your project Gradle Add below

Jack and phantom 514 Jan 8, 2023
A Kotlin work manager library for Android with progress notifications and Hilt support.

Boot Laces A kotlin work manager library for Android that includes notifications and Hilt support. User Instructions Add the JitPack repository to you

Chris Basinger 35 Oct 8, 2022
Location Service Manager for Kotlin Multiplatform Mobile iOS and android

Location Service Manager for Kotlin Multiplatform Mobile iOS and android Features Provides simple permission settings Dramatically reduce the amount o

LINE 55 Dec 10, 2022
Android Ad Manager Works with Admob, Mopup, Facebook- Bidding and Audience Networks

AndroidAdManager Works with Admob, Mopup, Facebook- Bidding and Audience Networks. Added ad types are NativeBanner, NativeAdvanced, Interstitial and B

Hashim Tahir 11 May 18, 2022
Strong-bax - An open source password manager project

What is strong-bax? Strong-bax is an open source password manager project. Stron

null 1 Feb 6, 2022
Minecraft NBT support for kotlinx.serialization

knbt An implementation of Minecraft's NBT format for kotlinx.serialization. Technical information about NBT can be found here. Using the same version

Ben Woodworth 41 Dec 21, 2022
Gradle plugin adding a task to run a Paper Minecraft server

Run Paper Run Paper is a Gradle plugin which adds a task to automatically download and run a Paper Minecraft server along with your plugin built by Gr

Jason 64 Dec 29, 2022
An under development minecraft plugin (1.8.8) to learning Kotlin language

CorePlus CorePlus is a minecraft plugin coded with Kotlin language. Still under development CorePlus will be an essential for each minecraft servers !

Gonz 3 Jun 16, 2021
Run Minecraft on the command line

HeadlessForge While headless Minecraft Clients aren't anything new, they come with a drawback. The Minecraft API is missing and you need to add all fu

null 28 Oct 17, 2022