Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/VazkiiMods/Quark/llms.txt

Use this file to discover all available pages before exploring further.

Quark Oddities is a self-contained addon bundled inside Quark that adds a curated collection of more unusual, mechanics-changing features. Unlike the rest of Quark, each Oddities module is grouped under its own Oddities category in the Q menu and must be enabled there.
Oddities modules are disabled by default and must be turned on individually in the Q config menu (press Q in-game, or open quark.toml under the oddities category). None of these features affect gameplay until you enable them.

Backpack

A wearable leather chest-slot bag with 27 inventory slots that keeps its items on death.

Matrix Enchanting

Replaces the vanilla enchanting table with a grid-based enchantment builder fuelled by Lapis and influenced by coloured candles.

Magnets

Redstone-powered blocks that push or pull iron, copper, and other magnetic materials — including entities.

Pipes

Copper item conduits that connect containers and move items between them automatically.

Crate

A single-item bulk-storage block that holds up to 640 items of one type.

Totem of Holding

On death, your items are held by a hovering totem at your death point rather than scattering on the ground.

Tiny Potato

A tiny, adorable decorative potato that reacts when right-clicked.

Backpack

The Backpack is a wearable bag that occupies the chest armour slot and grants 27 additional inventory slots — the same capacity as a single chest.

Crafting

The recipe uses leather, string, and a chest arranged in a backpack shape. When Ravager Hide is enabled, the optimal recipe uses Bonded Ravager Hide for a stronger result (same inventory size, different material). The backpack can be dyed like leather armour by using it in a crafting grid with any dye, or by washing the colour off in a cauldron.

Equipping the Backpack

Equip the backpack like any chest armour piece — drag it to the chest slot in your inventory, or use the right-click equip shortcut from Expanded Item Interactions. When the backpack is equipped, opening your player inventory automatically opens the Backpack inventory screen instead, displaying all 27 backpack slots alongside your regular inventory. Your normal inventory is still accessible from the same screen.
You can also transfer the backpack to and from an Armor Stand without sneaking. Simply right-click the stand while both hands are empty and you are not crouching — the backpack swaps between you and the stand. Configurable via Allow Armor Stand Unloading.

Items inside the Backpack

  • Items inside the backpack tick every game tick (simulating being in a player’s inventory), allowing things like furnace fuel, crop growth from nearby blocks, etc. Disable with Items in Backpack Tick.
  • Automatic Tool Restock searches the backpack for replacement tools.
  • Items will not tick or be accessible while the backpack is sitting in a chest or on the ground as a dropped item.

Death behaviour

When you die, the backpack item is dropped as a regular item entity — but its contents are preserved. Items inside the backpack do not scatter individually. Pick up the backpack item to recover everything at once. If the backpack is dropped as an item (not worn), its contents spill out as separate item entities so they can be picked up individually without the bag.
The backpack gains Curse of Binding automatically while it contains items, preventing accidental removal. It is removed as soon as the backpack is emptied. The Super Op Mode config option disables this restriction (useful for admins and testing).

Ravager Hide

When the Ravager Hide sub-feature is enabled, Ravagers drop 1 Ravager Hide on death (plus extra with Fortune, at a configurable rate). Ravager Hide can be crafted into Bonded Ravager Hide blocks, which are used in the backpack recipe.

Matrix Enchanting

The Matrix Enchanting table replaces the vanilla Enchanting Table with an entirely new mechanic: instead of picking one of three random level-gated options, you build an enchantment piece by piece on a grid, spending Lapis for each piece. When this module is enabled, every vanilla Enchanting Table in the world (including newly placed ones) is automatically converted to a Matrix Enchanting Table. This can be disabled with the Automatically Convert config option if you want to add a separate recipe instead.
1

Place the Matrix Enchanting Table

Place the table and surround it with Bookshelves as usual. Up to 15 bookshelves contribute enchanting power, expanding the number of pieces you can generate and improving the quality of available enchantments.
2

