Temporal API

Temporal API

时间API是Team Temporal模组的库,其他项目也可以使用它。

基础库

Temporal API 是 Team Temporal 模组的官方库,其他项目、模组作者和整合包制作者可以随意将其用于他们的项目。

本模组的主要目标是让创建模组变得更容易、更灵活!

要使用我们的库,你需要前往 build.gradle 并添加以下内容:

repositories {
    maven {
        url "https://cursemaven.com"
    }
}

dependencies {
    implementation fg.deobf("curse.maven:temporalapi-970291:<file-id>")
    
    ...
}

你需要将 <file id> 替换为文件 ID,可以在所需版本模组文件链接的末尾找到该 ID。

当前版本的库添加了:

工厂, 标签工具, 创造模式标签页工具, 与村民和流浪商人的交易自定义器, 世界特性工具, 物品属性工具, FOV 修改器 等等 工厂与扩展 工厂用于创建 RegistryObject 对象,并使它们的创建变得更加容易。

要使用 API 中的 ItemFactory,你需要像这样创建一个 ItemFactoryFacade 类:

public class ModItemFactoryFacade extends ItemFactory {
    public ModItemFactoryFacade() {
        super(ModItems.ITEMS);
    }
}

你也可以使用 API 中的扩展来扩展你的工厂门面,或者创建你自己的扩展。

以下是使用 SwordExtension 的两个示例(使用此扩展后,剑的创建变得更加容易):

像这样:

public class ModItemFactoryFacade extends ItemFactory implements SwordExtension {
    public ModItemFactoryFacade() {
        super(ModItems.ITEMS);
    }
}

或者像这样:

public class ModItemFactoryFacade extends ItemFactory implements SwordExtension {
    public ModItemFactoryFacade() {
        super(ModItems.ITEMS);
    }

    public RegistryObject<SwordItem> createSword(String name, Object... args) {
        return SwordExtension.super.createSword(name, this, args);
    }

    public RegistryObject<? extends SwordItem> createSword(String name, Supplier<? extends SwordItem> tTypedSupplier) {
        return SwordExtension.super.createSword(name, this, tTypedSupplier);
    }
}

那么,如何使用这个门面类来创建我们的对象呢:

public class ModItems {
    public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(Registries.ITEM, "MOD_ID");
    public static final ModItemFactoryFacade ITEM_FACTORY = new ModItemFactoryFacade();

    public static final RegistryObject<Item> MY_ITEM_1 = ITEM_FACTORY.create("my_item_1");
    public static final RegistryObject<Item> MY_ITEM_2 = ITEM_FACTORY.create("my_item_2", new Item.Properties());
    public static final RegistryObject<Item> MY_ITEM_3 = ITEM_FACTORY.create("my_item_3", () -> new Item(new Item.Properties()));

    // 上方第一个创建门面对象的示例
    public static final RegistryObject<SwordItem> MY_SWORD_1 = ITEM_FACTORY.createSword("my_sword_1", ITEM_FACTORY, Tiers.STONE, 3, -2.4F);
    public static final RegistryObject<? extends SwordItem> MY_SWORD_2 = ITEM_FACTORY.createSword("my_sword_2", ITEM_FACTORY, () -> new SwordItem(Tiers.STONE, 3, -2.4F, new Item.Properties()));

// 上方第二个创建门面对象的示例
    public static final RegistryObject<SwordItem> MY_SWORD_3 = ITEM_FACTORY.createSword("my_sword_3", Tiers.STONE, 3, -2.4F);
    public static final RegistryObject<? extends SwordItem> MY_SWORD_4 = ITEM_FACTORY.createSword("my_sword_4", () -> new SwordItem(Tiers.STONE, 3, -2.4F, new Item.Properties()));
}

现在让我们看看 args... 数组。它是用于创建对象的参数数组(未来将更改以提高可读性)。

当前可用的工厂和扩展:

ItemFactory (ArrowExtension, BowExtension, BowlExtension, MusicDiscExtension, SmithingTemplateExtension, SwordExtension, AxeExtension, PickaxeExtension, ShovelExtension, HoeExtension)
BlockFactory (BushExtension, FlowerExtension, PottedFlowerExtension)
ParticleFactory
EffectFactory
PaintingFactory
PotionFactory
SoundEventFactory
CreativeTabFactory
EntityFactory
标签工具
标签工具专注于标签创建,并使标签的使用更加容易。

例如,如果你想创建一个物品标签,你需要使用 ItemTagFactory:

public class MyItemTags {
    public static final TagFactory<Item> TAG_FACTORY = new ItemTagFactory("MY_MOD_ID");

    public static final TagKey<Item> MY_TAG = TAG_FACTORY.createTag("my_tag");
}
创造模式标签页工具
创造模式标签页工具用于将物品添加到你需要的创造模式标签页中。

首先,我们需要前往我们订阅模组事件的类,并添加此函数(方法的内部部分仅为示例):

@SubscribeEvent
public void addCreativeTabs(BuildCreativeModeTabContentsEvent event) {
    new SimpleTabAdder(event)
            .addAllToTab(CreativeModeTabs.INGREDIENTS, ModItems.MY_ITEM_1, ModItems.MY_ITEM_2, ModItems.MY_ITEM_3)
            .addAllToTab(CreativeModeTabs.COMBAT, ModItems.MY_SWORD_1, ModItems.MY_SWORD_2, ModItems.MY_SWORD_3);
}

与村民和流浪商人交易的工具 TemporalAPI 使交易变得更加容易。以下是一个示例:

public static final TradeCustomizer tradeCustomizer = new SimpleTradeCustomizer();

@SubscribeEvent
public void customizeTradesWithVillagers(VillagerTradesEvent event) {
    tradeCustomizer.customize(event, new VillagerTrade(
            new TradingItemHolder(Items.ANDESITE, 2),
            new TradingItemHolder(Items.EMERALD, 3),
            new VillagerTradeDescription(
                    VillagerProfession.ARMORER, 1, 5, 5, 0.5f
            )
    ));
}

@SubscribeEvent
public void customizeTradesWithWanderers(WandererTradesEvent event) {
    tradeCustomizer.customize(event, new WandererTrade(
            new TradingItemHolder(Items.ANDESITE, 2),
            new TradingItemHolder(Items.EMERALD, 3),
            new WandererTradeDescription(
                    WandererTradeDescription.TradeRarity.RARE, 5, 5, 0.5f
            )
    ));
}

世界特性工具 将在未来的更新中扩展。

物品属性工具 为弓、盾牌等添加所需的属性。

@SubscribeEvent
public void clientSetup(final FMLClientSetupEvent event) {
    event.enqueueWork(() -> {
        TemporalItemProperties.makeBow(ModItems.MY_BOW_1);
        TemporalItemProperties.makeShield(ModItems.MY_SHIELD_1);
        TemporalItemProperties.makeCrossbow(ModItems.MY_CROSSBOW_1);
        TemporalItemProperties.putCompostable(ModBlocks.MY_FLOWER_1, 4);
    });
}

常见问题解答:

这个模组会推出 Fabric 版本吗: 不会,没有计划推出 Fabric 版本

我可以在我的整合包中使用这个模组吗: 可以,请随意在任何整合包中使用此模组!

我如何建议功能或报告错误: 加入我们上方的 Discord 以获取任何评论、问题、建议或疑难解答!