electrodynamics/src/main/scala/edx/core/resource/content/ItemRefinedDust.scala
2015-01-26 19:40:54 +08:00

118 lines
3.7 KiB
Scala

package edx.core.resource.content
import edx.basic.BasicContent
import edx.core.Reference
import net.minecraft.creativetab.CreativeTabs
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.init.Blocks
import net.minecraft.item.{Item, ItemStack}
import net.minecraft.world.World
import resonantengine.lib.factory.resources.item.TItemResource
import resonantengine.lib.transform.vector.Vector3
/**
* @author Calclavia
*/
class ItemRefinedDust extends Item with TItemResource
{
setTextureName(Reference.prefix + "oreRefinedDust")
setCreativeTab(CreativeTabs.tabMaterials)
override def onItemUse(itemStack: ItemStack, player: EntityPlayer, world: World, x: Int, y: Int, z: Int, side: Int, hitX: Float, hitY: Float, hitZ: Float): Boolean =
{
val block = world.getBlock(x, y, z)
if (block == getBlock)
{
val i1: Int = world.getBlockMetadata(x, y, z)
val j1: Int = i1 & 7
if (j1 <= 6 && world.checkNoEntityCollision(this.getBlock.getCollisionBoundingBoxFromPool(world, x, y, z)) && world.setBlockMetadataWithNotify(x, y, z, j1 + 1 | i1 & -8, 2))
{
world.playSoundEffect((x.toFloat + 0.5F).toDouble, (y.toFloat + 0.5F).toDouble, (z.toFloat + 0.5F).toDouble, this.getBlock.stepSound.func_150496_b, (this.getBlock.stepSound.getVolume + 1.0F) / 2.0F, this.getBlock.stepSound.getPitch * 0.8F)
itemStack.stackSize -= 1
return true
}
}
var actualSide = side
val placeVec = new Vector3(x, y, z)
if (block == Blocks.snow_layer && (world.getBlockMetadata(x, y, z) & 7) < 1)
{
actualSide = 1
}
else if (block != Blocks.vine && block != Blocks.tallgrass && block != Blocks.deadbush && !block.isReplaceable(world, x, y, z))
{
if (actualSide == 0)
{
placeVec.y -= 1
}
if (actualSide == 1)
{
placeVec.y += 1
}
if (actualSide == 2)
{
placeVec.z -= 1
}
if (actualSide == 3)
{
placeVec.z += 1
}
if (actualSide == 4)
{
placeVec.x -= 1
}
if (actualSide == 5)
{
placeVec.x += 1
}
}
if (itemStack.stackSize == 0)
{
return false
}
else if (!player.canPlayerEdit(placeVec.xi, placeVec.yi, placeVec.zi, actualSide, itemStack))
{
return false
}
else if (y == 255 && getBlock.getMaterial.isSolid)
{
return false
}
else if (world.canPlaceEntityOnSide(this.getBlock, placeVec.xi, placeVec.yi, placeVec.zi, false, actualSide, player, itemStack))
{
val meta = this.getMetadata(itemStack.getItemDamage)
val j1: Int = this.getBlock.onBlockPlaced(world, placeVec.xi, placeVec.yi, placeVec.zi, actualSide, placeVec.xi, placeVec.yi, placeVec.zi, meta)
if (placeBlockAt(itemStack, player, world, placeVec.xi, placeVec.yi, placeVec.zi, actualSide, placeVec.xi, placeVec.yi, placeVec.zi, j1))
{
world.playSoundEffect((x.toFloat + 0.5F).toDouble, (y.toFloat + 0.5F).toDouble, (z.toFloat + 0.5F).toDouble, this.getBlock.stepSound.func_150496_b, (this.getBlock.stepSound.getVolume + 1.0F) / 2.0F, this.getBlock.stepSound.getPitch * 0.8F)
itemStack.stackSize -= 1
}
return true
}
else
{
return false
}
}
def placeBlockAt(stack: ItemStack, player: EntityPlayer, world: World, x: Int, y: Int, z: Int, side: Int, hitX: Float, hitY: Float, hitZ: Float, metadata: Int): Boolean =
{
if (!world.setBlock(x, y, z, getBlock, metadata, 3))
{
return false
}
if (world.getBlock(x, y, z) == getBlock)
{
getBlock.onBlockPlacedBy(world, x, y, z, player, stack)
getBlock.onPostBlockPlaced(world, x, y, z, metadata)
}
return true
}
def getBlock = BasicContent.blockDust
}