Insert the item and Lapis

Place the item you want to enchant in the left slot. Place Lapis Lazuli (or any item in the #c:enchanting_fuels tag, a NeoForge common tag) in the fuel slot below it. Each Lapis provides 4 charges (configurable), and each enchantment piece costs one charge.
3

Generate enchantment pieces

The right side of the UI shows a grid. Click the + button to generate a new random enchantment piece and place it on the grid. The required XP level for the next piece increases with each piece added.
4

Arrange pieces on the grid

Drag pieces around the grid. Pieces from the same enchantment must be placed adjacent to each other to form a valid group. Incompatible enchantments placed adjacent to each other are highlighted in red.
5

Take the enchanted item

Once you are satisfied with the arrangement, take the item from the output slot. Your XP is consumed and all staged enchantments are applied at once.

Enchantment Fuel Tag

The fuel slot accepts any item in the NeoForge common tag #c:enchanting_fuels. By default this includes Lapis Lazuli. Data packs or other mods can add custom fuels to this tag.

Candle Influences

Placing coloured candles adjacent to, or within the bookshelf ring around, the Matrix Enchanting Table influences the probability of specific enchantment pieces appearing. Each of the 16 dye colours boosts a different set of enchantments:
Candle ColourInfluenced Enchantments
WhiteUnbreaking
OrangeFire Protection
MagentaKnockback, Punch
Light BlueFeather Falling
YellowLooting, Fortune, Luck of the Sea
LimeBlast Protection
PinkSilk Touch, Channeling
GrayBane of Arthropods
Light GrayProtection
CyanRespiration, Loyalty, Infinity
PurpleSweeping Edge, Multishot
BlueEfficiency, Sharpness, Lure, Power, Impaling, Quick Charge
BrownAqua Affinity, Depth Strider, Riptide
GreenThorns, Piercing
RedFire Aspect, Flame
BlackSmite, Projectile Protection
Up to 4 candles of the same colour contribute (configurable via Influence Max). Each candle multiplies the probability weight of its enchantments by a configurable Influence Power factor (default 0.125 per candle). Soul candles — candles placed on top of or above Soul Sand or Soul Soil — dampen their associated enchantments instead of boosting them (configurable via Soul Candles Invert).

IEnchantmentInfluencer API

Any block can influence Matrix Enchanting by implementing org.violetmoon.quark.api.IEnchantmentInfluencer:
public interface IEnchantmentInfluencer {
    // Returns the influence colour as an RGB int
    int getEnchantmentInfluenceColor(BlockGetter world, BlockPos pos, BlockState state);

    // How many "stacks" of influence this block provides (default 1)
    default int getInfluenceStack(BlockGetter world, BlockPos pos, BlockState state) {
        return 1;
    }

    // Optional custom particle to emit near the enchanting table
    @Nullable
    default ParticleOptions getExtraParticleOptions(...) { return null; }

    // Returns true if this block boosts the given enchantment
    boolean influencesEnchantment(BlockGetter world, BlockPos pos, BlockState state,
                                  Holder<Enchantment> enchantment);

    // Returns true if this block dampens the given enchantment
    boolean dampensEnchantment(BlockGetter world, BlockPos pos, BlockState state,
                                Holder<Enchantment> enchantment);
}
Custom influence blocks from other mods can also be specified via the statesToInfluences config list using the format:
"blockstate;strength;color;enchantments"
For example:
statesToInfluences = [
  "minecraft:sea_pickle[pickles=1,waterlogged=false];1;#008000;minecraft:aqua_affinity,minecraft:depth_strider"
]

Notable Config Options

ConfigDefaultDescription
Max Bookshelves15Maximum bookshelf power the table reads
Charge Per Lapis4Number of piece charges each Lapis provides
Allow BookstrueAllow enchanted books to be created
Allow TreasuresfalseAllow treasure enchantments (Mending, etc.) to appear
Allow Undiscoverable EnchantmentsfalseAllow enchantments not in #minecraft:in_enchanting_table
Normalize RaritytrueFuzzes enchantment rarities for a more balanced feel
Allow Underwater EnchantingtrueTable works when surrounded by water instead of air
Dupe Multiplier1.4Increases probability of pieces for enchantments already on the item
Incompatible Multiplier0.0Prevents incompatible enchantment pieces from appearing (set to >0 to allow)

Magnets

Magnets are redstone-powered blocks that physically push or pull magnetic blocks and entities in the direction they face.

Magnetic Blocks

A block is considered magnetic if it is made from or crafted using one of the following materials (by recipe derivation):
  • Iron Ingot / Raw Iron / Iron Ore / Deepslate Iron Ore
  • Copper Ingot / Raw Copper / Copper Ore / Deepslate Copper Ore / Exposed/Weathered/Oxidized Copper
  • Quark’s Gravisand
Additional blocks can be added to the Magnetic Whitelist (e.g., Chipped Anvil, Damaged Anvil, chainmail armour) or removed via the Magnetic Blacklist (e.g., Tripwire Hook, Maps, Hanging Signs).

How Magnets Work

  1. Place a Magnet block. It faces in the direction you are looking when placed (configurable via the directional block state).
  2. Power it with a Redstone signal. The magnet lights up (emits light level 3) and begins scanning for magnetic blocks in the facing direction.
  3. Each tick, the magnet attempts to move magnetic blocks one step toward itself (attractor) or push them away (repulsor, depending on orientation and signal interpretation).
By default, magnets respect piston push rules — if a piston cannot move a block, neither can a magnet. Disable Use Piston Logic to allow magnets to move any magnetic block regardless of piston restrictions (this lets iron rods break through obsidian, for example). Magnets can be waxed with a Honeycomb to prevent accidental state changes, similar to waxed Copper. Stonecutter + Magnet: A Stonecutter pushed by a magnet silk-touches any block it moves through (up to a configurable max hardness of 3 by default).

Magnetic Entities

When Magnetic Entities is enabled, magnets also attract or repel entities listed in the #quark:affected_by_magnets entity type tag. The pull force follows an inverse square law (force decreases with distance). Default pull force is 0.18. When Magnetic Armor is enabled (requires Magnetic Entities), any living entity wearing magnetic armour pieces is also affected.

API for Modders

IMagnetMoveAction — implement on a Block to react to being moved by a magnet:
public interface IMagnetMoveAction {
    void onMagnetMoved(Level world, BlockPos pos, Direction direction,
                       BlockState state, BlockEntity tile);

    default boolean canMagnetMove(Level world, BlockPos pos, Direction direction,
                                   BlockState state, BlockEntity tile) {
        return true;
    }
}
IMagneticEntity — implement on an Entity to customise how it responds to magnetic force:
public interface IMagneticEntity {
    // Override to control or intercept the push/pull movement.
    // YOU are responsible for actually moving the entity when overriding this.
    default void moveByMagnet(Entity self, Vec3 moveDirection, BlockEntity tile) {
        self.push(moveDirection.x(), moveDirection.y(), moveDirection.z());
    }
}
See API Interfaces for full details.

Pipes

Pipes are Copper conduits that automatically move items between inventories. Connect two or more containers with pipes and items will flow through them.

Pipe Types

BlockDescription
Copper PipeStandard pipe; visually a thin copper tube that connects in all six directions. Waterloggable.
Encased PipeA pipe enclosed in a solid wooden casing. Same transport behaviour, different aesthetic. Toggle with Enable Encased Pipes.
Both types share the same BlockEntityType and are identified by the #quark:pipes block tag.

How Pipes Work

  • Pipes connect automatically to adjacent pipes and to containers (chests, barrels, hoppers, dispensers, etc.) that expose an IItemHandler capability.
  • Items travel through the pipe network at a configurable speed (default pipe speed of 5, effective speed = 5 × 2 = 10 ticks per pipe segment).
  • Up to 16 items (configurable via Max Pipe Items) can be in transit in a single pipe at once. Set to 0 for unlimited.
  • When items enter or exit a pipe, a whoosh sound is played (disable with Do Pipes Whoosh).
  • Pipes emit sculk vibrations when items pass through (Emit Vibrations, enabled by default).
  • Item models are rendered travelling through the pipe (Render Pipe Items, enabled by default).
Pipes pull from the first available slot of a connected inventory and push into the first available slot of the destination. They do not have built-in filtering; combine with hoppers or other mod filter systems for selective routing.

Crate

The Crate is a bulk-storage block that stores up to 640 items (configurable via Max Items), but only one item type at a time.

How it Differs from a Chest

FeatureChestCrate
Capacity27 slots × 64 itemsUp to 640 items of one type
Item typesAny mix of itemsOne item type only
Comparator outputSlot-based signalProportional signal (0–15 based on fill level)
SortingAny itemAuto-refuses wrong type
Right-click to open the Crate UI. Items are displayed as a running count and visible slot summary. Breaking the Crate drops all stored items. The Crate produces a Comparator signal proportional to its fill level:
  • Empty = 0
  • Any items = 1 (minimum, if not empty)
  • Full = 15
Custom names can be applied with an Anvil and are preserved when the Crate is broken and replaced.

Totem of Holding

When a player dies, their items are captured by an ethereal Totem of Holding entity that hovers at the death location instead of scattering as loose item entities.

Death Behaviour

  1. On death, all item drops are absorbed into a Totem of Holding that spawns at (or just above) the player’s death coordinates.
  2. The totem displays the player’s name above it so others can identify whose items it holds.
  3. The totem is fire-immune and floats in place.
  4. Walking into the totem (or right-clicking it) collects all items back into the player’s inventory.

Configuration

ConfigDefaultDescription
Dark Souls ModetrueIf the player dies again before retrieving their totem, the totem is destroyed (along with its items, unless Destroy Lost Items is false)
Destroy Lost ItemsfalseIf the totem is destroyed, items inside are also destroyed instead of being dropped
Allow Anyone to CollecttrueAny player can collect a totem’s items, not just the owner
Spawn Totem on PvP KillfalseBy default, totems do not spawn if a different player killed you. Enable to always spawn totems including PvP deaths. Note: totems always spawn for self-kills (fall damage, etc.)
With Dark Souls Mode on, prioritise retrieving your totem before you die again. If you die while the totem still exists, the totem is destroyed — and if Destroy Lost Items is also on, everything inside is permanently lost.

Curiosities Compatibility

If the Curios API mod is installed, the Totem of Holding also captures Curiosity slot items from the dead player’s Curios inventory.

Tiny Potato

The Tiny Potato is a small decorative block that can be placed on any surface, facing the direction you are looking.

Behaviour

  • Right-clicking the Tiny Potato makes it emit a heart particle and plays a soft interaction sound. This counts toward a Quark advancement (“Pat the Potato”).
  • The block has a very small hitbox (4×6×4 pixels) and is waterloggable.
  • It can hold items in a small internal inventory (drops them when broken).
  • Produces a Comparator signal based on the number of items inside.
  • Custom names can be applied with an Anvil. Named potatoes preserve their name when broken and re-placed.

The Angry Potato

Naming a Tiny Potato “angery” (intentional misspelling) gives it an angry face variant. This state is preserved when the block is broken and replaced.

Tiny Potato Skins

The Tiny Potato supports skin packs — custom model JSON files placed under assets/<modid>/models/tiny_potato/ in a resource pack or mod. Quark includes several skins out of the box, and the Botania mod adds additional ones if both are installed.
This module has antiOverlap = "botania" — if Botania is installed, Quark defers to Botania’s own Tiny Potato implementation and the Quark version is automatically disabled.

Build docs developers (and LLMs) love