- 5,018
- 47
- 783
Добрый вечер всем! Начал немножно что то писать на 1.9. Сделал свой первый блок. Но я просто не люблю, я сразу по харду со старого мода начал писать. Блок с метадатой, все окей, в мир ставится нормально.
Для блока модель есть, вроде все норм. Но вот для его подтипов модель не работает.
И еще кстати, все мои блоки имеют одинаковую метадату.
А да и еще. Как связать ItemBlock блока с ним самим в регистрации? В 1.7.10 было так
вот код
Для блока модель есть, вроде все норм. Но вот для его подтипов модель не работает.
И еще кстати, все мои блоки имеют одинаковую метадату.
А да и еще. Как связать ItemBlock блока с ним самим в регистрации? В 1.7.10 было так
Код:
GameRegistry.registerBlock(BlockMetadata, BlockMetadataItem.class,"BlockMetadata");
Код:
public class MushroomBlock extends BlockBush implements IGrowable{
public static float f = 0.2F;
protected static AxisAlignedBB MushroomBlock = new AxisAlignedBB(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 2.0F, 0.5F + f);
public static final String[] blocksMeta = new String[]{"underBirchMush","underOakMush","underOsinMush"};
public MushroomBlock(final Material materialIn, final String name){
//Это материал, его мы будет прописывать при регистрации
super(materialIn);
setRegistryName(name);
setUnlocalizedName(name);
this.setHardness(2F);
this.setResistance(1F);
this.setHarvestLevel("pickaxe", 1);
this.setStepSound(SoundType.SAND);
setLightLevel(0.0F);
setCreativeTab(CreativeTabs.tabBlock);
}
public void getSubBlocks(Item item, CreativeTabs tabs, List<ItemStack> subItems)
{
/**
* 1 - наш предмет
* 2 - количество
* 3 - метадата, начинается с 0
*/
for (int i = 0; i < this.blocksMeta.length; i++)
{
subItems.add(new ItemStack(item, 1, i));
}
}
/*
* Данный метод отвечает за BoundigBox, т.е. это некая "ограничительная рамка", эта рамка позволяет нам
* взаимодействовать каким угодно образом с блоком.
*/
@Override
public AxisAlignedBB getBoundingBox(final IBlockState state, final IBlockAccess source, final BlockPos pos)
{
return MushroomBlock;
}
/*
* Прозрачность нашего блока, если true то блок будет пропускать сквозь себя свет.
*/
@Override
public boolean isOpaqueCube(final IBlockState state)
{
return false;
}
/*
* Тип рендера блока, так как мы с вами обладатели 1.8+ версии mc, мы можем использовать json модели
* для нашего блока, чтобы всё было хорошо укажим рендер блока как модель.
*/
@Override
public EnumBlockRenderType getRenderType(final IBlockState state)
{
return EnumBlockRenderType.MODEL;
}
/*
* Полный блок, данный метод отвечает за то, где будет заканчиваться блок. Если стоит true то блок будет
* заполнен полностью и вы не сможете залезть на эту модель. Смотрите скриншоты сравнения ниже!
*/
@Override
public boolean isFullCube(final IBlockState state)
{
return true;
}
/*
* Чтобы наш блок-модель не давал эффект XRAY, я советую создавать данный метод всегда. В если же у вас обычный
* блок(не модель), то данный метод можно не прописывать.
* */
@Override
public boolean canPlaceBlockAt(final World worldIn, final BlockPos pos)
{
return super.canPlaceBlockAt(worldIn, pos) && worldIn.getBlockState(pos.down()).isFullyOpaque();
}
@Override
public boolean canGrow(World worldIn, BlockPos pos, IBlockState state,
boolean isClient) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean canUseBonemeal(World worldIn, Random rand, BlockPos pos,
IBlockState state) {
// TODO Auto-generated method stub
return false;
}
@Override
public void grow(World worldIn, Random rand, BlockPos pos,
IBlockState state) {
// TODO Auto-generated method stub
}
@Override
public void harvestBlock(World world, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity te, ItemStack stack) {
if (player.inventory.getCurrentItem() != null && player.inventory.getCurrentItem().getItem() == Items.stick)
super.harvestBlock(world, player, pos, state, te, stack);
}
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
ArrayList<ItemStack> ret = new ArrayList<ItemStack>();
ret.add(new ItemStack(BlocksRegistry.mushroom, 1, metadata));
if (world.rand.nextInt(10) == 0){
// ret.add(new ItemStack(MyItems.mushroomSpores, 1, 9));
}
return ret;
}
}