1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

クライアント/サーバーMODの開発に関する話題、技術交換はこちらで。質問は質問フォーラムへお願いします。
  • (PostNo.215681)

1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月07日(土) 16:59

1.6.4-9.11.1.965forgeでmodを制作しているmod制作初心者の者ですが、普通のブロックは作れるのですが、複数のテクスチャを持つブロックと階段型のブロックの作り方がわかりません。どなたか教えてください。お願いします!!
need
ID:26056bf3
 

  • (PostNo.215688)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by elise_blacklab » 2015年2月07日(土) 17:34

階段はBlockStairsを継承したクラスを作ることで追加できます。
ただし、コンストラクタはBlockを要求するため、元となるBlockは別に作っておく必要があります。
参考 http://www.minecraftforge.net/forum/index.php?topic=4134.0

複数のテクスチャを〜は、具体的にどういう動作をさせたいのか(面ごとに違うテクスチャ?orアイコンとブロックテクスチャの区別?)がわからないので、回答を保留します。
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:7cda1a35
掘り廃人
 
記事: 2273
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215690)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月07日(土) 17:40

参考ありがとうございます!
説明不足ですみません・・・面ごとにテクスチャが違うブロックのほうです。できればこちらも教えていただけるとありがたいです。
need
ID:26056bf3
 

  • (PostNo.215696)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月07日(土) 18:19

すみません。参考にしていただいたページを見て書いたのですが、coreのファイルのyellowlineBlock = new YellowLineBlock( yellowlineBlockID);の部分がYellowLineBlock(int)は未定義ですと言われます。使っているソフトはeclipseです。ソースを張ります。どなたかよろしくお願いします。

Nikore.java

package nikosMods;

import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

@Mod( modid="Niko's Mods", name="Niko's Mods", version="1.6.4")
@NetworkMod( clientSideRequired = true, serverSideRequired = false, versionBounds = "1.6.4")
public class Nikore
{
public static Block raildirtBlock;
public static Block kyudomatoBlock;
public static Block yellowlineBlock;
public static int raildirtBlockID = 160;
public static int kyudomatoBlockID = 161;
public static int yellowlineBlockID = 162;

@EventHandler
public void preInit( FMLPreInitializationEvent event)
{
raildirtBlock = new RailDirtBlock( raildirtBlockID);
kyudomatoBlock = new KyuDoMatoBlock( kyudomatoBlockID);
yellowlineBlock = new YellowLineBlock( yellowlineBlockID);
GameRegistry.registerBlock(raildirtBlock, "RailDirtBlock");
GameRegistry.registerBlock(kyudomatoBlock, "KyuDoMatoBlock");
GameRegistry.registerBlock(yellowlineBlock, "YellowLineBlock");
}

@EventHandler
public void init( FMLInitializationEvent event)
{
GameRegistry.addRecipe(new ItemStack(raildirtBlock, 2),
new Object[] {" X "," Y ",
'X',Block.dirt,
'Y',Block.cobblestone});
GameRegistry.addRecipe(new ItemStack(kyudomatoBlock, 1),
new Object[] {"XXX","XYX","XXX",
'X',new ItemStack(Block.cloth, 1 , 15),
'Y',Block.cloth});
GameRegistry.addRecipe(new ItemStack(yellowlineBlock, 1),
new Object[]{" "," X "," Y",
'X',new ItemStack(Block.cloth, 1, 4),
'Y',Block.stoneBrick});

LanguageRegistry.addName(raildirtBlock, "RailDirt");
LanguageRegistry.addName(kyudomatoBlock, "KyuDoMatoBlock");
LanguageRegistry.addName(yellowlineBlock, "YellowLineBlock");
LanguageRegistry.instance().addNameForObject(kyudomatoBlock, "ja_JP", "弓道の的");
LanguageRegistry.instance().addNameForObject(raildirtBlock, "ja_JP", "敷石ブロック");
LanguageRegistry.instance().addNameForObject(yellowlineBlock, "ja_JP", "黄色い線");
}
}


YellowLineBlock.java

package nikosMods;

import net.minecraft.block.Block;
import net.minecraft.block.BlockStairs;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;

