Блок с текстурами на каждой стороне который устанавливаться в зависимости от направления

Перевод Блок с текстурами на каждой стороне который устанавливаться в зависимости от направления

Версия(и) Minecraft
1.12.х
Источник
https://wiki.mcjty.eu/modding/index.php?title=Render_Block_Different_faces-1.12
В этом примере мы показываем, как вы можете сделать блок, который имеет разные текстуры на каждой стороне. Кроме того, блок будет также ориентироваться в соответствии с тем, как игрок размещает блок.

Обратите внимание, что состояние блока является аналогом метаданных, как это было сделано и использовано в более старых версиях Minecraft. С=Однако система состояния блоков намного чище и удобнее, помните, как в 1.8.9 метаданные были представлены 4-я битами (по крайней мере, для блоков), поэтому вы были ограничены 16-тью различными состояниями. В приведенном ниже примере мы используем свойство, называемое FACING, которое поможет задать направление блока. Основываясь на этом свойстве, мы решим, как повернуть нашу модель в блок-состоянии json.


MultiTexturedBlock.java:
public class MultiTexturedBlock extends Block {

    public static final PropertyDirection FACING = PropertyDirection.create("facing");


    public MultiTexturedBlock() {
        super(Material.ROCK);
        setUnlocalizedName(ModTut.MODID + ".multitexturedblock");
        setRegistryName("multitexturedblock");

        setDefaultState(blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH));
    }

    @SideOnly(Side.CLIENT)
    public void initModel() {
        ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(this), 0, new ModelResourceLocation(getRegistryName(), "inventory"));
    }

    @Override
    public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
        world.setBlockState(pos, state.withProperty(FACING, getFacingFromEntity(pos, placer)), 2);
    }

    public static EnumFacing getFacingFromEntity(BlockPos clickedBlock, EntityLivingBase entity) {
        return EnumFacing.getFacingFromVector(
             (float) (entity.posX - clickedBlock.getX()),
             (float) (entity.posY - clickedBlock.getY()),
             (float) (entity.posZ - clickedBlock.getZ()));
    }

    @Override
    public IBlockState getStateFromMeta(int meta) {
        return getDefaultState().withProperty(FACING, EnumFacing.getFront(meta & 7));
    }

    @Override
    public int getMetaFromState(IBlockState state) {
        return state.getValue(FACING).getIndex();
    }

    @Override
    protected BlockStateContainer createBlockState() {
        return new BlockStateContainer(this, FACING);
    }
}
Вот состояние блока в .json файле (blockstates/multitexturedblock.json):
multitexturedblock.json:
{
  "forge_marker": 1,
  "defaults": {
    "model": "modtut:multitexturedblock"
  },
  "variants": {
    "normal": [{}],
    "inventory": [{}],
    "facing": {
      "north": {},
      "south": {"y": 180},
      "west": {"y": 270},
      "east": {"y": 90},
      "up": {"x": -90},
      "down": {"x": 90}
    }
  }
}
А вот актуальная модель (models/block/multitexturedblock.json):
multitexturedblock.json:
{
  "parent": "block/cube",
  "textures": {
    "particle": "modtut:blocks/faceFront",
    "down": "modtut:blocks/faceDown",
    "up": "modtut:blocks/faceUp",
    "east": "modtut:blocks/faceLeft",
    "west": "modtut:blocks/faceRight",
    "north": "modtut:blocks/faceFront",
    "south": "modtut:blocks/faceBack"
  }
}
Автор
Garik
Просмотры
158
Первый выпуск
Обновление
Оценка
5.00 звёзд 1 оценок

Другие ресурсы пользователя Garik

Последние рецензии

Спасибо!
Сверху