本篇教程参考为的NeoForge1.20.4Mod开发的视频,这篇教程是我边学边总结的,与其说是教程更像我的学习笔记,如有不清楚的地方,大家可以在评论区提问。在我力所能及的范围内,我都会解答的。
这里就不展示手写的json了,想要了解的可以去wiki查看或者去看制作数据包的教程,会提到各种战利品表的写法
我直接展示数据生成的写法,不过这里只涉及到了最简单的战利品表
创建ModBlockLootProvider类
public class ModBlockLootProvider extends BlockLootSubProvider {
public static final Set<Block> BLOCKS = Set.of(//包含所有需要生成战利品表的自定义方块
ModBlocks.RUBY_BLOCK.get()
);
public ModBlockLootProvider() {
super(Collections.emptySet(), FeatureFlags.REGISTRY.allFlags());//Collections.emptySet()表示没有爆炸免疫方块列表(默认不传入额外设置),这个空集合是给父类用来判断方块爆炸后是否掉落的问题
}
@Override
protected void generate() {
this.dropSelf(ModBlocks.RUBY_BLOCK.get());//掉落自身,如果是矿石(比如矿石掉落原料、经验等),通常会用 add(...) 配合额外规则
}
@Override
protected Iterable<Block> getKnownBlocks() {//返回所有已注册战利品表的方块,用此方法验证所有方块都已正确注册
return BLOCKS;
}
}
创建ModLootTableProvider类
public class ModLootTableProvider extends LootTableProvider {
public ModLootTableProvider(PackOutput output, Set<ResourceLocation> requiredTables, List<SubProviderEntry> subProviders) {
super(output, requiredTables, subProviders);
}
}
这个类是一个 Loot Table 数据生成器提供者(Loot Table Provider)它本身不包含掉落逻辑,而是作为一个壳(容器)用来把具体的子生成器(比如 BlockLootSubProvider)组合起来传给数据生成系统
注册战利品表
event.getGenerator().addProvider(
event.includeServer(),
(DataProvider.Factory<ModLootTableProvider>) pOutput -> new ModLootTableProvider(pOutput, Collections.emptySet(),
List.of(
new LootTableProvider.SubProviderEntry(ModBlockLootProvider::new, LootContextParamSets.BLOCK)//后面的参数表示它生成的是方块相关的掉落表
))
);
| 参数 | 作用 |
|---|---|
pOutput |
数据生成输出目录(生成的 JSON 文件会写到这里) |
Collections.emptySet() |
指定哪些 loot table 是必须生成的(这里没特意指定) |
List.of(...) |
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END







暂无评论内容