Hello, this is my first post and I hope you are able to help me.
I created a custom block model using the MrCrayfish Model Creator and now, I want the front of the block facing the player upon being placed, just like Pistons or Dispensers.
[spoiler=My Block]{
"__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)",
"textures": {
"particle": "blocks/stone",
"0": "blocks/iron_block",
"1": "blocks/stone",
"2": "blocks/planks_oak",
"3": "blocks/stone"
},
"elements": [
{
"name": "BaseLayer",
"from": [ 0.0, 0.0, 0.0 ],
"to": [ 16.0, 1.0, 16.0 ],
"faces": {
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] },
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }
}
},
{
"name": "Diagonal",
"from": [ 2.0, 1.0, -2.0 ],
"to": [ 14.0, 2.0, 9.0 ],
"rotation": { "origin": [ 9.0, 1.0, 8.0 ], "axis": "x", "angle": 45.0 },
"faces": {
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 12.0, 1.0 ] },
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 9.0, 1.0 ] },
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 12.0, 1.0 ] },
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 9.0, 1.0 ] },
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] },
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }
}
},
{
"name": "Cube",
"from": [ 0.0, 1.0, 0.0 ],
"to": [ 16.0, 8.0, 1.0 ],
"faces": {
"north": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 16.0 ] },
"east": { "texture": "#1", "uv": [ 0.0, 0.0, 1.0, 7.0 ] },
"south": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 7.0 ] },
"west": { "texture": "#1", "uv": [ 0.0, 0.0, 0.0, 7.0 ] },
"up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 1.0 ] }
}
},
{
"name": "Cube",
"from": [ 1.0, 1.0, 1.0 ],
"to": [ 2.0, 8.0, 16.0 ],
"faces": {
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 7.0 ] },
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 7.0 ] },
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 16.0 ] },
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 15.0 ] },
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 15.0 ] }
}
},
{
"name": "Cube",
"from": [ 14.0, 1.0, 1.0 ],
"to": [ 15.0, 8.0, 16.0 ],
"faces": {
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 7.0 ] },
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 16.0 ] },
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 7.0 ] },
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 15.0 ] },
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 15.0 ] }
}
},
{
"name": "Cube",
"from": [ 2.0, 7.0, 15.0 ],
"to": [ 14.0, 8.0, 16.0 ],
"faces": {
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 12.0, 1.0 ] },
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 12.0, 1.0 ] },
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 12.0, 1.0 ] },
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 12.0, 1.0 ] }
}
},
{
"name": "Cube",
"from": [ 0.0, 8.0, 0.0 ],
"to": [ 16.0, 13.0, 1.0 ],
"faces": {
"north": { "texture": "#3", "uv": [ 0.0, 0.0, 16.0, 5.0 ] },
"east": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 5.0 ] },
"south": { "texture": "#3", "uv": [ 0.0, 0.0, 15.0, 5.0 ] },
"west": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 5.0 ] },
"up": { "texture": "#3", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"down": { "texture": "#3", "uv": [ 0.0, 0.0, 16.0, 1.0 ] }
}
},
{
"name": "Cube",
"from": [ 0.0, 8.0, 1.0 ],
"to": [ 1.0, 13.0, 16.0 ],
"faces": {
"north": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 5.0 ] },
"east": { "texture": "#3", "uv": [ 0.0, 0.0, 15.0, 5.0 ] },
"south": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 5.0 ] },
"west": { "texture": "#3", "uv": [ 0.0, 0.0, 15.0, 5.0 ] },
"up": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 15.0 ] },
"down": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 15.0 ] }
}
},
{
"name": "Cube",
"from": [ 15.0, 8.0, 1.0 ],
"to": [ 16.0, 13.0, 16.0 ],
"faces": {
"north": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 5.0 ] },
"east": { "texture": "#3", "uv": [ 0.0, 0.0, 15.0, 5.0 ] },
"south": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 5.0 ] },
"west": { "texture": "#3", "uv": [ 0.0, 0.0, 15.0, 5.0 ] },
"up": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 15.0 ] },
"down": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 15.0 ] }
}
},
{
"name": "Cube",
"from": [ 1.0, 8.0, 15.0 ],
"to": [ 15.0, 13.0, 16.0 ],
"faces": {
"north": { "texture": "#3", "uv": [ 0.0, 0.0, 14.0, 5.0 ] },
"east": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 5.0 ] },
"south": { "texture": "#3", "uv": [ 0.0, 0.0, 14.0, 5.0 ] },
"west": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 5.0 ] },
"up": { "texture": "#3", "uv": [ 0.0, 0.0, 14.0, 1.0 ] },
"down": { "texture": "#3", "uv": [ 0.0, 0.0, 14.0, 1.0 ] }
}
},
{
"name": "Cube",
"from": [ 0.0, 13.0, 0.0 ],
"to": [ 16.0, 14.0, 16.0 ],
"faces": {
"north": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"east": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"south": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"west": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 1.0 ] },
"up": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] },
"down": { "texture": "#0", "uv": [ 0.0, 0.0, 16.0, 16.0 ] }
}
},
{
"name": "Cube",
"from": [ 4.0, 14.0, 5.0 ],
"to": [ 5.0, 15.0, 11.0 ],
"faces": {
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] },
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] },
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 6.0 ] },
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 6.0 ] }
}
},
{
"name": "Cube",
"from": [ 5.0, 14.0, 5.0 ],
"to": [ 11.0, 15.0, 6.0 ],
"faces": {
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] },
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] },
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] },
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] }
}
},
{
"name": "Cube",
"from": [ 5.0, 14.0, 10.0 ],
"to": [ 11.0, 15.0, 11.0 ],
"faces": {
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] },
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] },
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] },
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] }
}
},
{
"name": "Cube",
"from": [ 11.0, 14.0, 5.0 ],
"to": [ 12.0, 15.0, 11.0 ],
"faces": {
"north": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"east": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] },
"south": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 1.0 ] },
"west": { "texture": "#2", "uv": [ 0.0, 0.0, 6.0, 1.0 ] },
"up": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 6.0 ] },
"down": { "texture": "#2", "uv": [ 0.0, 0.0, 1.0, 6.0 ] }
}
}
]
}
The block is currently facing in south direction, this is what I did:
[spoiler=blockstates]{
"variants": {
"facing=north": { "model": "loa:crate_opener", "y": 180 },
"facing=south": { "model": "loa:crate_opener", },
"facing=west": { "model": "loa:crate_opener", "y": 270 },
"facing=east": { "model": "loa:crate_opener", "y": 90 }
}
}
If the block was a square, I would have to change the models.block json file and go on by changing something in the block class.
[spoiler=Block Class]package mennomax.loa.blocks;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyDirection;
import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumWorldBlockLayer;
import net.minecraft.world.World;
public class CrateOpener extends Block {
public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL);
public CrateOpener(Material materialIn) {
super(materialIn);
this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.SOUTH));
this.setHardness(20);
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public EnumWorldBlockLayer getBlockLayer() {
return EnumWorldBlockLayer.CUTOUT;
}
@Override
public boolean isFullCube() {
return false;
}
@Override
public IBlockState getStateForEntityRender(IBlockState state) {
return this.getDefaultState().withProperty(FACING, EnumFacing.NORTH);
}
@Override
public IBlockState getStateFromMeta(int meta) {
EnumFacing enumFacing = EnumFacing.getFront(meta);
if(enumFacing.getAxis() == EnumFacing.Axis.Y) {
enumFacing = EnumFacing.SOUTH;
}
return this.getDefaultState().withProperty(FACING, enumFacing);
}
@Override
public int getMetaFromState(IBlockState state) {
return ((EnumFacing) state.getValue(FACING)).getIndex();
}
@Override
protected BlockState createBlockState() {
return new BlockState(this, new IProperty[] {FACING});
}
@Override
public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ,
int meta, EntityLivingBase placer) {
return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite());
}
}
[spoiler=Stone Block]{
"parent": "block/cube",
"textures": {
"all": "blocks/stone"
}
}
[spoiler=Stone Block with different sides]{
"parent": "block/orientable",
"textures": {
"top": "MODNAME:blocks/stone_top",
"front": "blocks/stone",
"side": "blocks/stone",
}
}
Where do I have to set the ""parent": block/orientable" for my block? Do I have to write it above "textures":? Since when I did this, the block was shown with the no-texture texture.
I structured my files like MrCrayfish did in his tutorials. There hasn't been a new tutorial video for 3 months.