Custom Cases

Quick rating

Community listing page, reviews here may not be monitored by the author.

Custom Cases

No reviews yet

Add immersive Loot Cases to Minecraft - with CSGO-style animations, fully configurable via JSON files and easily insertable into any custom loot table.

Mod Loaders
Minecraft

About

Description

🎰 Custom Cases Mod

Animated Loot Cases for Minecraft!

Open a case. Watch the CS:GO-style roulette spin. Claim your reward.

  • Loot cases are 100% configurable.

✨ Features

🎮 Gameplay

  • 🎰 CS:GO-style roulette — smooth two-phase easing (cubic in → exponential out)
  • 🃏 Open ×5 — open five cases simultaneously in a side-by-side view
  • 🔍 Case preview — left-click any case to inspect its full loot table with exact drop rates
  • 🏆 Legendary broadcast — server-wide chat message and sound when a legendary item is won, synced with the exact moment the roulette stops

⚙️ Technical

  • 📁 100% customizable cases — defined as JSON files in \config\CasesMod\cases\, no code required
  • 🔄 Live reload — /casesmod reload instantly applies changes without restarting
  • 🔒 Reward escrow — unclaimed rewards are safely stored server-side, even after disconnects
  • 🛡️ Server-authoritative system — all rolls happen server-side; clients only receive animation data

🎨 Customization — \config\CasesMod\cases\

  • 5 rarity tiers, each with configurable particle effects (type, count, enabled/disabled)
  • Configurable spin duration, legendary sound ID, and broadcast scope (winner-only or global)
  • Per-item customization :
  • Name,
  • Rarity,
  • Drop chance (%),
  • Enchantments,
  • Attributes,
  • CustomModelData,
  • Stack size ranges,
  • NBT - (CasesMod 1.1.0 and above)

🖌️ Textures

➡️ You can add, modify, or remove textures for cases and GUIs by opening the .jar file (for example with WinRAR) and navigating to:
\resources\assets\casesmod\

You can modify or add:

  • case_<CaseID>.png
  • case_gui_<CaseID>.png
  • multi_case_gui_<CaseID>.png
  • spin_overlay_<CaseID>.png

⚠️ All players must use the same modified mod version ⚠️

  • Resource pack support: planned, not yet tested

💎 Rarity Tiers

Rarity Color Default Particles
⬜ Common White None
🟩 Uncommon Green None
🟦 Rare Blue ✨ Enchantment sparks ×15
🟪 Epic Purple 💜 Hearts ×20
🟨 Legendary Gold 🌟 Totem particles ×50

📦 Adding a Case

Drop a .json file into \config\CasesMod\cases\ and run /casesmod reload (does not requires restart to apply).

{
  "caseName": "Weapon Case",
  "caseId": 3,
  "XP_price": false,
  "XP": 1,
  "Item_price": false,
  "Item": "minecraft:chest,
  "Item_count": 1,
  "Command_price": false,
  "Command": "/give %player% minecraft:chest",
  "loot": [
    { 
      "item": "minecraft:iron_sword", 
      "min": 1,
      "max": 1,
      "chance": 40, 
      "rarity": "common" 
    },
    { "item": "minecraft:diamond_sword", 
      "chance": 20, 
      "rarity": "rare",
      "enchantments": [{ "id": "minecraft:sharpness", "level": 3 }] 
    },
    {
      "item": "minecraft:diamond_sword",
      "min": 1,
      "max": 1,
      "chance": 4.76,
      "rarity": "epic",
      "displayName": "§6★ Diamond Sword ★",
      "customModelData": 1,
      "attributes": [
        { "name":"minecraft:generic.attack_damage","value": 10.0,"slot":"mainhand"},
        { "name":"minecraft:generic.armor","value": 5.0,"slot":"chest"}],
      "enchantments": [
        { "id": "minecraft:sharpness",  "level": 5 },
        { "id": "minecraft:unbreaking", "level": 3 },
        { "id": "minecraft:looting",    "level": 3 }]
    },
    {
      "item": "minecraft:chest",
      "min": 1,
      "max": 2,
      "chance": 60.76,
      "rarity": "epic",
      "NBT": "BlockEntityTag:{Items:[{Slot:0,id:acacia_fence,Count:1},{Slot:15,id:acacia_slab,Count:1}]},Enchantments:[{lvl:1,id:depth_strider}]"
    }
  ]
}

Chances do not need to total 100 — they are automatically normalized. Both "chance" and "weight" are supported.

🪤 Adding a Case in Loot Table

Drop a .json file into data/<your_mod>/loot_tables/ or use a Global Loot Modifier.

The function casesmod:set_case_id adds the NBT tags CaseID and CustomModelData to the item casesmod:case_item. The Case_ID must match a file in /config/CasesMod/cases/<Case>.json on the server.

Here: 30% chance to get Case #1, 10% chance to get Case #2.

{
  "type": "minecraft:chest",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "casesmod:case_item",
          "weight": 3,
          "functions": [
            {
              "function": "casesmod:set_case_id",
              "case_id": 1
            }
          ]
        },
        {
          "type": "minecraft:item",
          "name": "casesmod:case_item",
          "weight": 1,
          "functions": [
            {
              "function": "casesmod:set_case_id",
              "case_id": 2
            }
          ]
        },
        {
          "type": "minecraft:empty",
          "weight": 6
        }
      ]
    }
  ]
}

⚙️ Configuration

\config\CasesMod\CasesMod.yml (requires restart to apply):

Option Default Description
spinDurationTicks 100 (5 s) Duration of the roulette animation
multiOpenEnabled true Enables the Open ×5 feature
particles rarity enabled varies Enable or disable particles per rarity
particles rarity type varies Particle type (ResourceLocation)
particles rarity count varies Number of particles spawned

🌟 Legendary Events

Configure in /config/CasesMod/CasesMod.yml:

legendary:
  message: "§6[CasesMod] §r{player} §6obtained §r{item} §6(Legendary)!"
  sound_enabled: true
  sound_broadcast: true   # false = only the winner hears it
  sound_id: "minecraft:entity.wither.spawn"

The message and sound trigger when the roulette stops, ensuring perfect visual synchronization.


🔧 Commands

Requires operator permission (level 2).

Command Description
/casesmod give <player> <CaseId> or /give <player> casesmod:case_item{CaseID:<CaseId>} 🎁 Give a specific case
/casesmod list 📋 List all loaded cases
/casesmod reload 🔄 Reload all JSON files

📜​​ Fabric Version


🚀 FAQ

Q: Can I use this on my modpack?

A: Yes, for sure !

Q: Can I use this on my server?

A: Yes, for sure !

Q: Can I create an addon for this mod?

A: Yes, for sure !

Q: Where can I report bugs?

A: Use the Issues tab on CurseForge or contact me via Discord (link in profile).


​📋​ License

The mod's source code will be uploaded to GitHub soon.

This project is All Rights Reserved.

You may:

  • Modify and use privately
  • Use in modpacks (downloaded directly from CurseForge/Modrinth)

Forks:

Forks are only permitted for submitting pull requests to the upstream repository.

Restrictions:

  • Any public publication/upload requires my prior written authorization
  • Redistribution of builds or rehosting is strictly prohibited