不透過ブロック

準拠: Minecraft 1.6.2

概要

ブロックIDごとに設定された(Block#isOpaqueCube())属性であり、空気や松明などは不透過ではない、土や木材などは不透過である。引数がないのでインスタンスで固有、すなわちBlockIDにより一意である。呼び出し元はChunkCacheやWorldなどのMinecraftコアクラスに点在しているため、呼び出し元を書き換えて一つのBlockIDで複数の透過性の状態を持たせることもできない。BlockはblockIdから不透過ブロックであるか否かを引ける辞書を持っている(Block#opaqueCubeLookup)。

この属性のブロックは一般的に以下のような性質をもつ。

  • 不透過ブロックはほとんどの場合1x1x1の当たり判定を持つ(例外: 不明 TODO)。
  • 透過ブロックは葉ブロック・巨大キノコによって置換される(Block#canBeReplacedByLeaves)。
  • 不透過ブロックはチェスト・ディスペンサー・かまどを設置したときの向きに影響を与える(BlockChest#unifyAdjacentChests、BlockDispenser#setDispenserDefaultDirection、BlockFurnace#setDefaultDirection)。しかし、通常の設置(プレイヤーやエンティティによる設置、ComputerCraftのタートル、BuildCraftのフィラーなど)ではこの影響が現れず、主に廃坑やスポーン部屋のチェストに適応される。
  • 不透過ブロックの上には無条件でキノコが生えることができる(BlockMushroom#canThisPlantGrowOnThisBlockID)。透過ブロックである場合、上面が固体か否かに依存する(Block#canSustainPlant)。
  • 不透過ブロックは鉄柵と板ガラスが無条件で繋がることができる(BlockPane#canThisPaneConnectToThisBlockID)。透過ブロックである場合、つながる面が固体であるかどうかに依存する。
  • 不透過ブロックは炎上を伴う爆発に際し、真上に火ブロックが置かれることがある(Explosion#doExplosionB)。
  • 不透過ブロックは廃坑で真上に線路がスポーンすることができる(ComponentMineshaftCorridor#addComponentParts)。
  • 透過ブロックはそれが葉ブロックか雪タイルの8倍体でない場合、その上に無条件で雪タイルを置くことができない(BlockSnow#canPlaceBlockAt)。不透過ブロックである場合、そのブロックの素材が流体である(Material#blocksMovement)場合に設置できない
  • 透過ブロックは壁の中にあってもその6面が無条件でレンダリングされる(Block#shouldSideBeRendered)。不透過ブロックである場合、そのブロックの占有領域が1x1x1よりも小さい場合に、小さくなっている面がレンダリングされる。
  • そのほか描画の可否に関する判定に影響する(RenderBlocks#renderStandardBlockWithAmbientOcclusion、BlockFluidBase#shouldSideBeRendered、Block#shouldSideBeRendered)。
  • 透過ブロックはその下の溶岩源・溶岩流ブロックが弾ける泡のパーティクルと効果音を発生させることができる(BlockFluiud#randomDisplayTick)。
  • 透過ブロックが隣接する面には発光する赤石鉱石のパーティクルが表示され
  • 透過ブロックはIC2Cropの通気値を阻害しない

未検証

  • 透過ブロックは必ずしも1x1x1の当たり判定を持たない
  • 不透過ブロックは窒息ダメージを受ける
  • 透過ブロックは赤石ワイヤーなどの接続を切断しない
  • 不透過ブロックが隣接する不透過ブロックの面はレンダリングされない

そのほか、不透過ブロックに関連しない情報

  • MOBのスポーン判定は専らブロックの上面が固体かどうか(Block#isBlockSolidOnSide)によって行われ、不透過ブロックであるか否かは半ブロックにのみ関与する。
  • コウモリがブロックに停まる判定は、ブロックの下面が固体かどうかによって行われる。土の下面にコウモリが停まっているときに土を耕すとコウモリを落とすことができる。
  • 流体ブロックがその真下のブロックに水滴・溶岩滴のパーティクルを発生させる条件は、流体ブロックの真下のブロックの上面が固体であり、その真下のブロックが流体(Material#blocksMovement)でないことである。よって、上付き半ブロック・階段ブロックの上に流体を流すと、空中からパーティクルが発生するように見える。

見分ける際には埋まってみたり、赤石を切断させてみたり、上に水流を流してみたりするとよい。
赤キノコのXZ座標±2、Y座標+1~2の位置にブロックを置き、巨大キノコを発生させることにより見分けることができる。また、雪タイルは上面が固体であっても透過ブロックには設置出来ない。

参照方法

Blockがわかっている場合、Block#isOpaqueCubeから参照可能。

blockIdがわかっている場合、Block#opaqueCubeLookupから参照可能。

Worldオブジェクトなどを含むIBlockAccessと座標がわかっている場合、IBlockAccess#isBlockOpaqueCubeからアクセス可能。

チャンクとチャンク内座標がわかっている場合、ChunkCache#isBlockOpaqueCubeからアクセス可能。

紛らわしい透過ブロックの例

いくつかの例を挙げる。

  • ガラス・ビーコン・ピストン・葉ブロック・氷・階段・グロウストーン

半分しかない半ブロックが透過ブロックなのに対し、重ねた半ブロックは不透過ブロックである。

tips

  • しばしば透過ブロックであるにも関わらず光を遮断するブロックが存在する(階段など)。
  • 原則として、同じブロックIDでメタIDによりこれを振り分けることはできない。

 外部リンク

透過 - Minecraft Wiki/http://minecraft-ja.gamepedia.com/Opacity

最終更新:2014年01月30日 18:50