Локализация предметов сделанных через метадату

Сообщения
2,920
Лучшие ответы
43
Реакции
545
Версия Minecraft
1.12.2
Доброго времени суток Земляне и Чужие!
Я тут потихоньку работаю над 1.12.2, пытаюсь понять как работает методата, всё вроде как везде разобрался. Только не могу понять как дать сделать что бы у каждого предмета было своё имя для локализации. Я сейчас сделал по аналогии с регистрацией моделей:
Предмет:
public class Pieces extends Item {

    public Pieces(String name) {

        setHasSubtypes(true);
        setRegistryName(name);

        for (PiecesTypes type : PiecesTypes.values()) {
            setUnlocalizedName(type.name() + "_pieces");
        }

    }

    @Override
    public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {

        if (tab == PiecesTab.PIECESTAB) {

            for (PiecesTypes type : PiecesTypes.values()) {

                items.add(new ItemStack(this, 1, type.ordinal()));

            }
        }

    }

}
Перечисляемые типы::
public enum PiecesTypes {

    white, black, orange, magenta, light_blue, yellow, lime, pink, gray, silver, cyan, purple, blue, brown, green, red,
    birch, jungle, oak, spruce, acacia, big_oak;

    private static final PiecesTypes[] META_LOOKUP = new PiecesTypes[values().length];

}
Но он почему-то не хочет давать каждому типу своё имя. А даёт всем предметом имя последнего перечисляемого типа(big_oak).
Почему с моделями это работает (for (PiecesTypes type : PiecesTypes.values()) { ModelLoader.setCustomModelResourceLocation(PIECES, type.ordinal(), new ModelResourceLocation(BCC.MODID + ":" + type.name() + "_pieces", "inventory")); }), а с локализацией нет?
 
Последнее редактирование:

Agravaine :j

Модератор
Сообщения
5,418
Лучшие ответы
263
Реакции
1,143
Потому что нужно переопределять метод getUnlocalizedName и давать имя в зависимости от меты.
 
Сообщения
947
Лучшие ответы
48
Реакции
152
public String getUnlocalizedName(ItemStack stack)

чекаешь через stack.getItemDamage()
 
Сообщения
2,920
Лучшие ответы
43
Реакции
545
Ну как-то так:
Pieces.java:
    @Override
    public String getUnlocalizedName(ItemStack stack){
        if(stack.getItemDamage() == 0)
            return this.getUnlocalizedName() + "_white";
        else if(stack.getItemDamage() == 1)
            return this.getUnlocalizedName() + "_orange";
        else if(stack.getItemDamage() == 2)
            return this.getUnlocalizedName() + "_magenta";
        else if(stack.getItemDamage() == 3)
            return this.getUnlocalizedName() + "_light_blue";
        else if(stack.getItemDamage() == 4)
            return this.getUnlocalizedName() + "_yellow";
        else if(stack.getItemDamage() == 5)
            return this.getUnlocalizedName() + "_lime";
        else if(stack.getItemDamage() == 6)
            return this.getUnlocalizedName() + "_pink";
        else if(stack.getItemDamage() == 7)
            return this.getUnlocalizedName() + "_gray";
        else if(stack.getItemDamage() == 8)
            return this.getUnlocalizedName() + "_silver";
        else if(stack.getItemDamage() == 9)
            return this.getUnlocalizedName() + "_cyan";
        else if(stack.getItemDamage() == 10)
            return this.getUnlocalizedName() + "_purple";
        else if(stack.getItemDamage() == 11)
            return this.getUnlocalizedName() + "_blue";
        else if(stack.getItemDamage() == 12)
            return this.getUnlocalizedName() + "_brown";
        else if(stack.getItemDamage() == 13)
            return this.getUnlocalizedName() + "_green";
        else if(stack.getItemDamage() == 14)
            return this.getUnlocalizedName() + "_red";
        else if(stack.getItemDamage() == 15)
            return this.getUnlocalizedName() + "_black";
        else
            return this.getUnlocalizedName();
    }
Спасибо @BlesseNtumble за данный способ! Он хоть и по моему мнению "кастрюльный", но интересный!
 

Agravaine :j

Модератор
Сообщения
5,418
Лучшие ответы
263
Реакции
1,143
Дак ты пишешь дич. Вынеси имена в массив, а в методе просто возвращай YOUR_ARRAY[stack.getItemDamage()].
 
Сообщения
1,853
Лучшие ответы
48
Реакции
339
switch для лохов:cool:
А вообще да, тут можно банальным индексом по массиву обойтись
Java:
@Override
public String getUnlocalizedName(ItemStack stack){
    return this.getUnlocalizedName() + "_" + PiecesTypes.values()[stack.getItemDamage()].name();
}
 
Сообщения
2,920
Лучшие ответы
43
Реакции
545
Сверху