public class YellowLineBlock extends BlockStairs
{
public YellowLineBlock(int id, Block block, int par3)
{
super(id, block, par3);
this.setCreativeTab( CreativeTabs.tabBlock);
this.setUnlocalizedName( "YellowLineBlock");
this.setTextureName( "niko:yellowline_block");
this.setStepSound(soundStoneFootstep);
this.setHardness(2.0f);
this.useNeighborBrightness[id] = true;
}
}
need
ID:26056bf3
 

  • (PostNo.215701)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by elise_blacklab » 2015年2月07日(土) 18:30

面ごとに違うテクスチャは、Block#getIcon(int,int)を、自作のBlock内でOverrideすることで指定できます。
第一引数のintが面の番号なので、これをifとかで判定してそれぞれ違うIconを返せば、面ごとにテクスチャを変えられます。

ただし、そのままだと設置する向きによらず、固定された方向にテクスチャが登録されることになります。(実際、getIcon()の第一引数は方角ごとに固定されています)
設置された向きによってブロックのテクスチャの方向を変えるには、対応させる向きごとにmetadataに分け、プレイヤーの向きをBlock設置時に判断してmetadataを変更して設置する、といったちょっと面倒くさい作業が必要です。
getIcon()では第二引数のintでmetadataを取得できます。

参考 http://forum.minecraftuser.jp/viewtopic.php?f=39&t=17073&p=145672#p145691

need さんが書きました:YellowLineBlock( yellowlineBlockID);の部分がYellowLineBlock(int)は未定義ですと言われます。

YellowLineBlockのコンストラクタにはidとBlockとpar3の3つの引数を指定しているのに、ブロックのインスタンスを生成する際にidしか入れてないわけですからそりゃエラーになります。
元となるBlockは用意しておく必要があると言ったはずですが、その部分が見当たりません。
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2273
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215723)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月07日(土) 20:26

返信遅れ、申し訳ありません。
このようにしてみましたが、実行するとクラッシュしてしまいます。テクスチャの場所は大丈夫です。

Nicore.java

package nikosMods;

import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

@Mod( modid="Niko's Mods", name="Niko's Mods", version="1.6.4")
@NetworkMod( clientSideRequired = true, serverSideRequired = false, versionBounds = "1.6.4")
public class Nikore
{
public static Block raildirtBlock;
public static Block kyudomatoBlock;
public static Block yellowlineBlock;
public static int raildirtBlockID = 160;
public static int kyudomatoBlockID = 161;
public static int yellowlineBlockID = 162;

@EventHandler
public void preInit( FMLPreInitializationEvent event)
{
raildirtBlock = new RailDirtBlock( raildirtBlockID);
kyudomatoBlock = new KyuDoMatoBlock( kyudomatoBlockID);
yellowlineBlock = new YellowLineBlock( yellowlineBlockID, yellowlineBlock, 162);
GameRegistry.registerBlock(raildirtBlock, "RailDirtBlock");
GameRegistry.registerBlock(kyudomatoBlock, "KyuDoMatoBlock");
GameRegistry.registerBlock(yellowlineBlock, "YellowLineBlock");
}

@EventHandler
public void init( FMLInitializationEvent event)
{
GameRegistry.addRecipe(new ItemStack(raildirtBlock, 2),
new Object[] {" X "," Y ",
'X',Block.dirt,
'Y',Block.cobblestone});
GameRegistry.addRecipe(new ItemStack(kyudomatoBlock, 1),
new Object[] {"XXX","XYX","XXX",
'X',new ItemStack(Block.cloth, 1 , 15),
'Y',Block.cloth});
GameRegistry.addRecipe(new ItemStack(yellowlineBlock, 1),
new Object[]{" "," X "," Y",
'X',new ItemStack(Block.cloth, 1, 4),
'Y',Block.stoneBrick});

LanguageRegistry.addName(raildirtBlock, "RailDirt");
LanguageRegistry.addName(kyudomatoBlock, "KyuDoMatoBlock");
LanguageRegistry.addName(new ItemStack(yellowlineBlock, 1, 0), "YellowLineBlock");
LanguageRegistry.instance().addNameForObject(kyudomatoBlock, "ja_JP", "弓道の的");
LanguageRegistry.instance().addNameForObject(raildirtBlock, "ja_JP", "敷石ブロック");
LanguageRegistry.instance().addNameForObject(new ItemStack(yellowlineBlock, 1, 0), "ja_JP", "黄色い線");
}
}


yellowlineBlock.java

package nikosMods;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockStairs;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

