0
点赞
收藏
分享

微信扫一扫

1-3 Minecraft-Fabric-1.17.1 Mod开发 矿物生成

愚鱼看书说故事 2022-04-20 阅读 14
fabric

  我们有了自己的矿石,理所当然的就需要将它添加到我们的世界中去,本章将会介绍如何添加矿石的世界生成。

首先创建类

package com.zunipe;

import java.util.function.Predicate;

public class OreInitLoader
{
    public OreInitLoader()
    {

    }
}

  矿石的生成是依靠生物群系的ConfigureFeature实现的,ConfigureFeature能够实现的不仅仅限于矿石的生成,生物群系中的各种各样的修饰都是依靠它来实现的,例如草、树木等等。

这里创建我们生成矿石的ConfigureFeature。

public static final ConfiguredFeature<?, ?> VOID_ORE = Feature.ORE.configure(new OreFeatureConfig(
                    OreFeatureConfig.Rules.BASE_STONE_OVERWORLD,
                    BlockLoader.VOID_ORE.getDefaultState(),
                    9))
            .uniformRange(YOffset.getBottom(), YOffset.getTop())
            .spreadHorizontally().repeat(20);

  我们可以看到,它仅需要1个参数,我们需要提供一个OreFeatureConfig,其中又包括3个参数,第一个是矿石生成的规则,也就是它在生成的时候要选择替换原本什么方块,第二个则是我们自己矿石的BlockState,有关BlockState的内容之后会讲,这里我们就用默认的即可,最后是一个整数,由于矿石的生成是一块一块的生成的,这里的数字就是一块中矿石的数量。

  我们还需要对OreFeatureConfig进行修饰,uniformRange是对高度的控制,这里我们选择的是从世界的底部到顶部都可以生成,当然我们也可以自己选择高度,使用YOffset.fixed(50)即可,repeat顾名思义是重复生成多少次,这个数字决定了在一个区块中将会尝试生成矿脉的次数,通常我们可以通过控制矿脉的大小和次数控制矿石的稀有程度。

  既然ConfigureFeature有了,接下来就是注册它。

public class OreInitLoader
{
    public static final ConfiguredFeature<?, ?> VOID_ORE = Feature.ORE.configure(new OreFeatureConfig(
                    OreFeatureConfig.Rules.BASE_STONE_OVERWORLD,
                    BlockLoader.VOID_ORE.getDefaultState(),
                    9))
            .uniformRange(YOffset.getBottom(), YOffset.fixed(50))
            .spreadHorizontally().repeat(20);

    public OreInitLoader()
    {
        register(VOID_ORE, BiomeSelectors.foundInOverworld(), "void_ore");
    }

    private void register(ConfiguredFeature<?, ?> configuredFeature, Predicate<BiomeSelectionContext> predicate, String name)
    {
        RegistryKey<ConfiguredFeature<?, ?>> key = RegistryKey.of(Registry.CONFIGURED_FEATURE_KEY,
                new Identifier("haha", name));
        Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, new Identifier("haha", name), configuredFeature);
        BiomeModifications.addFeature(predicate, GenerationStep.Feature.UNDERGROUND_ORES, key);
    }
}

 然后再把OreInitLoader丢进主类。

 public class FabricExample implements ModInitializer
{
    public static final Logger LOGGER = LogManager.getLogger("haha");
 
    @Override
    public void onInitialize()
    {
        new ItemLoader();
        new BlockLoader();
        new OreInitLoader();
    }
}

 然后我们就可以进游戏看看效果了。

为了方便的看到效果我们可以用/fill指令把石头都替换成空气,免得还得去找它。

 

 

举报

相关推荐

0 条评论