提供: Minecraft Modding Wiki
移動先: 案内検索
(ページ作成)
 
1行目: 1行目:
 +
{{前提MOD|reqmod="ModLoader"}}
 +
ここは、[[木・苗木を追加する]]を理解した中級者向けのチュートリアルです。<br />
 
==概要==
 
==概要==
アイテムの入ったチェストを自動で生成するために、以下のクラスを使用します。
+
アイテムの入ったチェストを生成します。<br>
 +
WorldGenerateについては[[木・苗木を追加する]]を参考にしてください。<br>
 +
ここでは、generateSurfaceメソッドとWorldGeneratorを継承したクラスの中について解説します。<br>
 +
<br>
 +
ここでは、以下のクラスを使います。
 +
;TileEntityChest
 +
Chestの中身が保存されているクラス
 +
;WorldGenerator
 +
Worldに建造物などを生成するためのクラス
 +
;World
 +
説明しにくいので割合<br>
 +
==Worldにチェストを生成する。==
 +
;mod_Sample
 +
<source lang="java">
 +
package net.minecraft.src;
 +
 
 +
import java.util.Random;
 +
 
 +
public class mod_Sample extends BaseMod {
 +
 
 +
@Override
 +
public String getVersion() {
 +
return "Sample";
 +
}
 +
 
 +
@Override
 +
public void load() {
 +
 
 +
}
  
;TileEntityChest:チェストを開くと出てくるアイテム欄です。
+
/*
;ItemStack:アイテム欄の1項目単位です。
+
* (非 Javadoc)
 +
* @see net.minecraft.src.BaseMod#generateSurface(net.minecraft.src.World, java.util.Random, int, int)
 +
* ここの変数名や引数名は自分にあった使い方に変更してもいいです。
 +
*/
  
===TileEntityChestにItemStackをセット===
+
@Override
次のコードでアイテム欄にレッドストーンダストと金ブロックをセットします。
+
public void generateSurface(World par1World,Random rand,int par2,int par3){
 +
WorldGenSample var1 = new WorldGenSample(true);
 +
var1.setScale(1, 1, 1);
 +
int xPos = par2 + rand.nextInt(16);
 +
int zPos = par3 + rand.nextInt(16);
 +
int yPos = par1World.getHeightValue(xPos, zPos);
 +
 
 +
var1.generate(par1World, rand, xPos, yPos, zPos);
 +
 
 +
}
 +
 
 +
}
 +
</source>
 +
;WorldGenSample
 
<source lang="java">
 
<source lang="java">
TileEntityChest tEntity = new TileEntityChest();
+
package net.minecraft.src;
ItemStack redstoneStack = new ItemStack( Item.redstone, 15); // 第2引数でアイテムの数を指定します。
+
 
ItemStack goldStack = new ItemStack( Block.blockGold, 20);
+
import java.util.Random;
tEntity.setInventorySlotContents(0, redstoneStack);     // 第1引数はアイテム欄のスロット番号です。左上が0で、右方向に連番が振られています。
+
 
tEntity.setInventorySlotContents(1, goldStack);
+
public class WorldGenSample extends WorldGenerator {
</source>
+
 
 +
private boolean flag = false;
 +
/*
 +
* this.flagは変数名を意味します。
 +
* this.flag = private boolean flag = false;の部分
 +
* flag = 引数のboolean flag
 +
*/
 +
public WorldGenSample(boolean flag){
 +
this.flag = flag;
 +
}
 +
 
 +
@Override
 +
public boolean generate(World par1World, Random rand, int par2, int par3,
 +
int par4) {
 +
//ここでTileEntityChestをキャストします。
 +
TileEntityChest Chest;
 +
//Chestを配置します。
 +
par1World.setBlock(par2, par3, par4, Block.chest.blockID);
 +
//TileEntityChest型変数にTileEntityをWorldクラスから取得し、代入します。
 +
Chest = (TileEntityChest) par1World.getBlockTileEntity(par2, par3+1, par4);
 +
if(Chest != null){//Null以外なら
 +
//引数はスロット番号(-1),ItemStackです。
 +
Chest.setInventorySlotContents(0, new ItemStack(Item.redstone));
 +
}else{
 +
//nullだったらコンソールに文字列を表示して知らせます。
 +
System.out.println("== TileEntityChest=null ==");
 +
}
 +
return flag;
 +
}
  
===チェストをワールドに配置===
+
}
まず何も入っていないチェストを置いてから、TileEntityChestを貼り付けてアイテムを格納します。
 