public class YellowLineBlock extends BlockStairs
{
@SideOnly(Side.CLIENT)
private Icon blockFront;
public YellowLineBlock(int id, Block yellowlineBlock, int Metadata)
{
super(id, yellowlineBlock, Metadata);
this.setCreativeTab( CreativeTabs.tabBlock);
this.setUnlocalizedName( "YellowLineBlock");
this.setTextureName( "niko:yellowline_block");
this.setStepSound(soundStoneFootstep);
this.setHardness(2.0f);
this.useNeighborBrightness[id] = true;
}
@Override
public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack)
{
//ブロックを設置するときの方角を決める(これを設定してないと東西南北が固定になる
int l = MathHelper.floor_double((double)(par5EntityLivingBase.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
par1World.setBlockMetadataWithNotify(par2, par3, par4, l, 2);
}

@Override
@SideOnly(Side.CLIENT)
public Icon getIcon(int par1, int par2)
{
//ブロックの表示面の方向を決める(これを設定しないと全部のテクスチャが同じテクスチャになる)
return par1 == 1 ? this.blockIcon : (par1 == 0 ? this.blockIcon : (par2 == 2 && par1 == 2 ? this.blockFront : (par2 == 3 && par1 == 5 ? this.blockFront : (par2 == 0 && par1 == 3 ? this.blockFront : (par2 == 1 && par1 == 4 ? this.blockFront : this.blockIcon)))));
}

@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister par1IconRegister)
{
//ブロックの表示面に貼るテクスチャを設定する(blockFrontはフロントの表示テクスチャ、blockIconはFront以外の表示テクスチャ)
this.blockIcon = par1IconRegister.registerIcon("raildirt_block");
this.blockFront = par1IconRegister.registerIcon("yellowline_block");
}
}
need
ID:26056bf3
 

  • (PostNo.215784)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by elise_blacklab » 2015年2月08日(日) 02:08

need さんが書きました:yellowlineBlock = new YellowLineBlock( yellowlineBlockID, yellowlineBlock, 162);


もう一度書きますが
elise_blacklab さんが書きました:ただし、コンストラクタはBlockを要求するため、元となるBlockは別に作っておく必要があります。

BlockStairsのコンストラクタにまだ何もないyellowlineBlockを渡しちゃダメです。
既存のブロックを元に階段状にするのがBlockStairsの役割ですので、元となるBlockのインスタンスは生成済みでなければなりません。
先に挙げたURLにコード例が載っていますので、それコピペしてもいいから試してみてください。
それからBlockStairsコンストラクタの第3引数は基本的に1 0です。
最後に編集したユーザー elise_blacklab [ 2015年2月08日(日) 10:47 ], 累計 2 回
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2273
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215821)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by komugiko » 2015年2月08日(日) 10:10

elise_blacklab さんが書きました:それからBlockStairsコンストラクタの第3引数は基本的に1です。

一応補足しておくと、BlockStairsコンストラクタの第3引数はベースとなるブロックのメタデータでありますね。
羊毛のような色違いブロックなどを階段にするために使うものです。
なので基本は1と言うより0かと。
komugiko
ID:5875eb52
石炭掘り
 
記事: 228
登録日時: 2013年3月07日(木) 21:26
お住まい: コンフィグファルの中

  • (PostNo.215839)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月08日(日) 11:16

返信遅れました。
理解が乏しく申し訳ないです・・・
でもやっと分かりました!
できたらもう一度ソース貼ります!!
こんな私に教えて下さりありがとうございました。
need
ID:26056bf3
 

  • (PostNo.215863)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月08日(日) 13:17

一応かいてみました

Nicore

package nikosMods;

import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

