[技術共有]Blockの各メソッドについて。[MCP44]

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

[技術共有]Blockの各メソッドについて。[MCP44]

投稿記事by Nuclear » 2011年7月03日(日) 11:26

現在v1.8.1(MCP44)の時点でのメソッド一覧です。

私自身まだよくわかってないところも多いのですがそこは皆さんと協力して埋めたり改善するということで。

こうしたほうが見やすいよ!と言ってくれれば改善するかもしれません

返り値は全てBlockのデフォの状態のものです。



protected Block(int i, Material material)
コンストラクタ
引数
i : ブロックID
material : ブロックのMaterial

protected Block(int i, int j, Material material)
コンストラクタ
引数
i : ブロックID
j : テクスチャの番号
material : ブロックのMaterial

private Block setRequiresSelfNotify()
これはメタデータごとにテスクチャを切り替えたい場合使用するようです。
引数
なし
返り値
this

protected Block setStepSound(StepSound stepsound)
stepsoundをSetするメソッドです。
引数
stepsound : 設定するStepSound
返り値
this


protected Block setLightOpacity(int i)
LightOpacity(光に対する不透明度)をsetするメソッドです。
1ごとに光レベルが1減ります。
引数
i : 減らす光量レベル
返り値
this

protected Block setLightValue(float f)
LightValue(ブロック自体の光量)をsetするメソッドです。
引数
f : 光量レベル15を1.0として相対的に表したもの(光量レベル1あたり0.125)。
返り値
this

protected Block setResistance(float f)
BlockのResistance(爆破耐性)をSetするメソッドです。
引数
f : ?
返り値
this

public boolean renderAsNormalBlock()
普通のブロックとして描画するかどうか判別するメソッドです。
引数
なし
返り値
true

public int getRenderType()
描画タイプをgetするメソッドです。
引数
なし
返り値
0

protected Block setHardness(float f)
BlockのHardness(ブロックの硬さ)をSetするメソッドです。
引数
f : 硬さ
返り値
this

protected Block setTickOnLoad(boolean flag)
updateTickを発生させるflagをsetするメソッドです。
引数
flag : 発生させるかどうか
返り値
this

public void setBlockBounds(float f, float f1, float f2, float f3, float f4, float f5)
ブロックの当たり判定をsetするメソッドです。
引数
f  : x方向の開始地点
f1 : y方向の開始地点
f2 : z方向の開始地点
f3 : x方向の終端地点
f4 : y方向の終端地点
f5 : z方向の終端地点
返り値
なし

public float getBlockBrightness(IBlockAccess iblockaccess, int i, int j, int k)
(i,j,k)地点のLightValueをgetするメソッドです。
引数
iblockaccess : ?
i : x座標
j : y座標
k : z座標
返り値
iblockaccess.getBrightness(i, j, k, lightValue[blockID]);

protected Block setBlockUnbreakable()
BlockのHardnessを-1に設定してそのブロックを壊れないようにします。
引数
なし
返り値
this

public boolean shouldSideBeRendered(IBlockAccess iblockaccess, int i, int j, int k, int l)
英単語から予測するにブロックの内側から横からレンダリングすべきかどうかを取得するメソッド。
引数
iblockaccess : ?
i : x座標
j : y座標
k : z座標
l : Side(向き)
返り値


public int getBlockTexture(IBlockAccess iblockaccess, int i, int j, int k, int l)
ブロックのテスクチャをgetするメソッド。
引数
iblockaccess : ?
i : x座標
j : y座標
k : z座標
l : Side(向き)
返り値
getBlockTextureFromSideAndMetadata(l, iblockaccess.getBlockMetadata(i, j, k))

public int getBlockTextureFromSideAndMetadata(int i, int j)
ブロックのテスクチャをgetするメソッド。
引数
i : Side(向き)
j : Metadata
返り値
getBlockTextureFromSide(i)

public int getBlockTextureFromSide(int i)
ブロックのテスクチャをgetするメソッド。
引数
i : Side(向き)
返り値
blockIndexInTexture

public boolean isOpaqueCube()
不透明なブロックかgetするメソッド。
引数
なし
返り値
true

public boolean canCollideCheck(int i, boolean flag)
英単語から予測するに衝突判定を行うかどうかをgetするメソッド。
引数
i : ?
flag : ?
返り値
isCollidable()

public boolean isCollidable()
英単語から予測するに衝突判定を行うかどうかをgetするメソッド。
引数
なし
返り値
true

