使用Minecraft 14.4的Fabric API进行MOD开发备忘录 #1
目标
-
マイクラはやった事がある
- マイクラはやった事がある
-
- Javaはなんとなくできる
-
- maven と gradle ぐらいの存在は知ってる
-
- MOD開発未経験
- VS Code 使用者
展览
准备好请从 https://github.com/FabricMC/fabric-example-mod 上fork该项目过来。
Mod的基本信息设置1
织物特性.从https://fabricmc.net/use获取最新版本的信息,并复制粘贴
模块属性maven_group に net. から始まる好きなグループ名を入れる。 net.ハンドル名.MOD名 ぐらいが適当(ほんとうに適当だから後で習慣があるか調べる
依赖可以保持现状
准备依赖资源在VS Code终端中运行gradlew genSources,gradlew vscode命令。需要相当一段时间。
Mod基本信息的设置2src/main/resources/fablic.mod.json の先頭にある id を変更する。以降これを「MOD_ID」と呼ぶ。
同ファイルの entrypoints を適当に変更する。 グループ名.mod名 とかでいいかな。
後の項は変える気になったら変える
创建入口点在src/main/java文件夹下创建与入口点相同的文件夹和类。类似于src/main/java/net/模组名称/Mod名称.java。
添加物品在入口点类中编写以下代码
package net.realanalysis.testmod;
import net.fabricmc.api.ModInitializer;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class ExampleMod implements ModInitializer{
public static final Item FABRIC_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC));
// アイテムそのものの定義
@Override
public void onInitialize() {
Registry.register(Registry.ITEM, new Identifier("MOD_ID","アイテム名"), FABRIC_ITEM);
// アイテムの登録
}
}
Mod的基本信息设置1
织物特性.从https://fabricmc.net/use获取最新版本的信息,并复制粘贴
模块属性maven_group に net. から始まる好きなグループ名を入れる。 net.ハンドル名.MOD名 ぐらいが適当(ほんとうに適当だから後で習慣があるか調べる
依赖可以保持现状
准备依赖资源在VS Code终端中运行gradlew genSources,gradlew vscode命令。需要相当一段时间。
Mod基本信息的设置2src/main/resources/fablic.mod.json の先頭にある id を変更する。以降これを「MOD_ID」と呼ぶ。
同ファイルの entrypoints を適当に変更する。 グループ名.mod名 とかでいいかな。
後の項は変える気になったら変える
创建入口点在src/main/java文件夹下创建与入口点相同的文件夹和类。类似于src/main/java/net/模组名称/Mod名称.java。
添加物品在入口点类中编写以下代码
package net.realanalysis.testmod;
import net.fabricmc.api.ModInitializer;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class ExampleMod implements ModInitializer{
public static final Item FABRIC_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC));
// アイテムそのものの定義
@Override
public void onInitialize() {
Registry.register(Registry.ITEM, new Identifier("MOD_ID","アイテム名"), FABRIC_ITEM);
// アイテムの登録
}
}
模块属性maven_group に net. から始まる好きなグループ名を入れる。 net.ハンドル名.MOD名 ぐらいが適当(ほんとうに適当だから後で習慣があるか調べる
依赖可以保持现状
准备依赖资源在VS Code终端中运行gradlew genSources,gradlew vscode命令。需要相当一段时间。
Mod基本信息的设置2src/main/resources/fablic.mod.json の先頭にある id を変更する。以降これを「MOD_ID」と呼ぶ。
同ファイルの entrypoints を適当に変更する。 グループ名.mod名 とかでいいかな。
後の項は変える気になったら変える
创建入口点在src/main/java文件夹下创建与入口点相同的文件夹和类。类似于src/main/java/net/模组名称/Mod名称.java。
添加物品在入口点类中编写以下代码
package net.realanalysis.testmod;
import net.fabricmc.api.ModInitializer;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class ExampleMod implements ModInitializer{
public static final Item FABRIC_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC));
// アイテムそのものの定義
@Override
public void onInitialize() {
Registry.register(Registry.ITEM, new Identifier("MOD_ID","アイテム名"), FABRIC_ITEM);
// アイテムの登録
}
}
准备依赖资源在VS Code终端中运行gradlew genSources,gradlew vscode命令。需要相当一段时间。
Mod基本信息的设置2src/main/resources/fablic.mod.json の先頭にある id を変更する。以降これを「MOD_ID」と呼ぶ。
同ファイルの entrypoints を適当に変更する。 グループ名.mod名 とかでいいかな。
後の項は変える気になったら変える
创建入口点在src/main/java文件夹下创建与入口点相同的文件夹和类。类似于src/main/java/net/模组名称/Mod名称.java。
添加物品在入口点类中编写以下代码
package net.realanalysis.testmod;
import net.fabricmc.api.ModInitializer;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class ExampleMod implements ModInitializer{
public static final Item FABRIC_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC));
// アイテムそのものの定義
@Override
public void onInitialize() {
Registry.register(Registry.ITEM, new Identifier("MOD_ID","アイテム名"), FABRIC_ITEM);
// アイテムの登録
}
}
同ファイルの entrypoints を適当に変更する。 グループ名.mod名 とかでいいかな。
後の項は変える気になったら変える
创建入口点在src/main/java文件夹下创建与入口点相同的文件夹和类。类似于src/main/java/net/模组名称/Mod名称.java。
添加物品在入口点类中编写以下代码
package net.realanalysis.testmod;
import net.fabricmc.api.ModInitializer;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class ExampleMod implements ModInitializer{
public static final Item FABRIC_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC));
// アイテムそのものの定義
@Override
public void onInitialize() {
Registry.register(Registry.ITEM, new Identifier("MOD_ID","アイテム名"), FABRIC_ITEM);
// アイテムの登録
}
}
package net.realanalysis.testmod;
import net.fabricmc.api.ModInitializer;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class ExampleMod implements ModInitializer{
public static final Item FABRIC_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC));
// アイテムそのものの定義
@Override
public void onInitialize() {
Registry.register(Registry.ITEM, new Identifier("MOD_ID","アイテム名"), FABRIC_ITEM);
// アイテムの登録
}
}
これでテクスチャの無いアイテムが追加される
确认VSコードの左にある虫のマークをクリックし、サイドバーの上にあるスタートボタンをクリックするとMinecraftが立ち上がる
使用自定义类进行初始化
在与入口点相同的文件夹中创建一个继承自 ITEM 类的类。
package net.realanalysis.testmod;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.TypedActionResult;
import net.minecraft.world.World;
public class TestItem extends Item{
public TestItem(Settings item$Settings_1) {
super(item$Settings_1);
//コンストラクタはそのままスーパークラスのを呼びだす
}
@Override
public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand){
playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F);
return new TypedActionResult<ItemStack>(ActionResult.SUCCESS, playerEntity.getStackInHand(hand));
// 右クリックすると羊毛を壊した時の音がなる
}
}
在与入口点相同的文件夹中创建一个继承自 ITEM 类的类。
package net.realanalysis.testmod;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.TypedActionResult;
import net.minecraft.world.World;
public class TestItem extends Item{
public TestItem(Settings item$Settings_1) {
super(item$Settings_1);
//コンストラクタはそのままスーパークラスのを呼びだす
}
@Override
public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand){
playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F);
return new TypedActionResult<ItemStack>(ActionResult.SUCCESS, playerEntity.getStackInHand(hand));
// 右クリックすると羊毛を壊した時の音がなる
}
}
そしたらエントリポイントのクラスをこう書き変える
package net.realanalysis.testmod;
import net.fabricmc.api.ModInitializer;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.Item;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class ExampleMod implements ModInitializer{
public static final Item FABRIC_ITEM = new TestItem(new Item.Settings().group(ItemGroup.MISC));
// 自作クラスでの定義にした
@Override
public void onInitialize() {
Registry.register(Registry.ITEM, new Identifier("MOD_ID","アイテム名"), FABRIC_ITEM);
// アイテムの登録
}
}
右键单击应该会发出声音。
纹理
在src\main\resources\assets\Mod_ID\models\item目录下创建以下类似的JSON文件。
{
"parent" :"item/generated",
"textures" : {
"layer0" : "MOD_ID:item/アイテム名"
}
}
{
"parent" :"item/generated",
"textures" : {
"layer0" : "MOD_ID:item/アイテム名"
}
}
如果你将一个大小为16*16的透明PNG图片放入src\main\resources\assets\testmod\textures\item目录下,那么该物品应该会变成这个图片。