@Mod( modid="Niko's Mods", name="Niko's Mods", version="1.6.4")
@NetworkMod( clientSideRequired = true, serverSideRequired = false, versionBounds = "1.6.4")
public class Nikore
{
public static Block raildirtBlock;
public static Block kyudomatoBlock;
public static Block yellowlineBlock;
public static int raildirtBlockID = 160;
public static int kyudomatoBlockID = 161;
public static int yellowlineBlockID = 162;

@EventHandler
public void preInit( FMLPreInitializationEvent event)
{
raildirtBlock = new RailDirtBlock( raildirtBlockID);
kyudomatoBlock = new KyuDoMatoBlock( kyudomatoBlockID);
yellowlineBlock = new YellowLineBlock( yellowlineBlockID);
GameRegistry.registerBlock(raildirtBlock, "RailDirtBlock");
GameRegistry.registerBlock(kyudomatoBlock, "KyuDoMatoBlock");
GameRegistry.registerBlock(yellowlineBlock, "YellowLineBlock");
}

@EventHandler
public void init( FMLInitializationEvent event)
{
GameRegistry.addRecipe(new ItemStack(raildirtBlock, 2),
new Object[] {" X "," Y ",
'X',Block.dirt,
'Y',Block.cobblestone});
GameRegistry.addRecipe(new ItemStack(kyudomatoBlock, 1),
new Object[] {"XXX","XYX","XXX",
'X',new ItemStack(Block.cloth, 1 , 15),
'Y',Block.cloth});
GameRegistry.addRecipe(new ItemStack(yellowlineBlock, 1),
new Object[]{" "," X "," Y",
'X',new ItemStack(Block.cloth, 1, 4),
'Y',Block.stoneBrick});

LanguageRegistry.addName(raildirtBlock, "RailDirt");
LanguageRegistry.addName(kyudomatoBlock, "KyuDoMatoBlock");
LanguageRegistry.addName(new ItemStack(yellowlineBlock, 1, 0), "YellowLineBlock");
LanguageRegistry.instance().addNameForObject(kyudomatoBlock, "ja_JP", "弓道の的");
LanguageRegistry.instance().addNameForObject(raildirtBlock, "ja_JP", "敷石ブロック");
LanguageRegistry.instance().addNameForObject(new ItemStack(yellowlineBlock, 1, 0), "ja_JP", "黄色い線");
}
}

YellowLineBlock_Settings

package nikosMods;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockStairs;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

public class YellowLineBlock_Settings extends BlockStairs
{
@SideOnly(Side.CLIENT)
private Icon blockFront;
public YellowLineBlock_Settings(int id, Block yellowlineBlock, int Metadata)
{
super(id, yellowlineBlock, Metadata);
this.useNeighborBrightness[id] = true;
}
@Override
public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack)
{
//ブロックを設置するときの方角を決める(これを設定してないと東西南北が固定になる
int l = MathHelper.floor_double((double)(par5EntityLivingBase.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
par1World.setBlockMetadataWithNotify(par2, par3, par4, l, 2);
}

@Override
@SideOnly(Side.CLIENT)
public Icon getIcon(int par1, int par2)
{
//ブロックの表示面の方向を決める(これを設定しないと全部のテクスチャが同じテクスチャになる)
return par1 == 1 ? this.blockIcon : (par1 == 0 ? this.blockIcon : (par2 == 2 && par1 == 2 ? this.blockFront : (par2 == 3 && par1 == 5 ? this.blockFront : (par2 == 0 && par1 == 3 ? this.blockFront : (par2 == 1 && par1 == 4 ? this.blockFront : this.blockIcon)))));
}

@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister par1IconRegister)
{
//ブロックの表示面に貼るテクスチャを設定する(blockFrontはフロントの表示テクスチャ、blockIconはFront以外の表示テクスチャ)
this.blockIcon = par1IconRegister.registerIcon("raildirt_block");
this.blockFront = par1IconRegister.registerIcon("yellowline_block");
}
}

YellowLineBlock

package nikosMods;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;

public class YellowLineBlock extends Block
{
public YellowLineBlock( int par1)
{
super( par1, Material.rock);
this.setCreativeTab( CreativeTabs.tabBlock);
this.setUnlocalizedName( "YellowLineBlock");
this.setTextureName( "niko:yellowline_block");
this.setStepSound(soundStoneFootstep);
this.setHardness(2.0f);
}
}

どうでしょうか・・・?
need
ID:26056bf3
 

  • (PostNo.215882)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by elise_blacklab » 2015年2月08日(日) 14:51

無理しなくていいのでコピペしてみましょう。
先に提示したリンク先をよく読んでください。