public void updateTick(World world, int i, int j, int k, Random random)
プレイヤーのいるチャンクを中心とした19*19チャンクでtick毎におよそ0.2%の確率で発生し、
各チャンクから80ブロックが選ばれsetTickOnLoadがtrueなら発生します。
引数
world : ワールドのオブジェクト
i : ブロックが存在するx座標
j : ブロックが存在するy座標
k : ブロックが存在するz座標
random : 乱数のオブジェクト
返り値
なし

public void randomDisplayTick(World world, int i, int j, int k, Random random)
プレイヤーを中心とした31*31*31ブロック(プレイヤーに近いほど発生頻度が高い)で
tick毎に1000ブロックがランダムに選択され発生(同一tickで複数回呼び出されることがある)します。
引数
world : ワールドのオブジェクト
i : ブロックが存在するx座標
j : ブロックが存在するy座標
k : ブロックが存在するz座標
random : 乱数のオブジェクト
返り値
なし

public void onBlockDestroyedByPlayer(World world, int i, int j, int k, int l)
プレイヤーにブロックが破壊された時呼ばれるメソッドです。
引数
world : ワールドのオブジェクト
i : ブロックが存在していたx座標
j : ブロックが存在していたy座標
k : ブロックが存在していたz座標
l : 破壊されたBlockのMetadata
返り値
なし

public void onNeighborBlockChange(World world, int i, int j, int k, int l)
近隣のブロックが変化したときに呼ばれるメソッド。
引数
world : ワールドのオブジェクト
i : ブロックが存在していたx座標
j : ブロックが存在していたy座標
k : ブロックが存在していたz座標
l : ?
返り値
なし

public int tickRate()
Scheduleupdateでアップデートするときの間隔をgetするメソッド。
引数
なし
返り値
10

public void onBlockAdded(World world, int i, int j, int k)
ブロックが置かれたときに呼ばれるメソッド。
引数
world : ワールドのオブジェクト
i : ブロックが存在するx座標
j : ブロックが存在するy座標
k : ブロックが存在するz座標
返り値
なし

public void onBlockRemoval(World world, int i, int j, int k)
ブロックが撤去されたときに呼ばれるメソッド。
引数
world : ワールドのオブジェクト
i : ブロックが存在していたx座標
j : ブロックが存在していたy座標
k : ブロックが存在していたz座標
返り値
なし

public int quantityDropped(Random random)
ブロックを壊したときのdropする数をgetするメソッド
引数
random : 乱数のオブジェクト
返り値
1

public int idDropped(int i, Random random)
ブロックを壊したときのdropするIDをgetするメソッド
引数
random : 乱数のオブジェクト
返り値
blockID

public float blockStrength(EntityPlayer entityplayer)
英単語から予測するにプレイヤーがブロックを破壊するときのブロックの強度をgetするメソッド。
引数
entityplayer : プレイヤーのオブジェクト
返り値


public final void dropBlockAsItem(World world, int i, int j, int k, int l)
ブロックをアイテムとしてdropするメソッド。
引数
world : ワールドのオブジェクト
i : ブロックが存在していたx座標
j : ブロックが存在していたy座標
k : ブロックが存在していたz座標
l : ブロックのmetadata
返り値
なし

public void dropBlockAsItemWithChance(World world, int i, int j, int k, int l, float f)
ブロックをアイテムとしてdropするメソッド。
引数
world : ワールドのオブジェクト
i : ブロックが存在していたx座標
j : ブロックが存在していたy座標
k : ブロックが存在していたz座標
l : ブロックのmetadata
f : ?
返り値
なし

protected int damageDropped(int i)
ブロックを壊したときのdropするmetadataをgetするメソッド
引数
i : blockのmetadata
返り値
0

public float getExplosionResistance(Entity entity)
BlockのResistance(爆発耐性)をgetするメソッド。
引数
entity : ?
返り値
blockResistance / 5F

public void onBlockDestroyedByExplosion(World world, int i, int j, int k)
Blockが爆発で破壊されたときに呼ばれるメソッド。
引数
world : ワールドのオブジェクト
i : ブロックが存在していたx座標
j : ブロックが存在していたy座標
k : ブロックが存在していたz座標
返り値
なし

public int getRenderBlockPass()
謎。
引数
なし
返り値
0

