Свой блок с инвентарем 1.7.10

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#1
Некорректные теги
Версия Minecraft
1.7.10
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
Я хочу сделать стойку, которую надо будет ставить под солнце и на нее надо будет вешать сырую кожу, которая будет заменяться на высохшую кожу через некоторое время.
На что будет похож код этой стойки и сам рецепт кожи? На печку, которая постоянно горит без топлива? В каком направлении мне идти? Что изучать?
Может посмотреть код солнечных панелей?
 

Eifel

Золотая лига
Сообщения
1,308
Лучшие ответы
54
Симпатии
338
#2
Ну если просто, то тебе надо блок с тайлэнтити(с инвентарем)(похоже на печку), какая-то прикольная моделька и TESR(Tile Entity Special Renderer). При клике по блоку сырой кожей, в методе Block#onBlockActivated достаем тайл -> инвентарь и помещаем туда кожу. В тайле, в методе TileEntity#update проверяем, что у нас есть день и кожа в инвентаре, запускаем какой-то счетчик(если условия изменились, то останавливаем или же сбрасываем - зависимо от условий). Если счетчик дошел до определенного значения - заменяем сырую кожу на кожу. После чего игрок тем же кликом может забрать эту кожу. Дополнительно можно сделать еще чтобы при взаимодействии с блоком открывалась гуиха с инвентарем и слотами, в которые можно положить кожу, после чего запускается тот же процесс(опять же печка). Для этого надо почитать о тайлах, , гуи и контейнерах и как это все зарегать(реализацию можно глянуть опять же в печке). А с помощью TESR отрисовать кожу на твоем блоке, да бы было красиво. И кстати, где-то я уже такую реализацию видел, вот точь в точь, можешь погуглить по модам.
Как одна из идей...
 
Последнее редактирование:

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#3
А сделать это с стойку для сушки с GUI намного сложнее, чем без?
Такая стойка есть в моде PrimalCore(закрытый код,1.10.2+) И в моде HarderWildlife(закрытый код, 1.7.10, но там есть вещи, которые не нужны, а в конфиге отключить нельзя...)
 

timaxa007

Команда форума
Сообщения
5,475
Лучшие ответы
355
Симпатии
502
#4
@Starcry, для какого как сложнее. Наверно будет правильнее спросить, что проще делается. Тогда ответ без Gui.
 

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#5
Я понимаю, что проще, но насколько? GUI кастомного инвентаря - большая отдельная тема? Или достаточно немного посидеть, прежде чем что-то сделать, при условии, что я недавно начал делать моды и делал только ингридиенты для крафта, инструменты, оружие, креативтаб, еду, блоки + пару событий при помощи Thunder, SuperCatMaster, BlesseNTumble и ОГРОМНОЙ помощи Timaxa!
 

Eifel

Золотая лига
Сообщения
1,308
Лучшие ответы
54
Симпатии
338
#6
Начни с малого, разберись, подучи язык(так у тебя много вопросов отойдет само собой), попробуй какие-то обычные гуи типа книги. Тогда берись за чет сложнее. Сначала попробуй какой-то простой, например сундук, потом сделай аналог печки и разберись, а затем без проблем напишешь свой механизм(ну у меня это так происходило, суть ты уловил дуаю).
 

timaxa007

Команда форума
Сообщения
5,475
Лучшие ответы
355
Симпатии
502
#7
Зависит на сколько знает человек. Не придётся регистрировать GuiHandler, делать Gui и Container, создание текстуры для Gui, настройки метода в контейнере, который срабатывает по Shift+клику и т.п.
А вот делать Gui или нет, зависит от того что ты хочешь. Хочешь видеть статус изготовления, видит-ли блок солнце. Или просто без Gui просто быстро положишь и всё, а вот идёт изготовление или нет, придётся догадываться.
 

DStriker

Каменная лига
Сообщения
32
Лучшие ответы
1
Симпатии
11
#8
Ну если сильно не заморачиваться, то для данной задачи хватило бы тикающего блока, меняющего метадату при выполнении тех или иных условий. Тогда не нужны ни тайлы, ни гуи, ни всё остальное.
 

Agravaine

Алмазная лига
Сообщения
4,408
Лучшие ответы
182
Симпатии
577
#9
Как ты в блоке собираешься хранить стаки которые сейчас обрабатываются?
 

ZZZubec

Каменная лига
Сообщения
339
Лучшие ответы
13
Симпатии
35
#10
если сильно не заморачиваться, то для данной задачи хватило бы тикающего блока, меняющего метадату
всё верно

они не нужны, тут блок либо без шкуры, либо с сырой шкурой, либо с высушенной шкурой
 

Agravaine

Алмазная лига
Сообщения
4,408
Лучшие ответы
182
Симпатии
577
#11
Шкура бывает разная и из разных животных. Тогда это не прокатит.
 

ZZZubec

