提供: Minecraft Modding Wiki
移動先: 案内検索
(ソースコード)
 
(10人の利用者による、間の22版が非表示)
1行目: 1行目:
 
{{前提MOD|reqmod="Minecraft Forge Universal 10.12.0.xxx~"}}
 
{{前提MOD|reqmod="Minecraft Forge Universal 10.12.0.xxx~"}}
 
+
{{チュートリアル難易度|difficulty=0|clear=none}}
 +
{{チュートリアルカテゴリー ‎|type=Block| difficulty=0}}
 +
<p>ワールド上に設置できる簡単な無機能ブロックの追加方法</p>
 
==ブロックの追加==
 
==ブロックの追加==
<p>ワールド上に設置できる簡単なブロックの追加方法</p>
+
簡単な無機能ブロックの追加
 
 
 
===ソースコード===
 
===ソースコード===
 
*SampleBlockCore.java
 
*SampleBlockCore.java
15行目: 16行目:
 
import cpw.mods.fml.common.registry.GameRegistry;
 
import cpw.mods.fml.common.registry.GameRegistry;
  
@Mod(modid="BlockSampleMod", name="BlockSampleMod", version="1.0")
+
@Mod(modid=SampleBlockCore.MOD_ID, name="BlockSampleMod", version="1.0")
 
public class SampleBlockCore
 
public class SampleBlockCore
 
