Custom Cases

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

CaseItem.png

CasePreview.png

CasePreview.png

case.gif

case.gif

MultiCasesScreen.png

MultiCasesScreen.png

Zapadol | CasesMod
Create a server, get 25% off your first monthaffiliate logo
Create Server
affiliate banner image

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

๐Ÿš€ 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

The Custom Cases Team

profile avatar
Owner
  • 1
    Projects
  • 462
    Downloads

hi !