我们本次在世界中生成一种属于我们自己的流体
流体(原版中的水、岩浆):既属于一种液体,也属于一种方块。
1.新建一个fluids包
2.在fluids包中新建FluidLiquid类
在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类
在 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类
在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);
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(); }
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文件一张图片是静止时的状态,一种是流动时的状态
同时我们还要定义两种图片的.mcmeta文件(流体流动动画文件(animation))
用记事本打开virginis_still.png.mcmeta 和 virginis_flow.png.mcmeta文件,复制下面的代码(两个文件代码一样)
{
"animation":
{
"frametime":4
}
}
12.保存所有文件 -> 刷新项目 -> 运行游戏
在原版的水和岩浆(杂项物品栏)里最下面找到我们的流体
左边静态液体,右边流动液体,还不错吧~
今天的文章Minecraft 1.12.2模组进阶(二十四) 流体(Fluid)「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/88213.html