我的世界java net_我的世界Minecraft Mod开发学习笔记 - 实现一个简单的红靶心Block...

概述

本文使用Forge MDK (Mod Development Kit)实现一个显示红靶心图案的Block.

运行环境

Java 1.8 JDK

Minecraft Java Edition 1.12.2

Forge and MDK 1.12.2

安装Forge和MDK

从Minecraft Forge官网下载Minecraft Forge - MC 1.12.2 installer和Mod Development Kit (MDK)包.

运行Forge installer安装Forge

将MDK压缩包解压的指定目录, 例如C:\mdk.

设置Mod项目

在MDK目录下, 运行gradlew setupDecompWorkspace命令以创建如下Mod项目结构

mdk/

├── build/

├── gradle/

│ └── wrapper/

│ ├── gradle-wrapper.jar

│ └── gradle-wrapper.properties

├── src/

│ ├── main/

│ ├── java/

│ └── resources/

│ ├── mcmod.info

│ └── pack.mcmeta

├── build.gradle

├── gradlew

└── gradlew.bat

设置Gradle build文件

编辑build.gradle并修改version, group和archivesBaseName

version = "1.0.0"

group= "minecraftfun"

archivesBaseName = "target-block-mod"

修改 mcmod.info

编辑 mcmod.info以修改modid, name和description.

"modid": "targetblockmod",

"name": "Target Block Mod",

"description": "Target Block Mod",

提示: modid 只能使用小写字母.

创建target block Java类

src/main/java/minecraftfun/TargetBlock.java

package minecraftfun;

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;

import net.minecraft.creativetab.CreativeTabs;

import net.minecraft.util.BlockRenderLayer;

import net.minecraftforge.fml.relauncher.Side;

import net.minecraftforge.fml.relauncher.SideOnly;

public class TargetBlock extends Block {

public static final String NAME = "target";

private static final String UNLOCALIZED_NAME = "target_block";

private static final String REGISTRY_NAME = "target_block_registry";

public TargetBlock() {

super(Material.ROCK);

this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS);

this.setUnlocalizedName(UNLOCALIZED_NAME);

this.setRegistryName(REGISTRY_NAME);

}

@SideOnly(Side.CLIENT)

public BlockRenderLayer getBlockLayer()

{

return BlockRenderLayer.SOLID;

}

}

创建mod Java类

src/main/java/minecraftfun/TargetBlockMod.java

package minecraftfun;

import org.apache.logging.log4j.Logger;

import net.minecraft.client.renderer.block.model.ModelResourceLocation;

import net.minecraft.item.ItemBlock;

import net.minecraftforge.client.model.ModelLoader;

import net.minecraftforge.fml.common.Mod;

import net.minecraftforge.fml.common.Mod.EventHandler;

import net.minecraftforge.fml.common.event.FMLInitializationEvent;

import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

import net.minecraftforge.fml.common.registry.ForgeRegistries;

@Mod(modid = TargetBlockMod.MODID, name = TargetBlockMod.NAME, version = TargetBlockMod.VERSION)

public class TargetBlockMod

{

public static final String MODID = "targetblockmod";

public static final String NAME = "Target Block Mod";

public static final String VERSION = "1.0.0";

public static final String RESOURCE_INVENTORY = "inventory";

public static TargetBlock targetBlock;

public static ItemBlock itemTargetBlock;

private static Logger logger;

@EventHandler

public void preInit(FMLPreInitializationEvent event)

{

logger = event.getModLog();

preInitTargetBlock();

}

@EventHandler

public void init(FMLInitializationEvent event)

{

logger.info("Mod initlialised :" + NAME);

}

private void preInitTargetBlock() {

targetBlock = new TargetBlock();

ForgeRegistries.BLOCKS.register(targetBlock);

itemTargetBlock = new ItemBlock(targetBlock);

itemTargetBlock.setRegistryName(targetBlock.getRegistryName());

ForgeRegistries.ITEMS.register(itemTargetBlock);

ModelResourceLocation chinaModelResourceLocation = new ModelResourceLocation(

MODID + ":" + TargetBlock.NAME, RESOURCE_INVENTORY);

final int DEFAULT_ITEM_SUBTYPE = 0;

ModelLoader.setCustomModelResourceLocation(itemTargetBlock, DEFAULT_ITEM_SUBTYPE, chinaModelResourceLocation);

}

}

使用@preInitTargetBlock方法来初始化红靶心Block.

设置resource目录结构

在src/main/resources目录下, 创建如下目录和文件, 将MODID替换为TargetBlockMod.MODID, BLOCK_REGISTRY_NAME替换为TargetBlock.REGISTRY_NAME, BLOCK_UNLOCALIZED_NAME替换为TargetBlock.UNLOCALIZED_NAME,BLOCK_NAME替换为TargetBlock.NAME.

src/main/resources/

└── /

├── blockstates/

│ └── .json

├── lang/

│ └── en_us.lang

├── models/

│ ├── block/

│ │ └── _model.json

│ └── item/

│ └── .json

└── textures/

└── blocks/

修改 block states文件

src/main/resources/targetblockmod/blockstates/target_block_registry.json

{

"variants": {

"normal": { "model": ":_model" }

}

}

将MODID替换为TargetBlockMod.MODID, BLOCK_UNLOCALIZED_NAME替换为TargetBlock.UNLOCALIZED_NAME.

修改mod语言文件

src/main/resources/targetblockmod/lang/en_us.lang

tile..name=Bullseye Target

将BLOCK_UNLOCALIZED_NAME替换为TargetBlock.UNLOCALIZED_NAME.

修改block model文件

src/main/resources/targetblockmod/models/block/target_block_model.json

"parent": "block/cube",

"textures": {

"down": ":blocks/",

"up": ":blocks/",

"north": ":blocks/",

"east": ":blocks/",

"south": ":blocks/",

"west": ":blocks/",

}

将MODID替换为TargetBlockMod.MODID, FACE_IMAGE则是用于block六个面的图形文件名, 去掉.png后缀.

修改item文件

src/main/resources/targetblockmod/models/item/target.json

"parent": ":block/_model"

将MODID替换为TargetBlockMod.MODID, BLOCK_UNLOCALIZED_NAME替换为TargetBlock.UNLOCALIZED_NAME.

block图形文件

创建16*16的PNG图形文件, 放在src/main/resources/targetblockmod/textures/blocks/目录下.

编译Mod

运行如下命令以编译Mod

gradlew build.

该命令在build/libs目录下生成[archivesBaseName]-[version].jar文件.

测试Mod

将编译生成的mod jar文件放入Minecraft mods目录(在Windows下为 %appdata%.minecraft\mods), 运行Minecraft.

打开inventory并找到"Bullseye Target"block.

dc04d918493565bf915499a8a743b63f.png

小结

对Minecraft Mod开发感兴趣的朋友不妨试一试, 所有源代码和mod jar文件也可以从这里下载.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值