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

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

首先创建类

OreInitLoader.java

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有了,接下来就是注册它。

OreInitLoader.java

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指令把石头都替换成空气,免得还得去找它。

/fill ~ ~ ~ ~16 ~-50 ~16 air replace stone

 

当然我们也可以更改替换的规则,可以让矿石生成在地表上。

public static final ConfiguredFeature<?, ?> VOID_ORE = Feature.ORE.configure(new OreFeatureConfig(
                    new BlockMatchRuleTest(Blocks.AIR),
                    BlockLoader.VOID_ORE.getDefaultState(),
                    9))
            .uniformRange(YOffset.getBottom(), YOffset.fixed(200))
            .spreadHorizontally().repeat(20);

效果就是这样的

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zunipe0907

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值