Каменная лига
Сообщения
339
Лучшие ответы
13
Симпатии
35
#12
Лампочка и печь всегда были в виде двух блоков, в общем такое решение тоже имеет место быть и оно гораздо проще.
 

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#13
Ну если просто, то тебе надо блок с тайлэнтити(с инвентарем)(похоже на печку), какая-то прикольная моделька и TESR(Tile Entity Special Renderer). При клике по блоку сырой кожей, в методе Block#onBlockActivated достаем тайл -> инвентарь и помещаем туда кожу. В тайле, в методе TileEntity#update проверяем, что у нас есть день и кожа в инвентаре, запускаем какой-то счетчик(если условия изменились, то останавливаем или же сбрасываем - зависимо от условий). Если счетчик дошел до определенного значения - заменяем сырую кожу на кожу. После чего игрок тем же кликом может забрать эту кожу. Дополнительно можно сделать еще чтобы при взаимодействии с блоком открывалась гуиха с инвентарем и слотами, в которые можно положить кожу, после чего запускается тот же процесс(опять же печка). Для этого надо почитать о тайлах, , гуи и контейнерах и как это все зарегать(реализацию можно глянуть опять же в печке). А с помощью TESR отрисовать кожу на твоем блоке, да бы было красиво. И кстати, где-то я уже такую реализацию видел, вот точь в точь, можешь погуглить по модам.
Как одна из идей...
По идее там даже не нужно унаследовать класс BlockContainer, да?
Посмотрел класс котла, он наследует класс блока и все отлично, как раз изменяется метадата(но котла с измененной методатой я в майнкрафте не нашел) котла при определенных действиях.
 
Последнее редактирование:

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#14
Как ты в блоке собираешься хранить стаки которые сейчас обрабатываются?
Ты пологал, что я сделаю возможность хранить в блоке больше 1 кожи за раз? Нет, если одна кожа будет лежать на другой, то процесс сушки обеих замедлится. Я делаю упор на реалистичность, так что такого не будет.
 

Starcry

Каменная лига
Сообщения
116
Лучшие ответы
0
Симпатии
4
#15
Шкура бывает разная и из разных животных. Тогда это не прокатит.
А можно же сделать как у котла
Код, где метадата котла меняется в зависимости от предмета, которым кликают по котлу:
/**
     * Called upon block activation (right click on the block.)
     */
    public boolean onBlockActivated(World p_149727_1_, int p_149727_2_, int p_149727_3_, int p_149727_4_, EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
    {
        if (p_149727_1_.isRemote)
        {
            return true;
        }
        else
        {
            ItemStack itemstack = p_149727_5_.inventory.getCurrentItem();

            if (itemstack == null)
            {
                return true;
            }
            else
            {
                int i1 = p_149727_1_.getBlockMetadata(p_149727_2_, p_149727_3_, p_149727_4_);
                int j1 = func_150027_b(i1);

                if (itemstack.getItem() == Items.water_bucket)
                {
                    if (j1 < 3)
                    {
                        if (!p_149727_5_.capabilities.isCreativeMode)
                        {
                            p_149727_5_.inventory.setInventorySlotContents(p_149727_5_.inventory.currentItem, new ItemStack(Items.bucket));
                        }

                        this.func_150024_a(p_149727_1_, p_149727_2_, p_149727_3_, p_149727_4_, 3);
                    }

                    return true;
                }
                else
                {
                    if (itemstack.getItem() == Items.glass_bottle)
                    {
                        if (j1 > 0)
                        {
                            if (!p_149727_5_.capabilities.isCreativeMode)
                            {
                                ItemStack itemstack1 = new ItemStack(Items.potionitem, 1, 0);

                                if (!p_149727_5_.inventory.addItemStackToInventory(itemstack1))
                                {
                                    p_149727_1_.spawnEntityInWorld(new EntityItem(p_149727_1_, (double)p_149727_2_ + 0.5D, (double)p_149727_3_ + 1.5D, (double)p_149727_4_ + 0.5D, itemstack1));
                                }
                                else if (p_149727_5_ instanceof EntityPlayerMP)
                                {
                                    ((EntityPlayerMP)p_149727_5_).sendContainerToPlayer(p_149727_5_.inventoryContainer);
                                }

                                --itemstack.stackSize;

                                if (itemstack.stackSize <= 0)
                                {
                                    p_149727_5_.inventory.setInventorySlotContents(p_149727_5_.inventory.currentItem, (ItemStack)null);
                                }
                            }

                            this.func_150024_a(p_149727_1_, p_149727_2_, p_149727_3_, p_149727_4_, j1 - 1);
                        }
                    }
                    else if (j1 > 0 && itemstack.getItem() instanceof ItemArmor && ((ItemArmor)itemstack.getItem()).getArmorMaterial() == ItemArmor.ArmorMaterial.CLOTH)
                    {
                        ItemArmor itemarmor = (ItemArmor)itemstack.getItem();
                        itemarmor.removeColor(itemstack);
                        this.func_150024_a(p_149727_1_, p_149727_2_, p_149727_3_, p_149727_4_, j1 - 1);
                        return true;
                    }

                    return false;
                }
            }
        }
    }
А это значит, что можно написать много различных рецептов для этого блока. В зависимости от шкуры будет меняться на определенную метадату блока с текстурой шкуры моба, чья шкура хранится сейчас в блоке. Так по идее таймер можно привезать к каждому предмету, например, мокрая кожаная шапка сохнет быстрее, чем кожаная куртка. То есть отдельный таймер для шапки и для куртки.
 
Сверху