Создание еды

Версия Minecraft
1.7.10
48
1
Решил я запилить в мод еду, но не понял как. Гугол находил мне гайды ссаных мод мейкеров, но не нормальные туториалы. И тут я решил сделать все сам: за основу хотел взять ItemsFood, но ничерта там не понял, что за что отвечает (Если быть точнее, меня смущают эти странные... нечто, например: p_77626_1_). При изучении исходников я заметил что все предметы регистрируются в Item.Class, но это мне мало как помогло, так как данные о еде в ItemsFood, а в Item.Class только регистрация, нелокализированное имя, креатив таб, текстура и в некоторых случая материал.
Тогда я нашел ItemSoup - Идеальное решение! Если бы только не одно но: опять цифробуквы наподобие p_77626_1_, и это не смотря на строчки в которых все объяснено: public ItemStack onEaten(ItemStack p_77654_1_, World p_77654_2_, EntityPlayer p_77654_3_), хотя в данном случае более менее я что то понял.
___
Попытка банально скопировать "суп" с удалением всего что идет после public itemstack oneaten (с удалением этой строки тоже) не обвенчалась успехом:

Java:
@EventHandler
public void preLoad(FMLPreInitializationEvent event)
    {
        testfood = new TestFood().setUnlocalizedName("testfood"); /*главный класс жалуется на эту строчку, мол "создай нелокализированное имя", но оно есть! */
        GameRegistry.registerItem(testfood, "testfood");
    }
Импорты сделаны, класс создан, внутри TestFood.java проблем нет:
Java:
public class TestFood extends ItemFood
{
    private static final String __OBFID = "CL_00001778";

    public TestFood(int p_i45330_1_)
    {
        super(p_i45330_1_, false); // p_i45330_1_ - мне не известно что это, false - вроде как волки не могут есть мой "суп"
        this.setMaxStackSize(1);
    }

}
Может вразумите меня, что за "цифробуквы" и как с ними работать, или подкиньте гайдик на создание еды в 1.7.10, пожалуйста
__________
Возможно описал что то не полностью - у меня уже ночь. Если чего то не хватает, я допишу
 
Последнее редактирование:
Решение
Java:
testfood = new ItemFood(20, 1F, false).setUnlocalizedName("testfood").setTextureName("modid:testfood");
GameRegistry.registerItem(testfood, "testfood");
20 - для игрока, это сколько единиц (половина окорока) будет насыщен игрок или сколько единиц (половина сердца) здоровья вылечит собаку, если ей можно это есть.
1F - на сколько будет насыщен игрок (точных ограничений нет, но приготовленное мясо говядины имеет значение 0.8F).
false - будет-ли есть собака эту еду: если true будет, если false, то не будет.

timaxa007

Модератор
5,831
409
672
/*главный класс жалуется на эту строчку
Он жалуется на то, что ты не передаешь аргументы для конструктора класса TestFood.
что за "цифробуквы"
Так автоматически назначены имена аргументы/переменные/методы, которые не были переменнованых по MCP Mapping'у.
private static final String __OBFID = "CL_00001778";
Это не надо себе писать.
p_i45330_1_ - мне не известно что это
Смотри в класс родителя. Данный аргумент передаст переменной healAmount в ItemFood - для игрока, это сколько единиц (половина окорока) будет насыщен игрок или сколько единиц (половина сердца) здоровья вылечит собаку, если ей можно это есть.
и как с ними работать
Для начало хотя-бы поверхностные знания по языку Java изучи, чтобы подобные вопросы для себя решить.
 
48
1
Хорошо, спасибо
Базовый курс я проходил, но это давно было
И то не очень углубляблся в java
Методы, супер конструкторы, конструкторы, еще что то, массивы
 

timaxa007

Модератор
5,831
409
672
Java:
testfood = new ItemFood(20, 1F, false).setUnlocalizedName("testfood").setTextureName("modid:testfood");
GameRegistry.registerItem(testfood, "testfood");
20 - для игрока, это сколько единиц (половина окорока) будет насыщен игрок или сколько единиц (половина сердца) здоровья вылечит собаку, если ей можно это есть.
1F - на сколько будет насыщен игрок (точных ограничений нет, но приготовленное мясо говядины имеет значение 0.8F).
false - будет-ли есть собака эту еду: если true будет, если false, то не будет.
 
48
1
Так автоматически назначены имена аргументы/переменные/методы, которые не были переменнованых по MCP Mapping'у.
Но все равно, как их различать?
Я в исходниках навел на эти "имена", мне показало куда это ведет, я понял для чего, навожу допустим на второе "имя", а там уже ничего.
 
48
1
А как смотреть куда ведут?
______________
Java:
public static ItemFood testfood;
...
testfood = new ItemFood(20, 1F, false).setUnlocalizedName("testfood").setTextureName("modid:testfood");// ошибка, не может конвертировать Item в ItemFood
        GameRegistry.registerItem(testfood, "testfood");
 

timaxa007

Модератор
5,831
409
672
Ну, в eclipse нужно ...
new ItemFood(20, 1F, false)
Тут нажимаешь Левую Кнопку Мыши на ItemFood, затем на клавишу F3, обычно открывается новая вкладка и в этой новой вкладке ведёт на нужную строчку (если конечно исходники правильно встали у тебя).
public static ItemFood testfood;
Просто Item, а не ItemFood.
 
48
1
Спасибо
а не подскажешь, как убрать определенный дебафф при onItemRightClick? решено
и еще, как сделать чтобы выдавалось несколько алмазов? return new ItemStack(Items.diamond, 2); ? Как сделать чтобы выдавались алмаз и изумруд?
Java:
public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_)
    {
            return new ItemStack(Items.diamond);
    }
 
Последнее редактирование:
48
1
Тут нажимаешь Левую Кнопку Мыши на ItemFood, затем на клавишу F3, обычно открывается новая вкладка и в этой новой вкладке ведёт на нужную строчку (если конечно исходники правильно встали у тебя).
на f3 просто выделяется
 

timaxa007

Модератор
5,831
409
672
Как сделать чтобы выдавались алмаз и изумруд?
Примерно так:
Java:
    @Override
    public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) {
        player.inventory.addItemStackToInventory(new ItemStack(Items.diamond, 2));
        player.inventory.addItemStackToInventory(new ItemStack(Items.emerald, 3));
        if (!player.capabilities.isCreativeMode) --itemStack.stackSize;
        if (itemStack.stackSize <= 0) player.inventory.setInventorySlotContents(player.inventory.currentItem, null);
        return itemStack;
    }
на f3 просто выделяется
А у меня переходит:
 
48
1
Сверху