
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 上找到很多乐于助人的人。那里总有友好且乐于帮忙的朋友。如果你喜欢,也欢迎来逛逛!
正在加载版本记录…


正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。