袁老千古!!!Minecraft 1.12.2模组开发(十五) 种植作物

本文介绍了如何在Minecraft游戏中创建纪念袁隆平院士的虚拟作物教程,包括创建新的食物项、实现种植和收获功能,以及调整模型和资源文件。通过这个教程,玩家可以在游戏中表达对科学巨匠的敬意。

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

5.22日,袁老永远的离开了我们。一时所思万千……

c2.jpg

于是想制作一期作物教程,让我们可以在Minecraft中进行作物种植,以寄哀思.

1. 在 items.food 包中新建 ItemHerb 类

cr1.png

在 ItemHerb.java 中编写:
package com.Joy187.newmod.items.food;

import com.Joy187.newmod.Main;
import com.Joy187.newmod.init.ModBlocks;
import com.Joy187.newmod.init.ModItems;
import com.Joy187.newmod.util.IHasModel;

import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.EnumPlantType;
import net.minecraftforge.common.IPlantable;

public class ItemHerb extends ItemFood implements IHasModel, IPlantable{
	public ItemHerb(String name, int amount, float saturation, boolean iswolfFood,CreativeTabs tab) {
		super( amount, saturation, iswolfFood );
		setUnlocalizedName(name);
		setRegistryName(name);
		setCreativeTab(tab);
		
		ModItems.ITEMS.add(this);
	}
	
	
	@Override
	public void registerModels() {
		Main.proxy.registerItemRenderer(this, 0, "inventory");
	}

	@Override
	public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX , float hitY , float hitZ)
	{
		ItemStack stack = player.getHeldItem(hand);
		IBlockState state = worldIn.getBlockState(pos);
		if(facing == EnumFacing.UP && player.canPlayerEdit(pos.offset(facing), facing, stack) && state.getBlock( ).canSustainPlant(state, worldIn, pos, EnumFacing.UP, this) && worldIn.isAirBlock(pos.up()))
		{
			worldIn.setBlockState(pos.up(), ModBlocks.HERB1_BLOCK.getDefaultState());
			stack.shrink(1);
			return EnumActionResult.SUCCESS;
		}
		else return EnumActionResult.FAIL;
	}
	
	
	
	@Override
	public EnumPlantType getPlantType(IBlockAccess world, BlockPos pos) {

		return EnumPlantType.Crop;
	}


	@Override
	public IBlockState getPlant(IBlockAccess world, BlockPos pos) {
		
		return ModBlocks.HERB1_BLOCK.getDefaultState();
	}
}

2.在 ModItems中添加作物的注册信息:

cr7.jpg

3.在 Blocks 包中新建一个 作物类(作物种下去时相当于在湿润的耕地上放置了作物方块(crop block))

cr2.png

在作物类中编写代码:
package com.Joy187.newmod.blocks;

import com.Joy187.newmod.init.ModBlocks;
import com.Joy187.newmod.init.ModItems;

import net.minecraft.block.BlockCrops;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class Herb1Block extends BlockCrops{
	
	//这里的参数对应着作物生长的不同阶段
	private static final AxisAlignedBB[] herb1 = new AxisAlignedBB[] {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.125D,1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D,1.0D, 0.375D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.5625D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.8125D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)};
	
	public Herb1Block(String name)
	{
		setUnlocalizedName(name);
		setRegistryName(name);
		
		ModBlocks.BLOCKS.add(this);
		ModItems.ITEMS.add(new ItemBlock(this).setRegistryName(this.getRegistryName()));
	}
	
	@Override
	public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
	{
		if(!worldIn.isRemote) 
		{
			if(this.isMaxAge(state))
			{
				worldIn.spawnEntity(new EntityItem(worldIn, pos.getX(),pos.getY(), pos.getZ(), new ItemStack(ModItems.HERB1, 2)));
				worldIn.setBlockState(pos, this.withAge(0));
				return true;
			}
		}
		
		return false;
	}
	
	
	@Override
	protected Item getSeed()
	{
		return ModItems.HERB1;
	}
	
	@Override
	protected Item getCrop()
	{
		return ModItems.HERB1;		
	}
	
	@Override
	public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
	{
		return herb1[((Integer)state.getValue(this.getAgeProperty())).intValue()];
	}
}

4.在 ModBlocks.java 中添加作物方块信息:

cr8.jpg

5.在 resource包中的 en_us.lang 中添加物品名称信息(一个方块,一个作物)

item.herb1.name=Herb1 //作物
tile.herb1_block.name=Herb1 Plant   //方块

6 在 blockstates 包中添加作物成长信息:(一共有八个生长阶段)

{
	"variants":
	{
		"age=0":{"model": "joymod:herb1_block0"},
		"age=1":{"model": "joymod:herb1_block1"},
		"age=2":{"model": "joymod:herb1_block2"},
		"age=3":{"model": "joymod:herb1_block3"},
		"age=4":{"model": "joymod:herb1_block4"},
		"age=5":{"model": "joymod:herb1_block5"},
		"age=6":{"model": "joymod:herb1_block6"},
		"age=7":{"model": "joymod:herb1_block7"}
	}
}

7.在 models.item 中添加方块和作物的信息

作物物品

herb1.json

{
	"parent": "item/generated",
	"textures": {
		"layer0": "joymod:items/herb1"
	}
}
作物方块(通过种植作物方块来得到作物,所以是其父类)
{
	"parent":"joymod:item/herb1"
}
在models.block中添加作物方块的所有生长模型:
我们的作物一共有8个阶段,所以有8个模型文件,这个是第一个:

herb1_block0.json

{
	"parent": "block/crop",
	"textures": {
		"crop": "rejoymod:blocks/herb1_block0"
	}
}

8.将作物皮肤放入 texture.items 中

CR.jpg

9.将8张作物生长形态的贴图放入 textures.blocks 中:

cr9.jpg

10.保存操作 -> 进入游戏

用骨粉催熟我们的作物,同时观察作物不同阶段的贴图变化。

c1.jpg

最终我们成功收获了我们的作物!

cr6.png

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jay_fearless

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

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

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

打赏作者

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

抵扣说明:

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

余额充值