public boolean canPlaceBlockOnSide(World world, int i, int j, int k, int l)
ブロックを他のブロックの側面に置けるかどうかgetするメソッド。
引数
world : ワールドのオブジェクト
i : 置こうとするx座標
j : 置こうとするy座標
k : 置こうとするz座標
l : 置こうとする側面
返り値
canPlaceBlockAt(world, i, j, k)

public boolean canPlaceBlockAt(World world, int i, int j, int k)
ブロックを置けるかどうかgetするメソッド。
引数
world : ワールドのオブジェクト
i : 置こうとするx座標
j : 置こうとするy座標
k : 置こうとするz座標
返り値


public boolean blockActivated(World world, int i, int j, int k, EntityPlayer entityplayer)
ブロックが右クリックされたときに呼ばれるメソッド。
引数
world : ワールドのオブジェクト
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
entityplayer : プレイヤーのオブジェクト
返り値
false

public void onEntityWalking(World world, int i, int j, int k, Entity entity)
何かが上を歩いた時呼ばれるメソッド。
引数
world : ワールドのオブジェクト
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
entity : 上を歩いたオブジェクト
返り値
なし

public void onBlockPlaced(World world, int i, int j, int k, int l)
プレイヤーがブロックを置いたときに呼ばれるメソッド。
引数
world : ワールドのオブジェクト
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
l : ?
返り値
なし

public void onBlockClicked(World world, int i, int j, int k, EntityPlayer entityplayer)
ブロックを左クリックした時呼ばれるメソッド。
引数
world : ワールドのオブジェクト
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
entityplayer : プレイヤーのオブジェクト
返り値
なし

public int colorMultiplier(IBlockAccess iblockaccess, int i, int j, int k)
Blockの色乗算するときの色をgetするメソッド。
引数
iblockaccess : ?
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
返り値
0xFFFFFF

public boolean isPoweringTo(IBlockAccess iblockaccess, int i, int j, int k, int l)
赤石の動力が送れるかどうかをgetするメソッド
引数
iblockaccess : ?
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
l : Side(向き)
返り値
false

public boolean canProvidePower()
赤石の動力が送れるかどうかをgetするメソッド。
引数
なし
返り値
false

public void onEntityCollidedWithBlock(World world, int i, int j, int k, Entity entity)
Entityがブロックと重なった時呼ばれるメソッドです。
引数
world : ワールドのオブジェクト
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
entity : 重なったEntity
返り値
なし

public boolean isIndirectlyPoweringTo(World world, int i, int j, int k, int l)
赤石の動力が間接的に送れるかどうかをgetするメソッド
引数
iblockaccess : ?
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
l : Side(向き)
返り値
false

public void harvestBlock(World world, EntityPlayer entityplayer, int i, int j, int k, int l)
プレイヤーがブロックの素材を考えてブロックを破壊した(石ならピッケルなど)時に呼ばれるメソッドです。
引数
world : ワールドのオブジェクト
entityplayer : プレイヤーのオブジェクト
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
l : metadata
返り値
なし

public boolean canBlockStay(World world, int i, int j, int k)
ブロックが継続して存在できるかどうかgetするメソッド。
引数
world : ワールドのオブジェクト
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
返り値
なし

public void onBlockPlacedBy(World world, int i, int j, int k, EntityLiving entityliving)
ブロックがEntityによって置かれたときに発生するメソッド。
引数
world : ワールドのオブジェクト
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
entityliving : ブロックを置いたEntity
返り値
なし

public Block setBlockName(String s)
内部でのブロックの名前をsetするメソッド。
引数
s : 名前
返り値
this

public String getBlockName()
内部でのブロックの名前をgetするメソッド。
引数
なし
返り値
blockName

public void playBlock(World world, int i, int j, int k, int l, int i1)
謎。
引数
world : ワールドのオブジェクト
i : ブロックのx座標
j : ブロックのy座標
k : ブロックのz座標
l : ?
i1 : ?
返り値
なし

public boolean getEnableStats()
ブロックがスタックできるかどうかgetするメソッド。
引数
なし
返り値
enableStats

protected Block disableStats()
ブロックをスタックできないようにsetするメソッド。
引数
なし
返り値
this
最後に編集したユーザー Nuclear [ 2011年9月29日(木) 18:43 ], 累計 2 回
アバター
Nuclear
ID:007f332e
1スタック
 
記事: 64
登録日時: 2011年6月21日(火) 19:08
お住まい: 幻想郷 地霊殿 105皇室

  • (PostNo.352)

