Skip to content

ModVersionGuard e Segurança em Tempo de Execução (MC 26.2)

Este documento detalha as verificações em tempo de execução sem dependências, arquitetura de proteção de versão e mecanismos de proteção de bytecode no Item Clumps para Minecraft 26.2.


📊 Ficha Técnica do Recurso

PropriedadeValor
Nome do SistemaProtetor de Versão Knot ClassLoader
Classe Alvonet.instantgratification.item_clumps.util.ModVersionGuard
Classe Verificadanet.minecraft.world.entity.item.ItemEntity
Verificação de Bibliotecanet.dasik.social.api.config.ConfigHelper (Requer DasikLibrary $\ge 1.7.4$)
Objetivo de SegurançaEvitar corrupção do mundo se carregado em uma API do Minecraft incompatível

🛡️ A Arquitetura do Knot ClassLoader

No Fabric Loader, classes de mods são carregadas em classloaders distintos (Knot ClassLoader vs. classloader do sistema). Uma chamada padrão a Class.forName(name) pode falhar indevidamente se não consultar o classloader do contexto da thread ativa.

O Item Clumps implementa uma resolução de classloader em dois estágios:

                     ┌───────────────────────────────────┐
                     │ 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 │
                         └───────────────────────────┘     └───────────────────────────┘

💻 Implementação do Código-Fonte Java Real

De ModVersionGuard.java no 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" +
                    "=====================================================================");
            }
        }
    }
}

🔗 Documentação Relacionada (MC 26.2)

Official documentation & web portal for Dasik Igaijinn mods.