{
 
{
 +
        public static final String MOD_ID = "BlockSampleMod";
 
public static Block blockSample;
 
public static Block blockSample;
  
24行目: 26行目:
 
{
 
{
 
//ブロックのインスタンス生成
 
//ブロックのインスタンス生成
blockSample = new SampleBlock()
+
blockSample = new SampleBlock();
 
//ブロックの登録。登録文字列はMOD内で被らなければ何でも良い。
 
//ブロックの登録。登録文字列はMOD内で被らなければ何でも良い。
 
GameRegistry.registerBlock(blockSample, "blockSample");
 
GameRegistry.registerBlock(blockSample, "blockSample");
34行目: 36行目:
 
<source lang = "java">
 
<source lang = "java">
 
package mods.blocksample;
 
package mods.blocksample;
 +
 +
import java.util.Random;
  
 
import net.minecraft.block.Block;
 
import net.minecraft.block.Block;
40行目: 44行目:
 
import net.minecraft.entity.player.EntityPlayer;
 
import net.minecraft.entity.player.EntityPlayer;
 
import net.minecraft.world.World;
 
import net.minecraft.world.World;
 +
import cpw.mods.fml.relauncher.SideOnly;
 +
import cpw.mods.fml.relauncher.Side;
 +
import net.minecraft.client.renderer.texture.IIconRegister;
 +
import net.minecraft.util.IIcon;
 +
 +
public class SampleBlock extends Block
 +
{
 +
    @SideOnly(Side.CLIENT)
 +
    private IIcon TopIcon;
  
public class SampleBlock extends Block {
+
    @SideOnly(Side.CLIENT)
 +
    private IIcon SideIcon;
  
 
     public SampleBlock() {
 
     public SampleBlock() {
47行目: 61行目:
 
         setCreativeTab(CreativeTabs.tabBlock);/*クリエイティブタブの選択*/
 
         setCreativeTab(CreativeTabs.tabBlock);/*クリエイティブタブの選択*/
 
         setBlockName("blockSample");/*システム名の設定*/
 
         setBlockName("blockSample");/*システム名の設定*/
         setBlockTextureName("samplemod:block_sample");/*ブロックのテクスチャの指定*/
+
         setBlockTextureName("samplemod:block_sample");/*ブロックのテクスチャの指定(複数指定の場合は消してください)*/
 
         /*以下のものは消しても結構です*/
 
         /*以下のものは消しても結構です*/
 
         setHardness(1.5F);/*硬さ*/
 
         setHardness(1.5F);/*硬さ*/
57行目: 71行目:
 
         setLightOpacity(1);/*ブロックの透過係数。デフォルト0(不透過)*/
 
         setLightOpacity(1);/*ブロックの透過係数。デフォルト0(不透過)*/
 
         setLightLevel(1.0F);/*明るさ 1.0F = 15*/
 
         setLightLevel(1.0F);/*明るさ 1.0F = 15*/
 +
        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);/*当たり判定*/
 
     }
 
     }
  
85行目: 100行目:
 
         //ドロップさせる量を返す
 
         //ドロップさせる量を返す
 
         return 1;
 
         return 1;
 +
    }
 +
 +
    @Override
 +
    @SideOnly(Side.CLIENT)
 +
    public void registerBlockIcons(IIconRegister par1IconRegister)
 +
    {
 +
        this.TopIcon = par1IconRegister.registerIcon("samplemod:block_sample");
 +
        this.SideIcon = par1IconRegister.registerIcon("samplemod:block_sample_side");
 +
    }
 +
 +
    @SideOnly(Side.CLIENT)
 +
    public IIcon getIcon(int par1, int par2)
 +
    {
 +
        if(par1 == 0 || par1 == 1)
 +
        {
 +
                  return TopIcon;
 +
        }
 +
        else
 +
        {
 +
                  return SideIcon;
 +
        }
 
     }
 
     }
 
}
 
}
107行目: 143行目:
 
===SampleBlock.java===
 
===SampleBlock.java===
 
<source lang = "java">
 
<source lang = "java">
        public SampleBlock() {
+
    public SampleBlock() {
 
         setCreativeTab(CreativeTabs.tabBlock);/*クリエイティブタブの選択*/
 
         setCreativeTab(CreativeTabs.tabBlock);/*クリエイティブタブの選択*/
 
         setBlockName("blockSample");/*システム名の設定*/
 
         setBlockName("blockSample");/*システム名の設定*/
         setBlockTextureName("samplemod:block_sample");/*ブロックのテクスチャの指定*/
+
         setBlockTextureName("samplemod:block_sample");/*ブロックのテクスチャの指定(複数指定の場合は消してください)*/
 
         /*以下のものは消しても結構です*/
 
         /*以下のものは消しても結構です*/
 
         setHardness(1.5F);/*硬さ*/
 
         setHardness(1.5F);/*硬さ*/
128行目: 164行目:
 
このシステム名から、英語や日本語等の翻訳名を指定するには、langファイルに適切に記述する必要が有る。<br>
 
このシステム名から、英語や日本語等の翻訳名を指定するには、langファイルに適切に記述する必要が有る。<br>
 
langファイルの取扱については、[[1.6のリソース(テクスチャ・サウンド・言語ファイル等)の置き場所]]を参照のこと。<br>
 
langファイルの取扱については、[[1.6のリソース(テクスチャ・サウンド・言語ファイル等)の置き場所]]を参照のこと。<br>
ブロックのテクスチャは、'''"src/minecraft/assets/ドメイン名/textures/blocks/登録名"'''に置くこと。<br>
+
ブロックのテクスチャは、'''"src/main/resources/assets/ドメイン名/textures/blocks/登録名"'''に置くこと。<br>
今回:"src/minecraft/assets/samplemod/textures/blocks/block_sample.png"<br>
+
今回:"src/main/resources/assets/samplemod/textures/blocks/block_sample(_side).png"<br>
 
ドメイン名は全て小文字にすること。
 
ドメイン名は全て小文字にすること。
 +
 +
1.7のリソースを置く場所は、[[1.7のリソース(テクスチャ・サウンド・言語ファイル等)の置き場所]]を参照のこと。

2016年4月17日 (日) 06:31時点における最新版

この記事は"Minecraft Forge Universal 10.12.0.xxx~"を前提MODとしています。

Wood pickaxe.png
初心者向けのチュートリアルです。
C block.png
Blockに関係のあるチュートリアルです。

ワールド上に設置できる簡単な無機能ブロックの追加方法

ブロックの追加[編集]

簡単な無機能ブロックの追加

ソースコード[編集]

  • SampleBlockCore.java
package mods.blocksample;

import net.minecraft.block.Block;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;

@Mod(modid=SampleBlockCore.MOD_ID, name="BlockSampleMod", version="1.0")
public class SampleBlockCore
{
        public static final String MOD_ID = "BlockSampleMod";
	public static Block blockSample;

	@EventHandler
	public void preInit(FMLPreInitializationEvent event)
	{
		//ブロックのインスタンス生成
		blockSample = new SampleBlock();
		//ブロックの登録。登録文字列はMOD内で被らなければ何でも良い。
		GameRegistry.registerBlock(blockSample, "blockSample");
		
	}
}
  • SampleBlock.java
package mods.blocksample;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.SideOnly;
import cpw.mods.fml.relauncher.Side;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;

public class SampleBlock extends Block
{
    @SideOnly(Side.CLIENT)
    private IIcon TopIcon;

    @SideOnly(Side.CLIENT)
    private IIcon SideIcon;

    public SampleBlock() {
        super(Material.rock);
        setCreativeTab(CreativeTabs.tabBlock);/*クリエイティブタブの選択*/
        setBlockName("blockSample");/*システム名の設定*/
        setBlockTextureName("samplemod:block_sample");/*ブロックのテクスチャの指定(複数指定の場合は消してください)*/
        /*以下のものは消しても結構です*/
        setHardness(1.5F);/*硬さ*/
        setResistance(1.0F);/*爆破耐性*/
        setStepSound(Block.soundTypeStone);/*ブロックの上を歩いた時の音*/
	/*setBlockUnbreakable();*//*ブロックを破壊不可に設定*/
	/*setTickRandomly(true);*//*ブロックのtick処理をランダムに。デフォルトfalse*/
	/*disableStats();*//*ブロックの統計情報を保存しない*/
        setLightOpacity(1);/*ブロックの透過係数。デフォルト0(不透過)*/
        setLightLevel(1.0F);/*明るさ 1.0F = 15*/
        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);/*当たり判定*/
    }

    @Override
    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float posX, float posY, float posZ){
        //ブロックを右クリックした際の動作
        return true;
    }

    @Override
    public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player){
        //ブロックを左クリックした際の動作
    }

