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

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

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);   //方块发光度}//方块挖掘后掉落物品@Overridepublic Item getItemDropped(IBlockState state, Random rand, int fortune){return ModItems.ZS_INGOT;}//物品掉落个数@Overridepublic 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{@Overridepublic 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()中添加矿物生成注册语句:

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

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

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

cr6.png


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部