SolLib

SolLib

让模组通过带来一系列(大部分)数据实用工具而大放异彩。

横幅

这是一个 Minecraft 模组的核心库。是的,我们知道,这很常见。

信不信由你,在每个项目中复制粘贴一堆类既不是最高效也不是最稳定的方案。


Sol 为模组开发提供了一整套通用的代码支持。

其中大部分围绕数据、多加载器和渲染辅助功能展开。一些关键亮点包括:

简易配置系统。

可按需即时加载,设置简单,其他模组无需硬依赖即可访问。

SolConfig config = MOD.createConfig("sollib/test", 1.0, builder -> builder
    .addObject("category", category -> category
        .comment("这是一条注释")
        .add("hello", "world")
        .add("easyconfig", true)
    )
);

MOD.getLogger().info(config.get("category.hello", ""));
// world

由代码控制的运行时数据。

这允许你在运行时编辑数据包文件,例如根据配置值更改配方,在目标模组未加载时编辑或禁用兼容配方,为动态定义的物品自动生成模型,以及更多功能。

SolRegistries.Data.RUNTIME.addJson(Identifier.of("minecraft", "recipe/dropper.json"), json -> {
    if (json == null) return null;
    if (!config.get("recipe.copper_dropper", false)) return null;

    json.getAsJsonObject("key")
            .getAsJsonObject("#")
            .addProperty("item", "minecraft:copper_ingot");
    return json;
});

渲染辅助工具。

集中且与加载器无关。也不需要再写更多 mixin 了。

ResourceLocation TEXTURE = MOD.makeID("textures/models/sword_overlay.png");

SolClientRegistries.Render.ITEM.register(stack -> stack.is(Items.DIAMOND_SWORD) && stack.isEnchanted(),
        (stack, context, matrices, bufferSource, light, overlay) -> {
    matrices.scale(1.005f, 1.005f, 1.005f);
    matrices.translate(0, 0.995, 0.4975);
    matrices.mulPose(Axis.XP.rotationDegrees(180));

    MockItemRenderer.renderItem(matrices, bufferSource, light, TEXTURE);
});

简化注册表。

你可以在公共代码中调用,包含你需要的所有语法糖:同时定义模型、燃烧时间、去皮结果以及某个特性的所有内容。

MOD.register(BlockHolder.class, "block_block", () -> new Block(BlockBehaviour.Properties.of()))
    .withItem(item -> item.withFuel(200)).dropsSelf()
    .withSlab().withStairs().withWall()
    .withFlammability(20, 5);

对于普通用户来说,把这个页面做得尽善尽美其实并不重要。毕竟它只是一个库而已。

但如果你是一名开发者并且对此感到好奇,最好的学习方式是阅读(仍在完善中的)Wiki 或加入 Discord。