A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
mc-modding-book / book / 1.11+ / forge / gui / custom_inventory / article.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cannot retrieve contributors at this time
1110 lines (833 sloc) 48.5 KB
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents Copy raw contents
Copy raw contents
Создание своего инвентаря
Рабочий тестовый мод с материалами данной статьи можно скачать здесь.
Туториал предполагает что вы знакомы с использованием прокси и умеете общаться с CAP`ой на уровне жестов(если не умеете то будем учить), а как отправлять пакеты постараюсь пояснить:)
КАК ИЗМЕНИТЬ ИНВЕНТАРЬ В МАЙНКРАФТ / MINECRAFT [КЕПЧИ,СВОЙ ИНВЕНТАРЬ,ВАЙМ ВОРЛД]
Мы будем создавать вот такой инвентарь:
Это будет отдельный инвентарь(т.е. он не будет перекрывать обычный), который мы сможем открыть по нажатию созданной нами в дальнейшем кнопки Н. Для повышения совместимости кнопку сделаем так, что ее можно будет поменять в настройках управления на другую, таким образом любой пользователь сможет настроить все как ему удобно.
Нам нужно создать четыре «базовых» для нашего инвентаря класса:
- CustomInventory.java — класс который будет управлять содержимым инвентаря, например: хранение, сохранение и восстановление инвентаря, управление предметами и т.д..
- ContainerCustomInv,java — контейнер. В нем будут добавляться слоты и описываться механика перетаскивания предметов из слота в слот при шифт-клике на них.
- StandartSlot.java — кастомные слоты, которые будем добавлять в контейнер. Хотя можно использовать и ванильные, но заодно покажу как использовать свои.
- GUICustomInv.java — то, как будет выглядеть инвентарь(бинд текстуры и прочее).
Для того, чтоб вы не путались с индексами слотов когда будете делать или менять контейнер, я прикреплю такую картинку в помощь. На ней все слоты промаркированные:
Теперь нужно настроить контейнер:
Если вы хотите добавить, либо убрать слот, то нужно не забыть уменьшить или увеличить размер списка, в котором хранятся предметы(CustomInventory.java -> INV_SIZE). Так же не забудьте поправить индексы в методе transferStackInSlot , что в классе ContainerCustomInv . Если этого не сделать, то пойдут краши, такие как выход за пределы массива( ArrayIndexOutOfBoundsException ) и прочие.
Пару слов о том, как ориентироваться в размещении слотов. Слоты, которые мы добавляем в инвентарь стандартного размера(16 x 16). Когда добавляем слот( this.addSlotToContainer(new StandartSlot(player, cInventory, 0, x, y) ), указываем x и y координаты, на которых этот слот будет размещен. В качестве центра выступает левый верхний угол слота. Думаю, понятнее будет, если посмотреть на картинку ниже:
Как видно на картинке, желтые точки это точки с координатами x и y, которые указывались при добавлении слота. Красным отмечен контур слота и как он располагается относительно указанной точки. Здесь я добавил два слота, с координатами x = 0, y = 0 и x = 87, y = 8.
Осталось только GUI:
Есть. Теперь где-то надо это все хранить. Ибо мало того, что мы просто добавим инвентарь. При первом же перезаходе игрока в мир все вещи пропадут. Для этого будем использовать такую штуку как КАПа, или Capability . Это замена IExtendedEntityProperties для новых версий.
- ICAPCustomInventory.java — интерфейс, в котором опишем основные методы для взаимодействия КАПы с инвентарем.
- CAPCustomInventory.java — класс, реализующий данный интерфейс. Так же в нем будет хранится обьект нашего инвентаря — CustomInventory.
- CAPCustomInventoryProvider.java — в нем располагаются методы для доступа к КАПе а так же проводится вызов методов чтения и сохранения (десериализации и сериализации). Вызов этих методов — это по сути вызов методов writeNBT и readNBT из класса CAPCustomInventoryStorage , функционал которого описан пунктом ниже.
- CAPCustomInventoryStorage.java — в этом классе есть всего два метода: writeNBT и readNBT . Мы должны описать в них то, что и как будет записываться и читаться в/из НБТ. Под записью и чтением в/из НБТ подразумевается сохранение нужной нам информации например при выходе игрока из игры, и ее считывание(загрузка), когда игрок заходит обратно в игру. Наши вещи будут в безопасности:)
// ICAPCustomInventory.java package com.example.test; public interface ICAPCustomInventory < public void copyInventory(ICAPCustomInventory inventory); public CustomInventory getInventory(); >
Готово. Нужно зарегистрировать КАПу. Пишем в коммон прокси в инит стадии:
// CommonProxy.java CapabilityManager.INSTANCE.register(ICAPCustomInventory.class, new CAPCustomInventoryStorage(), CAPCustomInventory.class); CapabilityEventHandler.
register();
Для чего CapabilityEventHandler.register(); ? При создании игрока нужно ему добавить КАПу. Для этого создаем класс CapabilityEventHandler.java и добавляем в него:
Пример того, как через КАПу получить доступ к нашему инвентарю:
//Достаем КАПу, затем инвентарь EntityPlayer player = . ;//Любым способом достать игрока ICAPCustomInventory cap = player.getCapability(CAPCustomInventoryProvider.INVENTORY_CAP, null); CustomInventory inv = cap.getInventory();
Клавиша на клавиатуре
Такс. Инвентарь есть, КАПа для хранения есть. Теперь самое интересное. Создадим свой кей бинд(т.е. забиндим кнопку), при нажатии на который будем посылать пакет на сервер с просьбой открыть наш GUI-контейнер(инвентарь). Для этого делаем класс KeyHandler.java, в котором ловим событие нажатии кнопки и отправляем пакет:
Обязательно регаем все это дело в клиент прокси (в ините например):
KeyHandler.register();
Позже в настройках(когда доделаем все и запустим) получим что-то типа такого:
В коде выше будут ошибки. Будет ругаться на NetworkHandler.network.sendToServer(new OpenInventoryMessage()); . Это какраз и есть отправка пакетов. Чтобы это работало нужно:
- Создать класс NetworkHandler.java, в котором зарегистрируем наш пакет.
- Создать класс OpenInventoryMessage.java — это сам пакет а так же в нем есть вложенный класс-обработчик пакета. Он реализует метод onMessage, который срабатывает когда пакет приходит на сервер(в данном случае).
// NetworkHandler.java package com.example.test; import net.minecraftforge.fml.
common.network.NetworkRegistry; import net.minecraftforge.fml.common.
network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.relauncher.
Side; public class NetworkHandler < public static SimpleNetworkWrapper network; public static void init() < //инициализируем класс, что занимается передачей и обработкой пакетов между клиентом и сервером. TestMod.MOD_ID — айди мода. network = NetworkRegistry.INSTANCE.newSimpleChannel(TestMod.
MOD_ID); /* Регистрируем пакет. Параметры: класс обработчика(статический класс, который лежит внутри OpenInventoryMessage), класс самого сообщения, идентификатор, сторона, на которой будет обрабатываться пакет. Так как мы посылаем его на сервер, для открытия GUI менно оттуда, то указываем Side.SERVER */ network.registerMessage(OpenInventoryMessage.Handler.
class, OpenInventoryMessage.class, 0, Side.SERVER); > >
Не забываем зарегать это дело. В главном классе в преините пишем:
NetworkHandler.init();
Готово. Но будут ошибки в OpenInventoryMessage -> player.openGui(. ); . Нам нужен класс GuiHandler который при открытии GUI для сервера открывает контейнер, а для клиента GUI:
Его нужно зарегистрировать в коммон прокси в ините:
NetworkRegistry.INSTANCE.registerGuiHandler(TestMod.INSTANCE, new GuiHandler());
Воу. Почти все готово.
Уже можно даже запускать.
Но есть пару важных нюансов. При смерти игрока вещи не будут выпадать. При клонировании игрока вещи пропадут. Модифицируем наш ранее созданный класс для событий CapabilityEventHandler.java чтоб он теперь выглядел вот так:
Еще раз проверьте:
- Зарегистрировали вы КАПу
- Зарегистрировали вы кей бинд (KeyHandler)
- Зарегистрировали ли вы обработчики событий (CapabilityEventHandler)
- Зарегистрировали вы GuiHandler
- Зарегистрировали ли вы NetworkHandler и OpenInventoryMessage
Все. Можно запускать, открывать(жмякать Н, но можно теперь поменять в настройках) и радоваться жизни.
Задний фон у слотов
Но есть еще кое-что. Наши кастомные слоты пустые, без текстуры, не как например слоты брони. Самый простой способ добавить текстуру слоту — это дорисовать ее на картинке:). Перерисуем нашу inventory_gui.png и добавим задний фон слотам:
Источник: github.com
Как создать свой инвентарь в майнкрафт
По просьбе решил написать простой туториал о создании кастомного инвентаря игрока. Прочитав данную статью, я подумал сделать свой инвентарь но с многими изменениями и под новую версию майна.
Туториал предполагает что вы знакомы с использованием прокси и умеете общаться с CAP`ой на уровне жестов(если не умеете то будем учить), а как отправлять пакеты постараюсь пояснить
Инвентарь, который получиться будет выглядеть так:
Это будет отдельный инвентарь(т.е. он не будет перекрывать обычный), который мы сможем открыть по нажатию созданной нами в дальнейшем кнопки Н. Для повышения совместимости кнопку сделаем так, что ее можно будет поменять в настройках управления на другую, таким образом любой пользователь сможет настроить все как ему удобно.
И так. Первым делом, нам нужно создать четыре «базовых» для нашего инвентаря класса:
- CustomInventory.java — класс который будет управлять содержимым инвентаря, например: хранение, сохранение и восстановление инвентаря, управление предметами и т.д..
- ContainerCustomInv,java — контейнер. В нем будут добавляться слоты и описываться механика перетаскивания предметов из слота в слот при шифт-клике на них.
- StandartSlot.java — кастомные слоты, которые будем добавлять в контейнер. Хотя можно использовать и ванильные, но заодно покажу как использовать свои.
- GUICustomInv.java — то, как будет выглядеть инвентарь(бинд текстуры и прочее).
Для того, чтоб вы не путались с индексами слотов когда будете делать или менять контейнер, я прикреплю такую картинку в помощь. На ней все слоты промаркированные:
Теперь нужно настроить контейнер:
Если вы хотите добавить, либо убрать слот, то нужно не забыть уменьшить или увеличить размер списка, в котором хранятся предметы(CustomInventory.java -> INV_SIZE). Так же не забудьте поправить индексы в методе transferStackInSlot, что в классе ContainerCustomInv. Если этого не сделать, то пойдут краши, такие как выход за пределы массива(ArrayIndexOutOfBoundsException) и прочие.
Пару слов о том, как ориентироваться в размещении слотов. Слоты, которые мы добавляем в инвентарь стандартного размера(16 x 16). Когда добавляем слот( this.addSlotToContainer(new StandartSlot(player, cInventory, 0, x, y)) , указываем x и y координаты, на которых этот слот будет размещен. В качестве центра выступает левый верхний угол слота. Думаю, понятнее будет, если посмотреть на картинку ниже:
Как видно на картинке, желтые точки это точки с координатами x и y, которые указывались при добавлении слота. Красным отмечен контур слота и как он располагается относительно указанной точки. Здесь я добавил два слота, с координатами x = 0, y = 0 и x = 87, y = 8.
Думаю логика понятна, не так уж и сложно)
Осталось только GUI.
Есть. Теперь где-то надо это все хранить. Ибо мало того, что мы просто добавим инвентарь. При первом же перезаходе игрока в мир все вещи пропадут. Для этого будем использовать такую штуку как КАПа, или Capability.
Это замена IExtendedEntityProperties для новых версий.
Игровой видеоролик «Как сделать свой инвентарь в майнкрафте?!» можно скачать бесплатно в форматах mp4, x-flv, 3gpp, для этого нажмите кнопку «Скачать видео» которая находится сверху.
Как сделать у себя в инвентаре свой арт Minecraft и красивый инвентарь? Моя группа
Помог?Поставь лайк)
Кроме того, вы можете посетить канал автора «Max Lyabin», который можно найти на нашем бесплатном видео сайте и посмотреть похожие видеоролики про данную игру.
Видео для мобильного телефона, смартфона, планшета и т. д. можно посмотреть тут онлайн, бесплатно и без регистрации. А также скачать мобильное видео в формате mp4, x-flv и 3gpp!
Пожалуйста, оставьте свой комментарий или отзыв к этому видеоролику! Автору будет очень интересно узнать, что вы думаете о его работе.
Ссылка на страницу с видео:
Ссылка HTML на страницу с видео:
Код для вставки плеера:
Расскажите о нём своим приятелям и друзьям! Возможно им будет тоже интересно посмотреть и обсудить этот ролик.
Пожалуйста, оставьте свой комментарий.
Если вам нравится материал от данного пользователя, то напишите пожалуйста немного выше свой комментарий или отзыв о этом игровом контенте. Автору и всем посетителям сайта будет очень интересно узнать что вы думаете.
2 ЧАСТЬ ЭТОГО ВИДЕО! 2 ЧАСТЬ ЭТОГО ВИДЕО! 2 ЧАСТЬ ЭТОГО ВИДЕО! ________________________________________________________________ КАРТИНК. От DenGames988
Небольшой фарм луками на 7 тх ) Если вам понравилось видео, не забудь поставить лайк) Видео посвящено любителям игры Clash of Clans. От Max Lyabin
Открой ________________________________________________________________________________________________________________________________ Ссылка на. От RoisChanell
Ловля карася на поплавочную удочку) Насадка:кукуруза Оцени видос лайком и комментом). От Max Lyabin
Внимание! Копирование материалов с игрового видео-сайта возможно только при установке прямой html-ссылки на видео сайт Майнкрафт.орг, полностью открытой для индексации!
Wowа кутенко Hace 2 meses
А если я без вируса вин-рара?!
FR4GER Hace un año
у меня там нету архиWow и тд
Respublika Russia Hace 2 años
у меня получилось супеер
Castet/Yot Tuber казакша геймер kz Hace 2 años
какой программой ты это сдела .
Родион Гордей Hace un año
No Name Hace 2 años
MaxMatasha скинь свой инвентарь
fein Hace 2 años
Уголок _Vladislava_ Hace 3 años
Нажалбы в фотошопе ПЕРЕКРЫТИЕ для красты
Зроби сам Hace 3 años
Боже нащо писати апдата якщо клацнути по ярлику правою кнопкою миші і вибрати располежение файла і все і час зекономите і швидко зайдете
Robin Hace 3 años
есть такая папка напиши %appdata%
РТуТЬ GAMES Hace 3 años
брат с photoshop cc
Tiggerツ Hace 3 años
Tiggerツ Hace 3 años
У меня арт не загружаеться! Что делать?
BUDY YO Hace 3 años
в майнкрафт лаунчере есть кнопка открыть папку
Нерди Hace 3 años
автор,ты сцука? Hace 3 años
нету такой папки
Mr Sefri Hace 3 años
ТРУПОЕДОВ Hace 4 años
Зделай как зделать арт
Dolce Vita Hace 4 años
скинь пож свой фон))
Lil Lucifer Hace 4 años
Сделай урок как сделать свой скин в пиратке мне это не нужно но другу нужно
Источник: minecraft-kak.ru
Моды на инвентарь для Minecraft
Инвентарь — это то единственное, что есть у игрока в начале игры. Со временем инвентарь придется расширять, для этого лучше скачать моды на инвентарь, которые добавят не только большой инвентарь, но и более удобное управление сортировкой ресурсов. Установив мод на улучшенную инвентаризацию, вам станут доступны дополнительные места для хранения предметов, блоков и жидкостей, а это резервуары, контейнеры, ящики, огромные сундуки и даже бесконечный инвентарь.
Iron Chests [1.19.3] [1.18.2] [1.16.5] [1.12.2]
Iron Chests добавляет улучшенные сундуки из различных материалов Медный сундук, Железный, Серебряный, Золотой, Алмазный, Кристальный, Обсидиановый и Земляной сундук 9000, все сундуки стандартного размера, разной вместительности. Iron Chests лучший мод на
2 дня и 18 часов назад
Better Respawn [1.19.3] [1.18.2] [1.17.1] [1.16.5]
Установив мод Better Respawn, игрок сможет возрождаться ближе к месту последней смерти и собирать свой лут (расстояние респавна от места гибели настраивается в конфиге). Это решает проблемы с потерей инвентаря, ведь оступившись игрок, может попросту
2 дня и 18 часов назад
Inventory Profiles [1.19.2] [1.18.2] [1.17.1] [1.16.5]
Inventory Profiles — это клиентский мод для сортировки инвентаря, включая сундуки и внутренний инвентарь. Мод отлично работает в мультиплеере и не требует установки на сервер. Нажмите R + C, чтобы открыть меню настроек в игре. Нажмите R на экране
месяц и неделю назад
Player Tabs [1.18.2]
Установив мод Player Tabs, в инвентаре можно создавать отдельные вкладки (как в творческом режиме) и распределять предметы по разным типам. Это делает инвентарь игрока практически безразмерным и максимально удобным. Кроме того, вы можете дать свое
2 месяца назад
Framed Compacting Drawers [1.18.1] [1.17.1] [1.16.5] [1.12.2]
Framed Compacting Drawers — это дополнительный модуль для Storage Drawers, который добавляет Compacting Drawer, Drawer Controller и Controller Slave. Подобно другим выдвижным ящикам, передняя часть, боковые стороны и отделка (верхняя / нижняя, боковые
2 месяца назад
Abnormals Delight [1.16.5]
Мод Abnormals Delight добавляет совместимость модификациям Team Abnormals и Farmers Delight, куда вошли хранилища для всех видов аномальной древесины, кусочки мяса, торта и много других ингредиентов.
2 месяца и 3 недели назад
Chest Tracker [1.18.1] [1.17.1] [1.16.5]
Мод позволяет подписывать сундуки, переименовывать и делать небольшие заметки о содержимом сундука. Мод помогает игрокам оптимизировать свой инвентарь, разделить на категории и облегчить поиск предметов, особенно полезно «ожиревшим» игрокам.
2 месяца и 3 недели назад
Project: Backpacks [1.16.5]
Мод Project: Backpacks вводит в игру несколько простых рюкзаков, дабы предоставить дополнительные слоты к основному инвентарю. Первоначально игрокам будет доступен базовый кожаный рюкзак, который можно легко улучшить используя железо, золото и алмазы. Все
2 месяца и 3 недели назад
Packing Tape [1.18] [1.17.1] [1.16.5] [1.12.2]
Packing Tape добавляет упаковочную ленту, при помощи которой, можно компактно упаковать сундук с вещами, командные блоки, печи, механизмы и другие предметы, для транспортировки, которые не займут много места в инвентаре. Создайте упаковочную ленту из
2 месяца и 3 недели назад
Storage Drawers [1.19.1] [1.18.2] [1.17.1] [1.12.2]
Storage Drawers добавит идеально удобные контейнеры для хранения предметов. Контейнер оснащен продвинутым интерфейсом и интеллектуальным экраном, который отображает содержимое и количество предметов, при этом компактен и не занимает много места. Как
Источник: mods-minecraft.ru