promotional bannermobile promotional banner

DungeonUltimate

DungeonMod lets you build fully configurable dungeons in-game — no complicated commands, no datapacks. Build your dungeon, outline it with a wand, and the mod handles the rest.
Back to Files

dungeonmod-0.23.2.jar

File namedungeonmod-0.23.2.jar
Uploader
az1_57az1_57
Uploaded
Aug 13, 2026
Downloads
37
Size
231.9 KB
Mod Loaders
NeoForge
File ID
8639646
Type
R
Release
Supported game versions
  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:dungeonultimate-1590363:8639646"

Learn more about Curse Maven

What's new

  • 🇺🇸 Version 0.23.2 - Major Instancing & Cleanup Fixes

    🔧 Critical fixes requested by community

    1. Per-Dungeon / Per-Group Cooldown (instead of global)

    Before: Launching a dungeon via Core A put ALL cores in cooldown.
    Now:

    • Cooldown is filtered by dungeonId linked to core + player/group UUID
    • New cooldownTextForDungeon(server, playerId, templateId) instead of global cooldownText
    • You can have dungeon A on cooldown for your group and launch dungeon B via another core without wait
    • GUI display fixed: LiveInfoService no longer shows cooldown from another dungeon

    2. Reset = only MY instance / MY group

    Before:

    • ResetPlayer sometimes wiped all instances
    • Confusing why everyone got kicked

    Now:

    • Button "Reset ALL runs" (BTN_RESET) : kept as-is intentionally → closes all active copies of THIS dungeon (for admin wipe)
    • Button "Reset a player..." : fully reworked
      • Network payload now includes corePos → ResetPlayerRunPayload(targetName, corePos)
      • Server resolves corePos → dungeonId → closes only instanceOfPlayerInDungeon(playerId, dungeonId)
      • No longer touches other groups even on same template / same core
    • New methods resetPlayerInstanceForDungeon() + resetMyInstanceForDungeon() for per-group reset

    3. 60s Cleaning Cooldown anti-dupe + anti-floating-items

    Before: close() did clearBox(air, flag 2) + immediate freeSlot() → slot instantly reusable → if another group launched during clear, floating items + duplication.

    Now:

    • ActiveInstanceManager has new Map CLEANINGslot -> CleanupEntry(min, max, freeAtTick)
    • close():
      1. rescueParticipants() → TP to overworld spawn
      2. clearEntitiesAndBlocks() → kill all ItemEntity, mobs, XP, etc.
      3. Keeps chunks forced + does NOT free slot, puts it in cleaning with freeAt = now + 1200 ticks (60s)
    • tickCleaning() → after 60s: unforce chunks + freeSlot()
    • USED_SLOTS stays blocked during cleaning → allocateSlot() cannot reuse → no dupe
    • GUI message during cleaning: §7🧹 Cleaning §fXs

    4. Lava and water not clearing

    Before: clearBox() used setBlock(AIR, 2) → flag 2 = no neighbor update → fluids remained.

    Now:

    • InstanceCopyService.clearBox() redone top-down (Y max → min) with flag 3 (UPDATE_ALL)
    • Skip if already air + fluid empty + no BE
    • Second pass to re-check remaining fluidState → re-set AIR
    • New clearEntities() + clearEntitiesAndBlocks() combo

    5. Unified cooldown system

    • InstanceManager.tick() now skips if (d.instanced()) continue; → only ActiveInstanceManager handles instanced dungeons
    • No more double handling putting all dungeons in cooldown

    6. Fix crash ModLoadingException on startup (v0.23.2-fixed3)

    • Crash: ClassNotFoundException: MenuScreens$ScreenConstructor (wrong package inventory.MenuScreens)
    • Fix: ClientSetup.registerSingle() uses Class.forName("net.minecraft.client.gui.screens.MenuScreens$ScreenConstructor") (without inventory) + Proxy that constructs screen via reflection
    • BlockEntityType.Builder.of private access → helper createBEType() via reflection + Proxy for BlockEntitySupplier
    • CreativeModeTab.builder() → reflection builder() no-arg or builder(Row.TOP,0)
    • openMenu with extra data → NeoForgeMenuHelper.openMenu() does getMethod("openMenu", MenuProvider, Consumer) via reflection → compiles against vanilla, works on NeoForge
    • SavedData.Factory → added DataFixTypes.LEVEL (1.21.1 API requires 3 args)

    📦 Mod content (reminder)

    • Dungeon Core: GUI hub, link selection, set entrance, config
    • Dungeon Entrance (light 15): pairing via right-click Core
    • Reward Chest: 27 slots template + % per slot /dungeon chestchance, objective-locked, per-player loot, visual aura
    • Dungeon Exit: TP back to core
    • Dungeon Spawner: configurable waves, EasyNPC support npc:<preset>
    • Dimension dungeonmod:instances: 1024 blocks grid, infinite slots, force-loaded chunks
    • Party system: create, invite, kick-vote, maxGroupSize configurable

    🧪 Recommended tests

    1. Group A launches dungeon A via Core A, Group B launches same dungeon A → 2 different slots, independent cooldown
    2. Open Core B while A is on cooldown → B available
    3. Admin Core A → Reset player → player from Group A → only Group A reset
    4. Close instance with items/lava → check instances dimension empty + slot blocked 60s
    5. Waterlogging: water bucket in dungeon → close → water cleared

    📥 Installation

    • NeoForge 1.21.1 (21.1.231)
    • Java 21
    • Jar in mods/ on both server AND client
    • Config: world/serverconfig/dungeonmod-server.toml
      •  

      • 🇫🇷 Version 0.23.2 - Correctifs Majeurs Instanciation & Nettoyage

        🔧 Corrections critiques demandées par la communauté

        1. Cooldown par donjon / par groupe (au lieu de global)

        Avant : Quand tu lançais un donjon via le Noyau A, TOUS les noyaux passaient en cooldown.
        Maintenant :

        • Le cooldown est filtré par dungeonId lié au noyau + par UUID du joueur/groupe
        • cooldownTextForDungeon(server, playerId, templateId) au lieu de cooldownText(server, playerId) global
        • Tu peux avoir le donjon A en cooldown pour ton groupe, et lancer le donjon B via un autre noyau sans attente
        • Affichage GUI corrigé : LiveInfoService n'affiche plus le cooldown d'un autre donjon

        2. Reset = seulement MON instance / MON groupe

        Avant :

        • ResetPlayer resettait parfois toutes les instances
        • Difficulté à comprendre pourquoi tout le monde était kick

        Maintenant :

        • Bouton "Réinitialiser TOUS les runs" (BTN_RESET) : inchangé volontairement → ferme bien toutes les copies de CE donjon (pour admin qui veut wipe)
        • Bouton "Réinitialiser un joueur..." : complètement refait
          • Le payload réseau inclut maintenant corePos → ResetPlayerRunPayload(targetName, corePos)
          • Serveur résout corePos → dungeonId → ferme uniquement instanceOfPlayerInDungeon(playerId, dungeonId)
          • Ne touche plus les autres groupes même s'ils sont sur le même template / même noyau
        • Nouvelle méthode resetPlayerInstanceForDungeon() + resetMyInstanceForDungeon() pour reset per-groupe

        3. Cooldown de nettoyage 60s anti-dupe + anti-items flottants

        Avant : close() faisait clearBox(air, flag 2) + freeSlot() immédiat → slot réutilisable instantanément → si un autre groupe lançait pendant le clear, items flottants + duplication.

        Maintenant :

        • ActiveInstanceManager a une nouvelle Map CLEANING : slot -> CleanupEntry(min, max, freeAtTick)
        • close() :
          1. rescueParticipants() → TP spawn overworld
          2. clearEntitiesAndBlocks() → kill tous les ItemEntity, mobs, XP, etc.
          3. Garde les chunks forcés + ne libère PAS le slot, mais le met en nettoyage avec freeAt = now + 1200 ticks (60s)
        • tickCleaning() → après 60s : unforce chunks + freeSlot()
        • USED_SLOTS reste bloqué pendant nettoyage → allocateSlot() ne peut pas réallouer → pas de dupe
        • Message GUI pendant nettoyage : §7🧹 Nettoyage §fXs

        4. Lave et eau ne se clearaient pas

        Avant : clearBox() faisait setBlock(AIR, 2) → flag 2 = pas de neighbor update → fluides restaient.

        Maintenant :

        • InstanceCopyService.clearBox() refait en top-down (Y max → min) avec flag 3 (UPDATE_ALL)
        • Skip si déjà air + fluid vide + pas de BE
        • Deuxième passe pour re-check fluidState restant → re-set AIR
        • Nouvelle méthode clearEntities() + clearEntitiesAndBlocks() combinée

        5. Système de cooldown unifié

        • InstanceManager.tick() skip maintenant if (d.instanced()) continue; → seul ActiveInstanceManager gère les donjons instanciés
        • Plus de double gestion qui mettait tous les donjons en cooldown

        6. Fix crash ModLoadingException au démarrage (v0.23.2-fixed3)

        • Crash: ClassNotFoundException: MenuScreens$ScreenConstructor (mauvais package inventory.MenuScreens)
        • Fix: ClientSetup.registerSingle() utilise Class.forName("net.minecraft.client.gui.screens.MenuScreens$ScreenConstructor") (sans inventory) + Proxy qui construit l'écran via reflection
        • BlockEntityType.Builder.of private access → helper createBEType() via reflection + Proxy pour BlockEntitySupplier
        • CreativeModeTab.builder() → reflection builder() no-arg ou builder(Row.TOP,0)
        • openMenu avec extra data → NeoForgeMenuHelper.openMenu() fait getMethod("openMenu", MenuProvider, Consumer) en reflection → compile en vanilla, fonctionne en NeoForge
        • SavedData.Factory → ajout DataFixTypes.LEVEL (API 1.21.1 requiert 3 args)

        📦 Contenu du mod (rappel)

        • Noyau de Donjon : GUI hub, lier sélection, définir entrée, config
        • Entrée de Donjon (lumière 15) : appairage par clic droit Noyau
        • Coffre de Récompense : 27 slots template + % par slot /dungeon chestchance, verrouillage par objectif, loot per-player, aura visuelle
        • Sortie de Donjon : TP retour core
        • Spawner de Donjon : vagues configurables, support EasyNPC npc:<preset>
        • Dimension dungeonmod:instances : grid 1024 blocs, slots infinis, force-load chunks
        • Party system : création, invite, kick-vote, maxGroupSize configurable

        🧪 Tests recommandés

        1. Groupe A lance donjon A via Noyau A, Groupe B lance même donjon A → 2 slots, cooldown indépendant
        2. Ouvrir Noyau B pendant que A est en cooldown → B disponible
        3. Admin Noyau A → Reset joueur → joueur de Groupe A → seul Groupe A reset
        4. Fermer instance avec items/lave → vérifier dimension instances vide + slot bloqué 60s
        5. Waterlogging : seau d'eau dans donjon → fermeture → eau clear

        📥 Installation

        • NeoForge 1.21.1 (21.1.231)
        • Java 21
        • Jar dans mods/ côté serveur ET client
        • Config : world/serverconfig/dungeonmod-server.toml

This mod has no additional files