Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/szeweq/mc-repack

A Minecraft mod repacking tool to optimize size and loading speed of mods.
https://github.com/szeweq/mc-repack

minecraft minecraft-mod optimization optimizer repack rust rust-cli

Last synced: 4 days ago
JSON representation

A Minecraft mod repacking tool to optimize size and loading speed of mods.

Awesome Lists containing this project

README

        

# MC-Repack
![Logo](https://raw.githubusercontent.com/szeweq/mc-repack/master/mc-repack-logo.png)

![Crates.io Version](https://img.shields.io/crates/v/mc-repack)
[![Rust Build](https://github.com/szeweq/mc-repack/actions/workflows/rust-build.yml/badge.svg)](https://github.com/szeweq/mc-repack/actions/workflows/rust-build.yml)
[![dependency status](https://deps.rs/repo/github/szeweq/mc-repack/status.svg)](https://deps.rs/repo/github/szeweq/mc-repack)

A repacking tool for Minecraft mods and resource packs to optimize size and loading speed.

## Features
- Minifying JSON files, using [`serde-json`](https://crates.io/crates/serde-json), and removing comments
- Optimizing PNG files, using [`oxipng`](https://crates.io/crates/oxipng)
- Optimizing TOML files, using [`toml`](https://crates.io/crates/toml)
- Optimizing OGG files, using [`optivorbis`](https://crates.io/crates/optivorbis)
- Optimizing NBT files
- Removing unwanted files – some project files (from Blender, Photoshop, etc.) are mistakenly packed in mods. This operation will detect and remove (ignore while repacking) these files.
- Stripping Unicode BOM
- Removing comment lines in many file types: `.cfg, .obj, .mtl, .zs, .vsh, .fsh`
- Recompressing files more efficiently
- Now with Zopfli support (slower, but better compression)
- Configurable (it reads `mc-repack.toml` or other TOML file specified by `--config` argument)

## Comparison table
These mods are tested and repacked by MC-Repack with the following results:
| File name | Original | 0.18 | 0.20 (*) | 0.21 (*) |
|----|----:|----:|----:|----:|
| minecolonies-1.19.2-1.0.1247-BETA.jar | 72.8 MB | 63.7 MB | 63.4 MB | 62.7 MB |
| twilightforest-1.19.3-4.2.1549-universal.jar | 22.5 MB | 21.9 MB | 21.8 MB | 21.2 MB |
| TConstruct-1.18.2-3.6.3.111.jar | 15.2 MB | 14.0 MB | 13.9 MB | 13.6 MB |
| BloodMagic-1.18.2-3.2.6-41.jar | 13.6 MB | 11.9 MB | 11.7 MB | 11.6 MB |
| create-1.19.2-0.5.0.i.jar | 13.1 MB | 12.8 MB | 12.7 MB | 12.6 MB |
| Botania-1.19.2-437-FORGE.jar | 10.9 MB | 10.1 MB | 10.1 MB | 10.0 MB |
| ImmersiveEngineering-1.19.3-9.3.0-163.jar | 10.3 MB | 10.0 MB | 9.65 MB | 9.46 MB |
| thermal_foundation-1.19.2-10.2.0.47.jar | 4.58 MB | 4.38 MB | 4.35 MB | 4.35 MB |
| cfm-7.0.0-pre35-1.19.3.jar | 2.11 MB | 1.92 MB | 1.87 MB | 1.84 MB |

\* - Using Deflate (faster)

More mods are available on [My Website](https://szeweq.xyz/mc-repack/mods).

## Installation
The fastest way is to get the latest version from [Releases](https://github.com/szeweq/mc-repack/releases/latest) page.

You can also install this app by using Cargo:
```sh
cargo install mc-repack
```

If you want to test the latest commit directly from this repo:
```sh
cargo install --git https://github.com/szeweq/mc-repack
```

## Usage
After installation, the tool can be used by typing one of following commands:
```sh
mc-repack jars --in --out
mc-repack files --in --out
```
- The `jars` subcommand looks for entries stored in `.jar` (or `.zip`) files.
- The `files` subcommand transforms the file tree directly. Files will be minified or copied.
When a file path is provided, then MC-Repack will repack the file contents. If a path is a directory, then all files inside (non-recursive) will be repacked.

More options are provided by typing `mc-repack --help` in a shell/terminal.

## Library
MC-Repack can be also purposed for creating your own version of a repacking tool. See [`mc-repack-core` crate on crates.io](https://crates.io/crates/mc-repack-core) for more technical details.

## Why?
MC-Repack is meant to show how many Minecraft mods and resource packs come with unoptimized files (and I don't mean just pretty-printed JSON files). You will be surprised that in some cases a PNG file's metadata added by Photoshop is much larger than its content.

One other inportant thing is that MC-Repack determines if a file really needs to be compressed. **Most PNG files and smaller JSON files will usually be stored uncompressed.** This kind of operation saves bytes if a "compressed" form is larger than original. Also, uncompressed data can be loaded faster.

This is a great tool that can be helpful for:
- Mod developers and resource pack makers – they can provide mods with smaller file sizes, optimized PNGs and correctly formatted JSONs
- Players and server owners – optimized and repacked files can speed up Minecraft load time while using less memory.

MC-Repack shows all errors happened during repacking. Most of them are errors that can be simply ignored (like `trailing comma at line X column Y`).

## How to contribute?
The easiest way to contribute is to share this with others on social media.

There is a lot of things that should be fixed or optimized. New feature ideas are welcome, just file an issue.

## Can I use it outside Minecraft?
Sure! The tool does not recognize that an archive is not a Minecraft mod nor a resource pack (yet).