Метадата! Опять! (1.8.8)

4,167
68
693
Взялся таки за перенос мода на 1.8.
И сразу первая проблема: как всегда метадата ))) Нужен блок, выглядящий по разному, в зависимости от метадаты... Как пример использовал блок гигантского гриба...

Всё бы ничего, но текстур он не видит... И вот не могу я понять, где ошибка... То ли в самом классе, то ли в Json-ах.

Класс
Код:
public class Ore extends Block {

    public Ore(String name) {
        super(Material.rock);
        this.setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, Ore.EnumType.CLEAR));
        this.setUnlocalizedName(name);
    }
    
    public static final PropertyEnum VARIANT = PropertyEnum.create("variant", Ore.EnumType.class);
    
    public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer)
    {
        return this.getDefaultState();
    }
    
    public IBlockState getStateFromMeta(int meta)
    {
        return this.getDefaultState().withProperty(VARIANT, Ore.EnumType.byMetadata(meta));
    }
    
    public int getMetaFromState(IBlockState state)
    {
        return ((Ore.EnumType)state.getValue(VARIANT)).getMetadata();
    }
    
    @Override
    protected BlockState createBlockState()
    {
        return new BlockState(this, new IProperty[] {VARIANT});
    }
    
    public enum EnumType implements IStringSerializable
    {
        CLEAR(0, "clear"),
        SIDE_W(1, "side_w"),
        SIDE_N(2, "side_n"),
        SIDE_WN(3, "side_wn"),
        SIDE_E(4, "side_e"),
        SIDE_WE(5, "side_we"),
        SIDE_NE(6, "side_ne"),
        SIDE_WNE(7, "side_wne"),
        SIDE_S(8, "side_s"),
        SIDE_SW(9, "side_sw"),
        SIDE_NS(10, "side_ns"),
        SIDE_SWN(11, "side_swn"),        
        SIDE_ES(12, "side_es"),
        SIDE_ESW(13, "side_esw"),
        SIDE_NES(14, "side_nes"),
        SIDE_WNES(15, "side_wnes");

        private static final Ore.EnumType[] META_LOOKUP = new Ore.EnumType[16];
        private final int meta;
        private final String name;

        private EnumType(int meta, String name)
        {
            this.meta = meta;
            this.name = name;
        }
        
        public int getMetadata()
        {
            return this.meta;
        }

        @Override
        public String getName()
        {
            return name;
        }
        
        public static Ore.EnumType byMetadata(int meta)
        {
            if (meta < 0 || meta >= META_LOOKUP.length)
            {
                meta = 0;
            }

            Ore.EnumType ore$enumtype = META_LOOKUP[meta];
            return ore$enumtype == null ? META_LOOKUP[0] : ore$enumtype;
        }
        
        static
        {
            for (Ore.EnumType ore$enumtype : values())
            {
                META_LOOKUP[ore$enumtype.getMetadata()] = ore$enumtype;
            }
        }
    }
}


Блокстейт
Код:
{
    "variants": {
        "variant=clear": { "model": "mod:Ore" }
        "variant=side_w": { "model": "mod:Ore_w" }
        "variant=side_n": { "model": "mod:Ore_n" }
        "variant=side_wn": { "model": "mod:Ore_wn" }
        "variant=side_e": { "model": "mod:Ore_e" }
        "variant=side_we": { "model": "mod:Ore_we" }
        "variant=side_ne": { "model": "mod:Ore_ne" }
        "variant=side_wne": { "model": "mod:Ore_wne" }
        "variant=side_s": { "model": "mod:Ore_s" }
        "variant=side_sw": { "model": "mod:Ore_sw" }
        "variant=side_ns": { "model": "mod:Ore_ns" }
        "variant=side_swn": { "model": "mod:Ore_swn" }
        "variant=side_es": { "model": "mod:Ore_es" }
        "variant=side_esw": { "model": "mod:Ore_esw" }
        "variant=side_nes": { "model": "mod:Ore_nes" }
        "variant=side_wnes": { "model": "mod:Ore_wnes" }
    }
}

Модели для примера:
Ore
Код:
{
    "parent": "block/cube_all",
    "textures": {
        "all": "mod:blocks/Ore"
    }
}

Ore_wnes
Код:
{
    "parent": "block/cube",
    "textures": {
        "particle": "mod:blocks/Ore",
        "down": "mod:blocks/Ore",
        "up": "blocks/stone",
        "north": "mod:blocks/Ore_Side",
        "east": "mod:blocks/Ore_Side",
        "south": "mod:blocks/Ore_Side",
        "west": "mod:blocks/Ore_Side"
    }
}

В инвентаре всё видит нормально, а как ставлю - пропавшая текстура...
Пока не очень разобрался с этой системой... Нужна помощь.
Спасибо )
 
Для начала, добро пожаловать в клуб "1.8+" – клуб для молодых, богатых и белых. Для этих версий тут что-то делают единицы. Дам совет : если задаешь вопрос по блокам и текстурам для 1.8.* то полностью выкладывай исходник в архиве, ибо основные проблемы будут именно в json-файлах.