Re: [技術共有]Blockの各メソッドについて。

投稿記事by uniunichan » 2011年7月03日(日) 12:28

これは・・・参考にさせていただきます。
うにうにちゃんです。
アバター
uniunichan
ID:6b3a294b
鉄鉱掘り
 
記事: 343
登録日時: 2011年6月21日(火) 18:40
お住まい: グンマー

  • (PostNo.423)

Re: [技術共有]Blockの各メソッドについて。

投稿記事by Aurora » 2011年7月05日(火) 17:26

MCP+ModLoaderを学習してる最中なので助かります。参考にさせてもらいますね。

MCP1.7.2対応版出てくれないかな・・・1.72対応MODが未だに少ないのはそのせいなんだよね。
[PR]軽量化MODを公開しています
アバター
Aurora
ID:754258b5
金掘り
 
記事: 457
登録日時: 2011年6月27日(月) 23:46
お住まい: Aurora City

  • (PostNo.499)

Re: [技術共有]Blockの各メソッドについて。

投稿記事by Aurora » 2011年7月08日(金) 09:52

やっと大体の感触はつかみ始めてきたのですが、個人的にまだまだですね。
私はJavaScript使いなので、Javaを解読するのはちょっと苦労します。
Javaだから同じだろうと思わないでください。JavaScriptの方が凄く簡単なんですから。

1.7.2のコードを見て分かった事

protected void func_28028_i()
存在していないでしょう。

protected Block setResistance(float f)
ほぼ間違いなく爆発による耐性です。setResistanceの最大値はsetHardness*5/3だそうです。

protected Block setHardness(float f)
素手を基準にした壊しにくさ。

public boolean func_28029_d(IBlockAccess iblockaccess, int i, int j, int k, int l)
存在していないでしょう。

public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k)
ブロックとの当たり判定。

public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int i, int j, int k)
ブロックを選択すると、フォーカスラインを表示する範囲。実際の選択範囲とは違うようだ。

public void updateTick(World world, int i, int j, int k, Random random)
ランダム時間経過毎に自動でコードが実行される。ブロックに時間経過による変化を起こす為によく使われる。

public void randomDisplayTick(World world, int i, int j, int k, Random random)
updateTick()よりも高頻度に呼び出す。

public int tickRate()
updateTick()を呼び出しにくさ。デフォルトは10。

protected int damageDropped(int i)
ダメージでブロックの種類を別けている場合、ドロップするブロックの種類に影響するようです。

public MovingObjectPosition collisionRayTrace(World world, int i, int j, int k, Vec3D vec3d, Vec3D vec3d1)
ブロックを選択する範囲だと思います。

public void onBlockDestroyedByExplosion(World world, int i, int j, int k)
TNTを叩く時に呼ばれるようです。

public void onEntityCollidedWithBlock(World world, int i, int j, int k, Entity entity)
生物が触れている間だけ呼び出すようです。

public String func_25016_i()
存在していないでしょう。

static Class _mthclass$(String s)
クラスの呼び出し関連だと思います。

合っているか保障は出来ません。どのタイミングで実行するかのテストも行っていません。
[PR]軽量化MODを公開しています
アバター
Aurora
ID:754258b5
金掘り
 
記事: 457
登録日時: 2011年6月27日(月) 23:46
お住まい: Aurora City

  • (PostNo.540)

Re: [技術共有]Blockの各メソッドについて。

投稿記事by lain14 » 2011年7月10日(日) 00:45

ソースは1.7.3
よく使うところと誤解が多そうなところを解説

disableNeighborNotifyOnMetadataChangeについて
このメソッドを呼び出しておくとworld.setBlockMetadataWithNotifyが実行された際にブロックが再描画されるようになる
メタデータごとにテクスチャを切り替える場合は呼び出しておく必要がある
呼び出しは1回だけでいい
名前と動作が一致していないけど気にしない

updateTickについて
setTickOnLoadでtrueを指定している場合、tick毎におよそ0.2%の確率で発生する
プレイヤーのいるチャンクを中心とした19*19チャンクが対象
(各チャンクから80ブロックが選ばれtickOnLoadがtrueなら実行される)
目安としてはだいたい20秒に1回、ただし1秒未満から1分以上まで間隔は安定しない

World.scheduleBlockUpdateを実行すると指定されたtick経過後発生する
tickRate()はオーバーライドしただけでは意味が無い
World.scheduleBlockUpdateの引数として自分で使う必要がある