<source lang="java">
 
world.setBlock(Xc, Yc, Zc, 54);
 
world.setBlockTileEntity(Xc, Yc, Zc, tEntity);
 
</source>
 
変数world,Xc,Yc,Zcは各自で適切なものを用意してください。(world:チェストを置くワールド, (Xc,Yc,Zc):チェストを置く座標)
 
  
==コード全体==
 
<source lang="java">
 
TileEntityChest tEntity = new TileEntityChest();
 
ItemStack redstoneStack = new ItemStack( Item.redstone, 15);
 
ItemStack goldStack = new ItemStack( Block.blockGold, 20);
 
tEntity.setInventorySlotContents(0, redstoneStack);
 
tEntity.setInventorySlotContents(1, goldStack);
 
world.setBlock(Xc, Yc, Zc, 54);
 
world.setBlockTileEntity(Xc, Yc, Zc, tEntity);
 
 
</source>
 
</source>
 
+
このクラスをコピペしてもTileEntityChestはNullになります。
[[Category:アイテムの配置]]
+
どこかを書き換えれば直ります。
 +
どこか探してみてください。
 +
[[Category:Worldに生成する]]

2012年7月18日 (水) 10:33時点における版

この記事は"ModLoader"を前提MODとしています。

ここは、木・苗木を追加するを理解した中級者向けのチュートリアルです。

概要

アイテムの入ったチェストを生成します。
WorldGenerateについては木・苗木を追加するを参考にしてください。
ここでは、generateSurfaceメソッドとWorldGeneratorを継承したクラスの中について解説します。

ここでは、以下のクラスを使います。

TileEntityChest

Chestの中身が保存されているクラス

WorldGenerator

Worldに建造物などを生成するためのクラス

World

説明しにくいので割合

Worldにチェストを生成する。

mod_Sample
package net.minecraft.src;

import java.util.Random;

public class mod_Sample extends BaseMod {

	@Override
	public String getVersion() {
		return "Sample";
	}

	@Override
	public void load() {

	}

	/*
	 * (非 Javadoc)
	 * @see net.minecraft.src.BaseMod#generateSurface(net.minecraft.src.World, java.util.Random, int, int)
	 * ここの変数名や引数名は自分にあった使い方に変更してもいいです。
	 */

	@Override
	public void generateSurface(World par1World,Random rand,int par2,int par3){
		WorldGenSample var1 = new WorldGenSample(true);
		var1.setScale(1, 1, 1);
		int xPos = par2 + rand.nextInt(16);
		int zPos = par3 + rand.nextInt(16);
		int yPos = par1World.getHeightValue(xPos, zPos);

		var1.generate(par1World, rand, xPos, yPos, zPos);

	}

}
WorldGenSample
package net.minecraft.src;

import java.util.Random;

public class WorldGenSample extends WorldGenerator {

	private boolean flag = false;
/*
 * this.flagは変数名を意味します。
 * this.flag = private boolean flag = false;の部分
 * flag = 引数のboolean flag
 */
	public WorldGenSample(boolean flag){
		this.flag = flag;
	}

	@Override
	public boolean generate(World par1World, Random rand, int par2, int par3,
			int par4) {
		//ここでTileEntityChestをキャストします。
		TileEntityChest Chest;
		//Chestを配置します。
		par1World.setBlock(par2, par3, par4, Block.chest.blockID);
		//TileEntityChest型変数にTileEntityをWorldクラスから取得し、代入します。
		Chest = (TileEntityChest) par1World.getBlockTileEntity(par2, par3+1, par4);
		if(Chest != null){//Null以外なら
			//引数はスロット番号(-1),ItemStackです。
			Chest.setInventorySlotContents(0, new ItemStack(Item.redstone));
		}else{
			//nullだったらコンソールに文字列を表示して知らせます。
			System.out.println("== TileEntityChest=null ==");
		}
		return flag;
	}

}

このクラスをコピペしてもTileEntityChestはNullになります。 どこかを書き換えれば直ります。 どこか探してみてください。