XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

MyDimension-Lord

【我的世界】我的维度附属模组:维度之主

公开
关注 0 Fork 0 Star 0
UTF-8
// Native Minecraft 1.21.11
package com.xfestudio.mydimensionlord.platform;

import java.lang.reflect.InvocationTargetException;
import java.util.Locale;
import java.util.function.Consumer;
import net.minecraft.core.registries.Registries;
import net.minecraft.gametest.framework.*;
import net.minecraft.resources.Identifier;
import net.minecraft.resources.ResourceKey;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.event.RegisterGameTestsEvent;

public final class PortGameTests {
    private static final Class<?>[] SUITES = {
        com.xfestudio.mydimensionlord.builder.BuilderGameTests.class,
        com.xfestudio.mydimensionlord.builder.BuilderInteractionGameTests.class,
        com.xfestudio.mydimensionlord.builder.anchor.ResonantSupplyAnchorGameTests.class,
        com.xfestudio.mydimensionlord.builder.AddonIntegrationGameTests.class,
        com.xfestudio.mydimensionlord.equipment.EquipmentGameTests.class,
        com.xfestudio.mydimensionlord.equipment.PickaxeGameTests.class
    };
    public static void register(IEventBus bus) {
        DeferredRegister<Consumer<GameTestHelper>> functions = DeferredRegister.create(Registries.TEST_FUNCTION, "mydimension_lord");
        for (Class<?> suite : SUITES) for (var method : suite.getDeclaredMethods()) {
            if (!method.isAnnotationPresent(GameTest.class)) continue;
            functions.register(method.getName().toLowerCase(Locale.ROOT), () -> helper -> {
                try { method.invoke(null, helper); }
                catch (InvocationTargetException e) {
                    if (e.getCause() instanceof RuntimeException runtime) throw runtime;
                    if (e.getCause() instanceof Error error) throw error;
                    throw new RuntimeException(e.getCause());
                } catch (ReflectiveOperationException e) { throw new RuntimeException(e); }
            });
        }
        functions.register(bus);
        bus.addListener(PortGameTests::registerInstances);
    }
    private static void registerInstances(RegisterGameTestsEvent event) {
        var environment = event.registerEnvironment(id("default"));
        for (Class<?> suite : SUITES) for (var method : suite.getDeclaredMethods()) {
            GameTest metadata = method.getAnnotation(GameTest.class);
            if (metadata == null) continue;
            Identifier name = id(method.getName().toLowerCase(Locale.ROOT));
            event.registerTest(name, new FunctionGameTestInstance(ResourceKey.create(Registries.TEST_FUNCTION, name),
                    new TestData<>(environment, id("empty"), metadata.timeoutTicks(), 0, true)));
        }
    }
    private static Identifier id(String path) { return Identifier.fromNamespaceAndPath("mydimension_lord", path); }
}