randomDisplayTickについて
プレイヤーを中心とした31*31*31ブロックから1000ブロックをランダムに選択し実行される
プレイヤーに近いほど発生頻度が高い
同一tick内で複数回呼び出されることがある

ブロック除去イベントについて
発生順序は onBlockRemoval -> onBlockDestroyedByPlayer -> harvestBlock
onBlockDestroyedByPlayerとharvestBlockはプレイヤーがブロックを壊した場合のみ発生
harvestBlockの発生条件はBlockのMaterialと破壊に使用したItemに依存
(素手で岩を壊したときのような状況だと発生しない)

ブロック設置イベントについて
発生順序は onBlockAdded -> onBlockPlaced -> onBlockPlacedBy
onBlockPlacedとonBlockPlacedByはプレイヤーが置いた場合のみ発生
onBlockPlacedとonBlockPlacedByの違いは引数のみ

getMobilityFlagについて
ピストンで押したときの動作
0なら動く
1ならアイテム化
2なら動かない


onBlockDestroyedByExplosionは爆発でブロックが壊された時発生する
アバター
lain14
ID:8725f8a9
木を殴ってる
 
記事: 26
登録日時: 2011年7月09日(土) 20:49

  • (PostNo.561)

Re: [技術共有]Blockの各メソッドについて。

投稿記事by Nuclear » 2011年7月10日(日) 12:39

情報提供ありがとうございます。

現在編集中なので少しお待ちを…
アバター
Nuclear
ID:b4a73d63
1スタック
 
記事: 64
登録日時: 2011年6月21日(火) 19:08
お住まい: 幻想郷 地霊殿 105皇室

  • (PostNo.571)

Re: [技術共有]Blockの各メソッドについて。

投稿記事by ToE » 2011年7月10日(日) 15:37

これはありがたい。参考にします。
あとこれのMob版もあると嬉しいですね(チラッチラッ
ToE
ID:408a08bf
 

  • (PostNo.7764)

Re: [技術共有]Blockの各メソッドについて。[MCP44]

投稿記事by Nuclear » 2011年9月29日(木) 18:44

MCP44に対応しました。
無いメソッドが幾つかあります。
アバター
Nuclear
ID:bd30e743
1スタック
 
記事: 64
登録日時: 2011年6月21日(火) 19:08
お住まい: 幻想郷 地霊殿 105皇室

  • (PostNo.7769)

Re: [技術共有]Blockの各メソッドについて。[MCP44]

投稿記事by uniunichan » 2011年9月29日(木) 19:48

Nuclear さんが書きました:MCP44に対応しました。
無いメソッドが幾つかあります。


おお、これはすばらしい・・・!
参考にさせていただきます。
うにうにちゃんです。
アバター
uniunichan
ID:255a64bb
鉄鉱掘り
 
記事: 343
登録日時: 2011年6月21日(火) 18:40
お住まい: グンマー

  • (PostNo.30688)

Re: [技術共有]Blockの各メソッドについて。[MCP44]

投稿記事by 名無し » 2012年3月22日(木) 15:32

setTickOnLoadってMinecraftからなくなってますよ。
名無し
ID:ee31b1f9
 

  • (PostNo.50671)

Re: [技術共有]Blockの各メソッドについて。[MCP44]

投稿記事by kkknoketarou » 2012年8月09日(木) 20:19

これはっ!!!

参考にさせていただきますねw
久しぶりにマイクラ起動
色々追加されていてビビったw

特に驚いたのは、MODの入れ方レッドストーンブロックの追加だったw
ホッパーはどうやってつかうのかがわからなかったなぁ。
アバター
kkknoketarou
ID:a15984b3
水から上がったとこ
 
記事: 10
登録日時: 2012年5月25日(金) 17:19

  • (PostNo.300950)

Re: [技術共有]Blockの各メソッドについて。[MCP44]

投稿記事by anatawa12 » 2017年4月22日(土) 15:56

1.7.10の情報なのですこしちがうかもしれませんが、IBlockaccessは、worldみたいに座標からBlockのインスタンスを取得できるようなものだったはずです。
korisan112主催の実況鯖の鯖主になる予定
東方好き(にわかにはいる様な)
東方スキンで活動中
anatawa12
ID:f6a371b8
木を殴ってる
 
記事: 25
登録日時: 2016年8月06日(土) 12:40


Return to 開発関連

x