    @Override
    public void onNeighborBlockChange(World world, int x, int y, int z, Block neighborBlock){
        //周囲のブロックが更新された際の動作
    }

    @Override
    public int quantityDropped(int meta, int fortune, Random random){
        //ドロップするアイテムを返す
        return quantityDroppedWithBonus(fortune, random);
    }

    @Override
    public int quantityDropped(Random random){
        //ドロップさせる量を返す
        return 1;
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void registerBlockIcons(IIconRegister par1IconRegister)
    {
        this.TopIcon = par1IconRegister.registerIcon("samplemod:block_sample");
        this.SideIcon = par1IconRegister.registerIcon("samplemod:block_sample_side");
    }

    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int par1, int par2)
    {
         if(par1 == 0 || par1 == 1)
         {
                  return TopIcon;
         }
         else
         {
                  return SideIcon;
         }
    }
}

解説[編集]

SampleBlockCore.java[編集]

public static Block blockSample;

追加するブロックを保持しておく変数を宣言

blockSample = new SampleBlock()
//ブロックの登録。登録文字列はMOD内で被らなければ何でも良い。
GameRegistry.registerBlock(blockSample, "blockSample");

blockSampleの変数にSampleBlockのインスタンスを代入。


SampleBlock.java[編集]

public SampleBlock() {
        setCreativeTab(CreativeTabs.tabBlock);/*クリエイティブタブの選択*/
        setBlockName("blockSample");/*システム名の設定*/
        setBlockTextureName("samplemod:block_sample");/*ブロックのテクスチャの指定(複数指定の場合は消してください)*/
        /*以下のものは消しても結構です*/
        setHardness(1.5F);/*硬さ*/
        setResistance(1.0F);/*爆破耐性*/
        setStepSound(Block.soundTypeStone);/*ブロックの上を歩いた時の音*/
	/*setBlockUnbreakable();*//*ブロックを破壊不可に設定*/
	/*setTickRandomly(true);*//*ブロックのtick処理をランダムに。デフォルトfalse*/
	/*disableStats();*//*ブロックの統計情報を保存しない*/
        setLightOpacity(1);/*ブロックの透過係数。デフォルト0(不透過)*/
        setLightLevel(1.0F);/*明るさ 1.0F = 15*/
    }

Materialとはブロックの性質として、可燃性であるか、自分自身をドロップするか、ピストンなどで動かすことができるか、マップ上での色、透明(例:葉)か、地面につもる(例:雪)かをまとめて定義したもの。
既にMaterial.javaに定義されているものと同じ性質で良ければ、そのまま使える。
ここでは上記の性質について石ブロックと同じものを使うので、Material.rockをそのまま使っている。
システム名を登録しないと、ゲーム内でブロック名を表示することが出来ない。
このシステム名から、英語や日本語等の翻訳名を指定するには、langファイルに適切に記述する必要が有る。
langファイルの取扱については、1.6のリソース(テクスチャ・サウンド・言語ファイル等)の置き場所を参照のこと。
ブロックのテクスチャは、"src/main/resources/assets/ドメイン名/textures/blocks/登録名"に置くこと。
今回:"src/main/resources/assets/samplemod/textures/blocks/block_sample(_side).png"
ドメイン名は全て小文字にすること。

1.7のリソースを置く場所は、1.7のリソース(テクスチャ・サウンド・言語ファイル等)の置き場所を参照のこと。