Специально для тебя сделал пример. Там 16 вариантов блока (взял твои названия), причем текстуры есть всего у 5 вариантов, остальные будут оставаться фиолетово-черными (потому что мне лень). При установке блока его метадата выбирается через Random.nextInt(16) - то бишь случайно. Попробуй поставить 10-20 блоков и посмотри результат.

P.S. : делал для версии 1.8.0. Forge для 1.8.8 еще в стадии беты.
P.P.S. : И загляни в эту тему. Там тоже используется метадата.

Скачать : blockmetamod_1.0_1.8.zip
 
О! Спасибо огромное )))
Протестил твой вариант... Работает.
Попробовал в твоём же варианте изменить модельку oremeta_w на это
Код:
{
    "parent": "block/cube_column",
    "textures": {
        "end": "blockmeta:blocks/oremeta"
        "side": "blockmeta:blocks/oremeta_w"
    }
}

Итог: все до этого рабочие варианты пашут нормально. Конкретно этот не фурычит (

Загвоздка в том, что в моём случае не работает ни один вариант.
Пытаюсь найти отличия ))) Пока безуспешно.
 
Не знаю, что у тебя не так - вот тебе продолжение. Там я сделал текстуры к еще 4 вариантам метадаты, причем как ты и хотел:
Код:
{
    "parent": "block/cube_column",
    "textures": {
        "end": "blockmeta:blocks/oremeta"
        "side": "blockmeta:blocks/oremeta_w"
    }
}
image.png

Вряд ли дело в Forge. Вангую твой косяк с расположением json-конфигов.
 
Может кто-нибудь протестить main.zip?
[merge_posts_bbcode]Добавлено: 28.11.2015 15:10:54[/merge_posts_bbcode]

Да... У меня твой код тоже пашет...

[merge_posts_bbcode]Добавлено: 28.11.2015 15:11:56[/merge_posts_bbcode]

Хотя, как-то странно... При установке блока он как бы перещёлкивает текстуры... На 1 тик он без них, а потом находит.
 
Liahim написал(а):
Может кто-нибудь протестить main.zip?
[merge_posts_bbcode]Добавлено: 28.11.2015 15:10:54[/merge_posts_bbcode]
Да... У меня твой код тоже пашет...
Проверил. Ванга не обманула:
  1. Когда запускаешь клиент - обращай внимание на ошибки. У меня там целая портянка вывалилась из Caused by: com.google.gson.JsonSyntaxException
  2. Тащи свои json-файлы на jsoneditoronline.org и проверяй синтаксис. В частности, ты забываешь расставлять запятые.
Liahim написал(а):
Хотя, как-то странно... При установке блока он как бы перещёлкивает текстуры... На 1 тик он без них, а потом находит.
Это более чем нормально. Помни, что в Minecraft у всех блоков есть начальное состояние, оно задается в конструкторе. А потом когда на него воздействуют - то могут поменять метадату. А в моем случае - я её меняю сразу после того, как блок появляется на своем месте. И у него в этот миг меняется метадата, отсюда и эффект перехода. Чтобы избавиться от этого - надо добавить в конструктор параметр начальной метадаты и размножить блок на несколько дефолтных состояний.
 
Agravaine, они пока еще не перегнули. ИМХО, Mojang следует перевести все модели предметов и мобов на json. Один из очевидных плюсов - уже появившиеся 3D-текстуры. Один из очевидных минусов - у всех, кто переводит свой мод с 1.7.10 на 1.8 как и у меня в свое время будет гореть жопа.
 
TaoGunner написал(а):
Agravaine, они пока еще не перегнули. ИМХО, Mojang следует перевести все модели предметов и мобов на json. Один из очевидных плюсов - уже появившиеся 3D-текстуры. Один из очевидных минусов - у всех, кто переводит свой мод с 1.7.10 на 1.8 как и у меня в свое время будет гореть жопа.
Да ну? Я знаю API которое обновляется на 1.8. Там с помощью него можно обойтись без JSON.
 
nickita45 написал(а):
Вообще, а какие плюсы от json,кроме гемороя?
Возможность изменить модель блока не прибегая к моддингу. Посмотри в Интернет как делают 3D текстурпаки : в них объемные полки для книг, рельсы и прочее.

FanKar написал(а):
Да ну? Я знаю API которое обновляется на 1.8. Там с помощью него можно обойтись без JSON.
Мило. А я знаю, что это - фотография микроскопа:
2L_1.jpg
 
Раз уж тут все флудят, спрошу по делу.
Есть ли разница в конструкторе с extends BlockBush? Имеется ввиду в создании вариантов блока.
Вроде ж как не должно быть...
Попробовал сейчас такую штуку прописать по аналогии с примерами выше и модельку к ней:
Код:
{
    "parent": "block/cross",
    "textures": {
        "cross": "mymod:blocks/BushBlock"
    }
}

Однако выглядит она всё равно как обычный блок и опять без текстур :D
Только теперь и в инвентаре текстур не видно. Вот я криворукий.
[merge_posts_bbcode]Добавлено: 28.11.2015 18:51:19[/merge_posts_bbcode]

Блин, он почему-то пытается найти варианты от предыдущего блока :lol:
 
Назад
Сверху