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ème | Gardien de Version Knot ClassLoader |
| Classe Cible | net.instantgratification.item_clumps.util.ModVersionGuard |
| Classe Vérifiée | net.minecraft.world.entity.item.ItemEntity |
| Vérification de Bibliothèque | net.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" +
"=====================================================================");
}
}
}
}