Minecraft 1.12.2模组进阶(二十四) 流体(Fluid)

我们本次在世界中生成一种属于我们自己的流体

流体(原版中的水、岩浆):既属于一种液体,也属于一种方块。

1.新建一个fluids包

cr2.png

2.在fluids包中新建FluidLiquid类

cr3.png

在FluidLiquid.java中编辑代码:
package com.Joy187.newmod.fluids;

import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.Fluid;

public class FluidLiquid extends Fluid{
	public FluidLiquid(String name, ResourceLocation still, ResourceLocation flow) {
		super(name, still, flow);
		this.setUnlocalizedName(name);
	}
	
}

3.在init包中新建ModFluid类

cr1.png

在 ModFluid.java 中编辑:
package com.Joy187.newmod.init;

import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import com.Joy187.newmod.fluids.FluidLiquid;

public class ModFluid {
    //定义你的流体       一共两种材质:静止态 流动态
	public static final Fluid VIRGINIS = new FluidLiquid("virginis", new ResourceLocation("joymod:blocks/virginis_still"), new ResourceLocation("joymod:blocks/virginis_flow"));

	public static void registerFluids() {
		registerFluid(VIRGINIS);
	}
	
	public static void registerFluid(Fluid fluid) {
		FluidRegistry.registerFluid(fluid);
		FluidRegistry.addBucketForFluid(fluid);
	}
	
}

4.在blocks包中新建FluidBlock类

cr4.png

在FluidBlock.java中编辑
package com.Joy187.newmod.blocks;

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

import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemBlock;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraftforge.fluids.BlockFluidClassic;
import net.minecraftforge.fluids.Fluid;

public class FluidBlock extends BlockFluidClassic {
	public FluidBlock(String name, Fluid fluid, Material material)
	{
		super(fluid, material);
		setUnlocalizedName(name);
		setRegistryName(name);
		
		ModBlocks.BLOCKS.add(this);
		ModItems.ITEMS.add(new ItemBlock(this).setRegistryName(this.getRegistryName()));
	}
	
	public EnumBlockRenderType getRenderType(IBlockState state)
	{
		return EnumBlockRenderType.MODEL;
	}
}

5.在 init包中的ModBlocks.java中添加该流体方块的注册信息

	public static final Block VIRGINIS_BLOCK = new FluidBlock("virginis", ModFluid.VIRGINIS , Material.WATER);

cr6.png

6.在handlers包中的RenderHandler.java 中添加一个新的函数registerCustomMeshesAndStates()用于渲染流体

	public static void registerCustomMeshesAndStates() {
		ModelLoader.setCustomMeshDefinition(Item.getItemFromBlock(ModBlocks.VIRGINIS_BLOCK), new ItemMeshDefinition()
		{
			public ModelResourceLocation getModelLocation(ItemStack stack) {
			                                    //这里是你的modid:流体名称
				return new ModelResourceLocation("joymod:virginis", "fluid");
			}
		});
		
		ModelLoader.setCustomStateMapper(ModBlocks.VIRGINIS_BLOCK, new StateMapperBase()
		{
			protected ModelResourceLocation getModelResourceLocation(IBlockState state)
			{   
			                                    //这里是你的modid:流体名称
				return new ModelResourceLocation("joymod:virginis", "fluid");
			}
		});
	}

7.在 RegistryHandler.java 中的preInitRegistries()中添加流体注册信息:

	public static void preInitRegistries(){
		
		ModFluid.registerFluids();  //注册流体
		EntityInit.registerEntities();
		RenderHandler.registerEntityRenders();
		RenderHandler.registerCustomMeshesAndStates();  //注册流体的渲染
	}

8.在Main.java中PreInit()函数之前添加流体信息注册

	static { FluidRegistry.enableUniversalBucket(); }

cr7.png

9.代码部分结束,开始绘制材质(resources包)

在en_us.lang语言文件中添加游戏中物品名称
//fluid
fluid.virginis=Sanguis Virginis

10.在blockstates中添加virginis(你的流体名字).json文件

在文件中编辑流体方块的状态
{
	"forge_marker": 1,  //1表示是游戏中流体
	"variants": {
		"fluid": {
			"model" : "forge:fluid",
			"custom": { "fluid": "virginis" //这里写你的流体的名字}
		}
	}
}

11.在textures中添加两个.png文件一张图片是静止时的状态,一种是流动时的状态

cr8.png

同时我们还要定义两种图片的.mcmeta文件(流体流动动画文件(animation))
用记事本打开virginis_still.png.mcmeta 和 virginis_flow.png.mcmeta文件,复制下面的代码(两个文件代码一样)
{
	"animation":
	{
	     "frametime":4
	}
}

12.保存所有文件 -> 刷新项目 -> 运行游戏

在原版的水和岩浆(杂项物品栏)里最下面找到我们的流体

cr5.png

左边静态液体,右边流动液体,还不错吧~
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jay_fearless

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

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

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

打赏作者

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

抵扣说明:

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

余额充值