Skip to content

ModVersionGuard & Sécurité à l'Exécution (MC 26.2)

Ce document détaille les vérifications de classloader sans dépendance, l'architecture de protection de version et mécanismes de sécurité du bytecode dans Item Clumps pour Minecraft 26.2.


📊 Fiche Technique de Fonctionnalité

PropriétéValeur
Nom du SystèmeGardien de Version Knot ClassLoader
Classe Ciblenet.instantgratification.item_clumps.util.ModVersionGuard
Classe Vérifiéenet.minecraft.world.entity.item.ItemEntity
Vérification de Bibliothèquenet.dasik.social.api.config.ConfigHelper (Nécessite DasikLibrary $\ge 1.7.4$)
Objectif de SécuritéPrévenir la corruption de monde en cas de version d'API Minecraft incompatible

🛡️ Architecture du Knot ClassLoader

Dans Fabric Loader, les classes de mods sont réparties sur différents classloaders (Knot vs Système). Un simple Class.forName(name) peut échouer s'il n'interroge pas le chargeur de contexte du thread actif.

Item Clumps utilise une résolution de chargeur de classes à deux niveaux :

                     ┌───────────────────────────────────┐
                     │ ModVersionGuard.checkClass Invoked│
                     └─────────────────┬─────────────────┘


                     ┌───────────────────────────────────┐
                     │ Query Knot Thread Context Loader  │
                     │ Thread.currentThread()            │
                     │   .getContextClassLoader()        │
                     └─────────────────┬─────────────────┘

                      ┌────────────────┴────────────────┐
                      │ (Success)                       │ (ClassNotFoundException)
                      ▼                                 ▼
        ┌───────────────────────────┐     ┌───────────────────────────┐
        │ Game Continues Execution  │     │ Fallback to Current Loader│
        │ Safe Runtime Verified     │     │ ModVersionGuard.class     │
        └───────────────────────────┘     │   .getClassLoader()       │
                                          └─────────────┬─────────────┘

                                       ┌────────────────┴────────────────┐
                                       │ (Success)                       │ (ClassNotFoundException)
                                       ▼                                 ▼
                         ┌───────────────────────────┐     ┌───────────────────────────┐
                         │ Game Continues Execution  │     │ Throw Descriptive Warning │
                         │ Safe Runtime Verified     │     │ Halt Corrupted World Load │
                         └───────────────────────────┘     └───────────────────────────┘

💻 Implémentation du Code Source Java Réel

Depuis ModVersionGuard.java dans Minecraft 26.2 :

java
// Copyright (C) 2026 Dasik (Rifaditya) | GNU GPLv3
package net.instantgratification.item_clumps.util;

public final class ModVersionGuard {
    private ModVersionGuard() {}

    public static void checkClass(String modName, String requiredClassName) {
        ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
        ClassLoader currentLoader = ModVersionGuard.class.getClassLoader();
        try {
            if (contextLoader != null) {
                Class.forName(requiredClassName, false, contextLoader);
            } else {
                Class.forName(requiredClassName, false, currentLoader);
            }
        } catch (ClassNotFoundException e) {
            try {
                Class.forName(requiredClassName, false, currentLoader);
            } catch (ClassNotFoundException e2) {
                throw new RuntimeException("\n" +
                    "=====================================================================\n" +
                    " [PRE-RELEASE / VERSION GUARD WARNING] " + modName + "\n" +
                    "---------------------------------------------------------------------\n" +
                    " CRITICAL: Incompatible Minecraft Game Runtime or Missing Class!\n" +
                    " Required Class : " + requiredClassName + "\n" +
                    " Status         : UNRESOLVED AT RUNTIME\n\n" +
                    " Safety Protection:\n" +
                    " Execution halted to prevent unreleased/incompatible build deployment\n" +
                    " or broken world state save corruption.\n\n" +
                    " Troubleshooting Steps:\n" +
                    " 1. Verify target Minecraft version (26.2+ release drop).\n" +
                    " 2. Ensure all required dependencies (Fabric API, DasikLibrary) are loaded.\n" +
                    " 3. Build/Download a verified matching release JAR from Modrinth/CurseForge.\n" +
                    "=====================================================================");
            }
        }
    }
}

🔗 Documentation Associée (MC 26.2)

Official documentation & web portal for Dasik Igaijinn mods.