Skip to content

ModVersionGuard и безопасность во время выполнения (MC 26.2)

Этот документ описывает проверки загрузчика классов без внешних зависимостей, архитектуру контроля версий и защиту байткода в Minecraft 26.2.


📊 Информационный блок функции

СвойствоЗначение
Имя системыЗащита версий загрузчика Knot
Целевой классnet.instantgratification.item_clumps.util.ModVersionGuard
Проверяемый классnet.minecraft.world.entity.item.ItemEntity
Проверка библиотекиnet.dasik.social.api.config.ConfigHelper (требуется DasikLibrary $\ge 1.7.4$)
Цель безопасностиПредотвратить повреждение мира при несовместимом API Minecraft

🛡️ Архитектура загрузчика классов Knot

В Fabric Loader классы модов загружаются разными загрузчиками (Knot ClassLoader и системный загрузчик). Обычный вызов Class.forName(name) может завершиться ошибкой, если не запросить контекстный загрузчик потока.

Item Clumps использует двухэтапное разрешение через загрузчик классов:

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

💻 Исходный код реализации на Java

Из ModVersionGuard.java в 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" +
                    "=====================================================================");
            }
        }
    }
}

🔗 Связанная документация (MC 26.2)

Official documentation & web portal for Dasik Igaijinn mods.