118 lines
3.7 KiB
Scala
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
|
|
}
|