Minecraft 1.12.2模组开发(十三) 矿物生成 (oregeneration)

本文详细介绍了如何在Minecraft模组中设计ZSOre矿物,包括创建ZSOre类、添加矿物信息到ModBlocks、调整掉落规则,以及在世界生成器中配置矿石生成位置。通过预初始化事件注册世界生成器,玩家可在游戏世界中发现自定义矿石。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们本次针对矿物生成进行设计

1.在 blocks 包下新建 ZSOre 类:

cr1.png

在ZSOre.java 中 编写代码:
package com.Joy187.newmod.blocks;

import java.util.Random;

import com.Joy187.newmod.init.ModItems;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;

public class ZSOre extends BlockBase{
                //矿物名称      矿物材质       放在创造栏的位置
	public ZSOre(String name, Material material,CreativeTabs tab) {
		super(name, material, tab);
		setSoundType(SoundType.STONE);  //方块音效
		setHardness(4.0f);      //方块坚硬程度
		setResistance(20.0f);   //方块挖掘抗性
		setHarvestLevel("pickaxe",2);   //方块挖掘等级(铁镐为2级)
		setLightLevel(12.0f);   //方块发光度
	}
	
	//方块挖掘后掉落物品
	@Override
	public Item getItemDropped(IBlockState state, Random rand, int fortune){
		return ModItems.ZS_INGOT;
	}
	
	//物品掉落个数
	@Override
	public int quantityDropped(Random rand){
		int min = 1;
		int max = 1;
		return rand.nextInt(max) + min;
	}
}

2.ModBlocks.java 中添加矿物信息:

public static final Block ZSORE_BLOCK = new ZSOre("zsore_block", Material.ROCK, Main.BLOCK_TAB);	

3.en_us.lang中添加物品信息,blockstate等文件中添加物品信息(和第四章步骤相同):

第三章创建方块
cr4.png

4.创建 world 包

cr2.png

word 包中新建 ModWorldGen 类:

cr3.png

在 ModWorldGen.java 中编写矿石生成信息:
package com.Joy187.newmod.world;

import java.util.Random;

import com.Joy187.newmod.init.ModBlocks;

import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.IChunkGenerator;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraftforge.fml.common.IWorldGenerator;

public class ModWorldGen implements IWorldGenerator{

	@Override
	public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator,IChunkProvider chunkProvider) {
		
		//如果在0号世界(主世界),就生成矿物
		if (world.provider.getDimension() == 0){
			generateOverworld(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider);
		}
	}
	
	//在世界生成矿物的信息
	private void generateOverworld(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator,IChunkProvider chunkProvider) {
		              
		generateOre(ModBlocks.ZSORE_BLOCK.getDefaultState(), world, random, chunkX*16, chunkZ*16, 5, 32, random.nextInt(2)+3, 10);
		
	}
	                        //生成的矿物   生成矿物的世界 生成数(随机的)  生成的x ,z坐标   Y最小,Y最大坐标在(minY,maxY)高度区间中生成矿石 矿脉大小 生成概率
	private void generateOre(IBlockState ore, World world, Random random, int x, int z, int minY, int maxY, int size, int chances) {
		int deltaY = maxY - minY;
		for (int i = 0; i < chances; i++)
		{
			BlockPos pos = new BlockPos(x+random.nextInt(16), minY+random.nextInt(deltaY), z+random.nextInt(16));
			
			WorldGenMinable generator = new WorldGenMinable(ore, size);
			generator.generate (world, random, pos);
		}
	}
}

Note: Minecraft世界维度: 0:主世界 1:地狱 2:末地

Minecraft 矿石生成规则

cr5.png

5.在Main.java 中的PreInit()中添加矿物生成注册语句:

	@EventHandler
	public static void PreInit(FMLPreInitializationEvent event)
	{
		RegistryHandler.preInitRegistries( );
		GameRegistry.registerWorldGenerator(new ModWorldGen(), 3);
	}

保存文档 -> 启动游戏 -> 创建新的世界

打开F3,我们成功在21层(Y=21)找到了我们所生成的矿石!

cr6.png

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jay_fearless

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

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

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

打赏作者

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

抵扣说明:

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

余额充值