Написал тестовую функцию, цель — поместить в ячейку крафта семь предметов, таких же, какие лежат в первой ячейке инвентаря, после помещения, первую ячейку очистить. Визуально все работает, но когда мышкой пытаешься забрать из ячейки крафта предметы, то все возвращается в исходное положение. Примеры смотрел, где ошибаюсь — не понимаю.
проверяю все в 1.8.0
public void restoreInventoryOne(boolean b) < EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; if (player != null ) < net.minecraft.inventory.Container container = player.openContainer; if (container != null) if (container.getClass().getName() == «net.minecraft.inventory.ContainerPlayer») < ContainerPlayer conPlayer = (ContainerPlayer)container; InventoryPlayer invPlayer = player.inventory; InventoryCrafting invCraft = conPlayer.craftMatrix; ItemStack playerStack = invPlayer.getStackInSlot(0); Item item = playerStack.getItem(); invCraft.setInventorySlotContents(0, new ItemStack(item, 7)); invPlayer.setInventorySlotContents(0, null); >> >
AlexSoсol
1,976 68 219
!world.isRemote где?
sevrer
AlexSocol написал(а):
!world.isRemote где?
ФИШКИ ДЛЯ ИНВЕНТАРЯ | ТОП 5 ФАКТОВ В МАЙНКРАФТ | ГОРЯЧИЕ КЛАВИШИ ИНВЕНТАРЯ | Minecraft Bedrock, Java
А откуда берется этот world. Я вижу его во всех примерах, но не могу понять откуда его брать?
У меня есть вот такой кусок, откуда вызывается предыдущая функция:
Вот это «if (event.side == Side.CLIENT)» не аналог разве?
tox1cozZ
aka Agravaine
8,429 597 2,870
Дружище, ты всё на клиенте делаешь, а надо на сервере.
AlexSoсol
1,976 68 219
world.isRemote — проверка, отдалённый ли мир (если по-русски ). Если да — то это клиент, если нет — сервер.
«if (!world.isRemote)<>» проверяет, сервер ли это, и если да — делает то, что написано в if’е.
«А что тогда делать на сервере, а что — на клиенте?» — спросишь ты. Я отвечу, насколько знаю: «На сервере делать всё, с чем ты взаимодействуешь или что взаимодействует с тобой. Т.е. это спаун сущностей, установка блоков, накладывание эффектов и т.д. А вот текстуры, допустим — чисто клиентская вещь.» Вот и вся хитрость =)
sevrer
Agravaine написал(а):
Дружище, ты всё на клиенте делаешь, а надо на сервере.
Ну замена «if (event.side == Side.CLIENT)» на «if (event.side == Side.SERVER)» ничего не меняет. Все по прежнему.
[merge_posts_bbcode]Добавлено: 19.01.2016 08:39:51[/merge_posts_bbcode]
AlexSocol написал(а):
world.isRemote — проверка, отдалённый ли мир (если по-русски ). Если да — то это клиент, если нет — сервер.
«if (!world.isRemote)<>» проверяет, сервер ли это, и если да — делает то, что написано в if’е.
«А что тогда делать на сервере, а что — на клиенте?» — спросишь ты. Я отвечу, насколько знаю: «На сервере делать всё, с чем ты взаимодействуешь или что взаимодействует с тобой. Т.е. это спаун сущностей, установка блоков, накладывание эффектов и т.д. А вот текстуры, допустим — чисто клиентская вещь.» Вот и вся хитрость =)
Мне вспомнился анекдот про типичного программиста, где в итоге его ответ был верным, но бесполезным.
Разжую свой вопрос про «world.isRemote»: просто копирование этого текста в исходник ни к чему не приводит, точнее приводит к его подчеркиванию красным с ошибкой «world cannot be resolved to a variable». Мой вопрос и заключается в том, что тыкнете меня носом, где его взять (объявить, импортировать и пр.)
[merge_posts_bbcode]Добавлено: 19.01.2016 08:43:46[/merge_posts_bbcode]
Господа, ну серьезно. В других топах вы вопрошающих ругаете за то, что они мозги не включают, доки не читают.
Я в своем вопросе вроде показал и его суть, и свой код привел, и показал что сделал все что мог, а не тупо ленивая сволочь.
Помогите примером кода.
И я читал посты про инвентарь в закрытых вопроса на форуме.
timaxa007
Модератор
5,831 409 672
На клиентской стороне:
EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
org.lwjgl.input.Keyboard.isKeyDown(kBindRestoreOne.getKeyCode())
По этому на серверной стороне не заработает это:
invCraft.setInventorySlotContents(0, new ItemStack(item, 7)); invPlayer.setInventorySlotContents(0, null);
Скорее всего придётся использовать оправку пакетов, чтобы выполнить это действие.
sevrer написал(а):
Помогите примером кода.
Если будет время.
[merge_posts_bbcode]Добавлено: 19.01.2016 07:56:54[/merge_posts_bbcode]
sevrer написал(а):
AlexSocol написал(а):
!world.isRemote где?
А откуда берется этот world. Я вижу его во всех примерах, но не могу понять откуда его брать?
Много откуда, но в данном случаи можно от player.worldObj.
Ну, как-то так.
Я тоже могу ошибаться. Я пишу на 1.7.10.
tox1cozZ
aka Agravaine
8,429 597 2,870
Ну, давай подумает, откуда можно достать мир.
Во-первых, клиентский мир можно взять из Minecraft — Minecraft.getMinecraft().theWorld.
Во-вторых, давай логически подумает, где появляется энтити(в данном случае — игрок)? В мире, правильно? Значит в энтити хранится мир, в котором он появился, логично?
Мир у нас есть, окей.
Теперь главная проблема: клиент нажимает на клавиатуре кнопку, но сервер понятия не имеет, что какой-то там клиент клацнул на кнопочку у себя. Собственно, нам нужно это сказать серверу.
Как же это сделать? Правильно, отправить пакет.
В данном случае нам на клиенте нужно проверить, нажата ли клавиша и отправить пакет на сервер.
А на сервере уже делать то что нам хочется. Изменять инвентарь игрока, например.
Туториалов по пакетам много, так что думаю с этим проблем не будет.
Самому когда-то было тяжело понять логику клиент-сервер и сервер-клиент.
sevrer
Agravaine написал(а):
Ну, давай подумает, откуда можно достать мир.
Во-первых, клиентский мир можно взять из Minecraft — Minecraft.getMinecraft().theWorld.
Во-вторых, давай логически подумает, где появляется энтити(в данном случае — игрок)? В мире, правильно? Значит в энтити хранится мир, в котором он появился, логично?
Мир у нас есть, окей.
Теперь главная проблема: клиент нажимает на клавиатуре кнопку, но сервер понятия не имеет, что какой-то там клиент клацнул на кнопочку у себя. Собственно, нам нужно это сказать серверу.
Как же это сделать? Правильно, отправить пакет.
В данном случае нам на клиенте нужно проверить, нажата ли клавиша и отправить пакет на сервер.
А на сервере уже делать то что нам хочется. Изменять инвентарь игрока, например.
Туториалов по пакетам много, так что думаю с этим проблем не будет.
Самому когда-то было тяжело понять логику клиент-сервер и сервер-клиент.
Про Minecraft.getMinecraft().theWorld я писать не стал, думаю что event.side тоже уместен.
Про пакеты мысль пришла, но уже было поздно и пора было спать. Пойду искать туториал по пакетам.
Ну и исходная задача все таки переместить из одного слота в другой, без дюпов, это я уж погорячился в своем примере, нужно создать мод для клиента, но для режима MP. И уж если ванильный клиент может отправлять пакеты о манипуляциях в инвентаре, значит и в модах должна быть такая возможность.
Кстати, ковырял исходники InventoryTweaks, но они реализацию функции move(. ) куда-то спрятали.
Источник: forum.mcmodding.ru
Мод на перемещение предметов для Майнкрафт 1.12.2/1.11.2/1.10.2/1.8.9/1.7.10 (Multiverse Pouch)
Мод Multiverse Pouch добавляет в Майнкрафт средство для обмена элементами среди сохраненных данных. Данный мод позволяет положить вещь в чехол и после пользоваться им из любого игрового мира. При помощи чехла Вы можете переносить выбранную вещь через различные миры ни о чем не волнуясь.
Установка для большинства лаунчеров
Универсальная FLauncher
1. Скачайте мод нужной версии ниже
2. Загрузите и установите Minecraft Forge (в большинстве лаунчеров можно установить через лаунчер)
3. Загруженный мод не распаковывая, скопируйте в .minecraft/mods
4. Готово! Выберите в лаунчере Forge и запустите игру
1. Скачайте мод нужной версии ниже
2. Загрузите и установите Minecraft Forge (можно установить через лаунчер, но версии выше 1.12.2 недоступны) 3. Загруженный мод не распаковывая, скопируйте в .flauncher/clients/vanilla/minecraft/mods
4. Готово! Выберите в лаунчере Forge и запустите игру
Источник: minecraftom.ru
Тема: Как перекинуть с одной ячейки памяти на другую?
uberheim
Просмотр профиля
Сообщения форума
Личное сообщение
Репутация
Наблюдатель
Сообщений 23
Cервер Forestry
Любимые моды Buildcraft, IC2, Applied Energistics
Регистрация 01.07.2015
0 01.12.2015 в 00:49 .
Как быстро складывать вещи в инвенторе и в сундуке.!!
01.12.2015, 01:32 #2
Nikitossss2
Просмотр профиля
Сообщения форума
Личное сообщение
Репутация
Узнаваемый
Ваш статус В игре
Сообщений 385
Cервер Новая сборка
Регистрация 25.12.2013
3 nbsp
Поблагодарил(а) 44 Получено благодарностей: 3,558 (сообщений: 812).
Источник: minecraftonly.ru