コード: 全て選択
   public static Block strawBL = new nosBlock(3502, 2, Material.cactus)
    .setHardness(0.5F).setStepSound(Block.soundGrassFootstep)
    .setBlockName("strawBL").setCreativeTab(CreativeTabs.tabBlock);
   
   public static Block strawRF = new nosStairs(3503, strawBL, 1)
    .setHardness(0.5F).setStepSound(Block.soundGrassFootstep)
    .setBlockName("strawBL").setCreativeTab(CreativeTabs.tabBlock);

      LanguageRegistry.addName(strawRF, "Straw Thatch");
      MinecraftForge.setBlockHarvestLevel(strawRF, "axe", 1);
      GameRegistry.registerBlock(strawRF);

階段を追加するのであればGameRegistry.registerBlock()に渡すべきはBlockStairsを継承したクラスのインスタンスです。
クラス名を_SettingsなんてしていますがもとのBlockには何の変化もありません。BlockをもとにBlockStairsを作るわけですからBlockStairsを登録せねばなりません。
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2273
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215885)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月08日(日) 14:59

これはNikoreに書くのですか?
need
ID:26056bf3
 

  • (PostNo.215887)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by elise_blacklab » 2015年2月08日(日) 15:02

need さんが書きました:これはNikoreに書くのですか?

一応言っておくとこれは先に示したリンクからの引用部分です。
メソッド名などを見比べれば、Nicoreクラスのどこに書くべきかは分かるはずです。
他クラスのコードもリンク先に軽く書かれていますのでそちらを参考に…ってかコピペして試してみるといいと思います。
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2273
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215888)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月08日(日) 15:05

自己解決しました
need
ID:26056bf3
 

  • (PostNo.215896)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月08日(日) 16:04

これでどうでしょうか

Nikore

package nikosMods;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

@Mod( modid="Niko's Mods", name="Niko's Mods", version="1.6.4")
@NetworkMod( clientSideRequired = true, serverSideRequired = false, versionBounds = "1.6.4")
public class Nikore
{
public static Block raildirtBlock;
public static Block kyudomatoBlock;
public static Block yellowlineBlock = new YellowLineBlock(162, Material.rock);
public static Block yellowlinestoneBlock = new YellowLineStairsBlock(163, yellowlineBlock, 0);
public static int raildirtBlockID = 160;
public static int kyudomatoBlockID = 161;
public static int yellowlineBlockID = 162;
public static int yellowlinestoneBlockID = 163;

@EventHandler
public void preInit( FMLPreInitializationEvent event)
{
raildirtBlock = new RailDirtBlock( raildirtBlockID);
kyudomatoBlock = new KyuDoMatoBlock( kyudomatoBlockID);
yellowlineBlock = new YellowLineBlock( yellowlineBlockID, Material.rock);
yellowlinestoneBlock = new YellowLineStairsBlock( yellowlinestoneBlockID, yellowlinestoneBlock, 0);
GameRegistry.registerBlock(raildirtBlock, "RailDirtBlock");
GameRegistry.registerBlock(kyudomatoBlock, "KyuDoMatoBlock");
GameRegistry.registerBlock(yellowlineBlock, "YellowLineBlock");
GameRegistry.registerBlock(yellowlinestoneBlock, "YellowLineStoneBlock");
}

@EventHandler
public void init( FMLInitializationEvent event)
{
GameRegistry.addRecipe(new ItemStack(raildirtBlock, 2),
new Object[] {" X "," Y ",
'X',Block.dirt,
'Y',Block.cobblestone});
GameRegistry.addRecipe(new ItemStack(kyudomatoBlock, 1),
new Object[] {"XXX","XYX","XXX",
'X',new ItemStack(Block.cloth, 1 , 15),
'Y',Block.cloth});
GameRegistry.addRecipe(new ItemStack(yellowlinestoneBlock, 1),
new Object[]{" "," X "," Y",
'X',new ItemStack(Block.cloth, 1, 4),
'Y',Block.stoneBrick});

LanguageRegistry.addName(raildirtBlock, "RailDirt");
LanguageRegistry.addName(kyudomatoBlock, "KyuDoMatoBlock");
LanguageRegistry.addName(yellowlineBlock, "YellowLineBlock");
LanguageRegistry.addName(new ItemStack(yellowlinestoneBlock, 1, 0), "YellowLineStoneBlock");
LanguageRegistry.instance().addNameForObject(kyudomatoBlock, "ja_JP", "弓道の的");
LanguageRegistry.instance().addNameForObject(raildirtBlock, "ja_JP", "敷石ブロック");
LanguageRegistry.instance().addNameForObject(yellowlineBlock, "ja_JP", "黄色い線のもと");
LanguageRegistry.instance().addNameForObject(new ItemStack(yellowlinestoneBlock, 1, 0), "ja_JP", "黄色い線");
}
}

