Revelationary

Revelationary

数据驱动方块与物品揭秘系统。边玩边发现!

一件披着斗篷的物品

概述

数据驱动的方块与物品揭示系统。边探索边发现!

Revelationary 提供了一种通过数据包或 API(供其他模组使用)在世界中逐步解锁新方块发现的方式。 使用 Revelationary,你可以设计你的整合包/模组进度,让玩家在开始新游戏时不会感到不知所措。只有当玩家解锁了特定的进度后,他们才能感知到这些世界生成方块,使该方块对他们可见。

示例: 玩家看到某种矿石是石头。当他们击败末影龙后,他们就能在世界中看到并挖掘你的矿石了——它从一开始就在那里。每个玩家独立生效,并且性能极佳。

揭示

“揭示即是对某种真理或知识的显露或披露”

如果你是一个以进度为核心的模组或整合包的设计者,你来对地方了。

通过 Revelationary,你可以使用数据包或 Revelation API,随着玩家的进度逐步揭示世界中的方块。一个平淡无奇的石缝,在玩家击败 Boss 或达到重要里程碑时,可能会被揭示为充满生机和矿石。

只要玩家没有必要的进度,你通过 API 或数据包注册到 Revelationary 的方块和物品将只会显示神秘的名字,而对于世界中的方块,它们会掉落其伪装方块等同的战利品,为玩家提供无缝体验,不会被他们在开始时无法使用的未知资源淹没。相反,你可以在玩家真正需要时引入新资源。

局限性

除了视觉效果和掉落物之外,伪装的方块保留了原方块的所有属性:碰撞箱、光线是否穿过以及其他一切。在寻找合适的伪装对象时请记住这一点。例如,你的矿石的完美伪装可以是石头或深板岩,因为它们有很多相似之处。同样,你可以用虞美人来伪装你的稀有植物:两者都有较小的碰撞箱,玩家可以从中穿过。

如果你是一名程序员,你可以使用 Revelation API,根据方块是否对玩家可见来动态更改其属性。这样,你甚至可以将你的花伪装成空气:在伪装时给它一个空的碰撞箱,你的玩家可能直到能看到它们时,才会知道它们在那里!

在 Revelationary 的 wiki 中找到许多数据包和 API 的示例:https://github.com/DaFuqs/Revelationary/wiki

通过数据包注册揭示

必须放置在文件夹 resources/data/<<mod_id>>/revelations 中

{
  "advancement": "spectrum:milestones/reveal_quitoxic_reeds",
  "block_states": {
    "minecraft:grass": "minecraft:beacon",
    "minecraft:tall_grass": "minecraft:obsidian",
    "minecraft:tall_grass[half=upper]": "minecraft:netherite_block"
  },
  "items": {
    "minecraft:nether_star": "minecraft:gunpowder"
  }
}

注册一个“感知揭示”的方块或物品

public class CloakedItem extends Item implements RevelationAware {

    Identifier cloakAdvancementIdentifier;
    Item cloakItem;

    public CloakedItem(Settings settings, Identifier cloakAdvancementIdentifier, Item cloakItem) {
        super(settings);
        this.cloakAdvancementIdentifier = cloakAdvancementIdentifier;
        this.cloakItem = cloakItem;

        registerCloak();
    }

    @Override
    public Identifier getCloakAdvancementIdentifier() {
        return cloakAdvancementIdentifier;
    }

    @Override
    public Hashtable<BlockState, BlockState> getBlockStateCloaks() {
        return new Hashtable<>();
    }

    @Override
    public Pair<Item, Item> getItemCloak() {
        return new Pair<>(this, cloakItem);
    }

    @Override
    public void onCloak() { }

    @Override
    public void onUncloak() { }

}

在揭示发生时注册回调

RevelationHolder.registerRevelationCallback(new RevelationHolder.UncloakCallback() {
    @Override
    public void trigger(List<Identifier> advancements, List<Block> blocks, List<Item> items) {
        for(Block block : blocks) {
            if(Registry.BLOCK.getId(block).getNamespace().equals(MOD_ID)) {
                ...
                <我不知道。比如显示一个弹窗之类的。你说了算>
                ...
                break
            }
        }
    }
});

Discord

你会在 Spectrum 的 Discord 上找到很多乐于助人的人。那里总有友好且乐于帮忙的朋友。如果你喜欢,也欢迎来逛逛!

https://discord.com/invite/EXU9XFXT8a