- 122
- 4
- 6
Здорово. Пишу блок у которого должно быть несколько состояний в зависимости от которых будет меняться текстура. Но эта мета это что-то с чем-то, с одной стороны она работает когда одна на блоке, если их несколько, то перестает работать, и выдает ошибку, порой и краш. Вообщем у блока должно быть 27 состояний, но так как майн такое количество не принимает я разделил на две меты.
короче вот этот код, от части рабочий вариант, но как только я пытаюсь прикрутить в blockstates текстуру зависящую от меты
то появляется ломаная текстура, а если вместо текстуры прописываю зависимость от модели то она не появляется, а появляется стандартная. Перепробовал огромное множество разнообразных вариантов, сил уже нет, хз что делать, подскажите или дайте совет как сделать рабочий вариант. Буду очень признателен...
Java:
public class Runes extends BasisBlock {
public static final PropertyInteger VARIANT_1 = PropertyInteger.create("variant_1", 0, 2);
public static final PropertyInteger VARIANT_2 = PropertyInteger.create("variant_2", 0, 8);
private static final AxisAlignedBB BOX = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0.0025D, 1.0D);
public Runes() {
super("runes", Material.CIRCUITS, 340.0f, 0.0f, "pickaxe", 0, SoundType.STONE);
this.setCreativeTab(null);
this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT_1, 0).withProperty(VARIANT_2, 0));
}
@Override
public IBlockState getStateFromMeta(int meta) {
// int variant1 = meta & 0x3;
// int variant2 = (meta >> 2) & 0x7;
return this.getDefaultState();
}
@Override
public int getMetaFromState(IBlockState state) {
int variant1 = state.getValue(VARIANT_1);
int variant2 = state.getValue(VARIANT_2);
return variant1 | variant2;
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, VARIANT_1, VARIANT_2);
}
@Override
public boolean isReplaceable(IBlockAccess world, BlockPos pos) {
return world.getBlockState(pos).getBlock() != this /*|| world.getBlockState(pos).getValue(VARIANT) != 0*/;
}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) {
return BOX;
}
@Override
public AxisAlignedBB getCollisionBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) {
return NULL_AABB;
}
@Override
public boolean canPlaceBlockAt(World world, BlockPos pos) {
return super.canPlaceBlockAt(world, pos) && world.getBlockState(pos.down()).getBlockFaceShape(world, pos, EnumFacing.UP) == BlockFaceShape.SOLID;
}
@Override
public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block, BlockPos fromPos) {
world.scheduleUpdate(pos, this, 0);
}
@SideOnly(Side.CLIENT)
@Override
public BlockRenderLayer getBlockLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult result, World world, BlockPos pos, EntityPlayer player) {
return new ItemStack(ItemsInit.RITUAL_CHALK);
}
@Override
public Item getItemDropped(IBlockState state, Random rand, int fortune) {
return ItemsInit.RITUAL_CHALK;
}
@Override
protected ItemStack getSilkTouchDrop(IBlockState state) {
return new ItemStack(ItemsInit.RITUAL_CHALK);
}
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@Override
public boolean isFullCube(IBlockState state) {
return false;
}
@Override
public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side) {
return world.isSideSolid(pos.down(), EnumFacing.UP);
}
}
Java:
{
"forge_marker": 1,
"defaults": {
"model": "lots_of_recipes:chalk",
"textures": {
"down": "lots_of_recipes:blocks/ritual_accessories/runes/rune_null",
"up": "lots_of_recipes:blocks/ritual_accessories/runes/rune_empty",
"particle": "lots_of_recipes:blocks/ritual_accessories/runes/rune_particle"
}
},
"variants": {
"normal": [{}],
"inventory": [{
"transform": "forge:default-block"
}],
"variant_1=0,variant_2=0": {
"textures": { "up": "lots_of_recipes:blocks/ritual_accessories/runes/b" }
}
}
}