YellowLineBlock

package nikosMods;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.util.Icon;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;

public class YellowLineBlock extends Block
{
public YellowLineBlock (int id, Material material)
{
super(id, Material.rock);
this.setCreativeTab( CreativeTabs.tabBlock);
this.setUnlocalizedName( "YellowLineBlock");
this.setTextureName( "niko:yellowline_front_block");
this.setStepSound(soundStoneFootstep);
this.setHardness(2.0f);
this.useNeighborBrightness[id] = true;
}
}

YellowLineStairsBlock _Settingsから名前を変更しました

package nikosMods;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockStairs;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

public class YellowLineStairsBlock extends BlockStairs
{
@SideOnly(Side.CLIENT)
private Icon blockFront;
public YellowLineStairsBlock(int id, Block yellowlinestoneBlock, int Metadata)
{
super(id, yellowlinestoneBlock, Metadata);
this.setCreativeTab( CreativeTabs.tabBlock);
this.setUnlocalizedName( "YellowLineStoneBlock");
this.setTextureName( "niko:yellowline_front_block");
this.setStepSound(soundStoneFootstep);
this.setHardness(2.0f);
this.useNeighborBrightness[id] = true;
}
@Override
public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack)
{
//ブロックを設置するときの方角を決める(これを設定してないと東西南北が固定になる
int l = MathHelper.floor_double((double)(par5EntityLivingBase.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
par1World.setBlockMetadataWithNotify(par2, par3, par4, l, 2);
}

@Override
@SideOnly(Side.CLIENT)
public Icon getIcon(int par1, int par2)
{
//ブロックの表示面の方向を決める(これを設定しないと全部のテクスチャが同じテクスチャになる)
return par1 == 1 ? this.blockIcon : (par1 == 0 ? this.blockIcon : (par2 == 2 && par1 == 2 ? this.blockFront : (par2 == 3 && par1 == 5 ? this.blockFront : (par2 == 0 && par1 == 3 ? this.blockFront : (par2 == 1 && par1 == 4 ? this.blockFront : this.blockIcon)))));
}

@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister par1IconRegister)
{
//ブロックの表示面に貼るテクスチャを設定する(blockFrontはフロントの表示テクスチャ、blockIconはFront以外の表示テクスチャ)
this.blockIcon = par1IconRegister.registerIcon("raildirt_block");
this.blockFront = par1IconRegister.registerIcon("yellowline_front_block");
}
}

これでどうでしょう
need
ID:26056bf3
 

  • (PostNo.215898)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by elise_blacklab » 2015年2月08日(日) 16:08

need さんが書きました:yellowlinestoneBlock = new YellowLineStairsBlock( yellowlinestoneBlockID, yellowlinestoneBlock, 0);
ここまだ直ってないのですが。

elise_blacklab さんが書きました:
コード: 全て選択
   public static Block strawBL = new nosBlock(3502, 2, Material.cactus)
    .setHardness(0.5F).setStepSound(Block.soundGrassFootstep)
    .setBlockName("strawBL").setCreativeTab(CreativeTabs.tabBlock);
   
   public static Block strawRF = new nosStairs(3503, strawBL, 1)
    .setHardness(0.5F).setStepSound(Block.soundGrassFootstep)
    .setBlockName("strawBL").setCreativeTab(CreativeTabs.tabBlock);

      LanguageRegistry.addName(strawRF, "Straw Thatch");
      MinecraftForge.setBlockHarvestLevel(strawRF, "axe", 1);
      GameRegistry.registerBlock(strawRF);

これとよーく見比べてください。
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2273
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215899)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月08日(日) 16:15

本当ですね。ありがとうございます。
でも直して実行するとクラッシュしてしまいます。
ID162がかぶってる?といわれるようですが、どうすればよいでしょう。

クラッシュレポート
---- Minecraft Crash Report ----
// Surprise! Haha. Well, this is awkward.

Time: 15/02/08 16:12
Description: Initializing game

java.lang.IllegalArgumentException: Slot 162 is already occupied by nikosMods.YellowLineBlock@dd7767 when adding nikosMods.YellowLineBlock@1205c0a
at net.minecraft.block.Block.<init>(Block.java:349)
at nikosMods.YellowLineBlock.<init>(YellowLineBlock.java:14)
at nikosMods.Nikore.preInit(Nikore.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:545)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
at com.google.common.eventbus.EventBus.post(EventBus.java:267)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:201)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
at com.google.common.eventbus.EventBus.post(EventBus.java:267)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:112)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:522)
at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:183)
at net.minecraft.client.Minecraft.startGame(Minecraft.java:473)
at net.minecraft.client.Minecraft.run(Minecraft.java:808)
at net.minecraft.client.main.Main.main(Main.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
at net.minecraft.launchwrapper.Launch.main(Launch.java:27)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
at net.minecraft.block.Block.<init>(Block.java:349)
at nikosMods.YellowLineBlock.<init>(YellowLineBlock.java:14)
at nikosMods.Nikore.preInit(Nikore.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:545)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
at com.google.common.eventbus.EventBus.post(EventBus.java:267)
at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:201)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
at com.google.common.eventbus.EventBus.post(EventBus.java:267)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:112)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:522)
at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:183)
at net.minecraft.client.Minecraft.startGame(Minecraft.java:473)

-- Initialization --
Details:
Stacktrace:
at net.minecraft.client.Minecraft.run(Minecraft.java:808)
at net.minecraft.client.main.Main.main(Main.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:131)
at net.minecraft.launchwrapper.Launch.main(Launch.java:27)

-- System Details --
Details:
Minecraft Version: 1.6.4
Operating System: Windows Vista (x86) version 6.0
Java Version: 1.8.0_11, Oracle Corporation
Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation
Memory: 929412712 bytes (886 MB) / 1060372480 bytes (1011 MB) up to 1060372480 bytes (1011 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
Suspicious classes: FML and Forge are installed
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v8.11 FML v6.4.49.965 Minecraft Forge 9.11.1.965 4 mods loaded, 4 mods active
mcp{8.09} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized
FML{6.4.49.965} [Forge Mod Loader] (bin) Unloaded->Constructed->Pre-initialized
Forge{9.11.1.965} [Minecraft Forge] (bin) Unloaded->Constructed->Pre-initialized
Niko's Mods{1.6.4} [Niko's Mods] (bin) Unloaded->Constructed->Errored
Launched Version: 1.6
LWJGL: 2.9.0
OpenGL: Intel Cantiga GL version 2.0.0 - Build 7.15.10.1787, Intel
Is Modded: Definitely; Client brand changed to 'fml,forge'
Type: Client (map_client.txt)
Resource Pack: Default
Current Language: 日本語 (日本)
Profiler Position: N/A (disabled)
Vec3 Pool Size: ~~ERROR~~ NullPointerException: null
need
ID:26056bf3
 

  • (PostNo.215902)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by elise_blacklab » 2015年2月08日(日) 16:22

コード: 全て選択
public static Block yellowlineBlock = new YellowLineBlock(162, Material.rock);
public static Block yellowlinestoneBlock = new YellowLineStairsBlock(163, yellowlineBlock, 0);

凡ミスです。冒頭にフィールドを定義していますがその際に初期化も行っているのが原因です。後からpreInit()が同じブロックを同じIDで登録しようとしてエラーになっています。
フィールド定義部分ではあまり初期化処理を書くべきではありません。
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2273
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.215903)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by need » 2015年2月08日(日) 16:25

どのようにすればよいでしょう?
need
ID:26056bf3
 

  • (PostNo.215906)

Re: 1.6.4-9.11.1.965forgeでのmod開発で複数のテクスチャを持つブロックと階段型ブロックの作り方

投稿記事by elise_blacklab » 2015年2月08日(日) 16:38

need さんが書きました:どのようにすればよいでしょう?

= new〜をダブらせないようにすればいいのです。
コード: 全て選択
public static Block yellowlineBlock = new YellowLineBlock(162, Material.rock);
public static Block yellowlinestoneBlock = new YellowLineStairsBlock(163, yellowlineBlock, 0);

ここを
コード: 全て選択
public static Block yellowlineBlock;
public static Block yellowlinestoneBlock;

こうするだけ
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:ea3f3f08
掘り廃人
 
記事: 2273
登録日時: 2014年6月25日(水) 18:30

次へ

Return to 開発関連

x