Написал тестовую функцию, цель — поместить в ячейку крафта семь предметов, таких же, какие лежат в первой ячейке инвентаря, после помещения, первую ячейку очистить. Визуально все работает, но когда мышкой пытаешься забрать из ячейки крафта предметы, то все возвращается в исходное положение. Примеры смотрел, где ошибаюсь — не понимаю.

проверяю все в 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

  • Просмотр профиля
  • Сообщения форума
  • Личное сообщение
  • Репутация

uberheim вне форума

Наблюдатель

Сообщений 23

Cервер Forestry

Любимые моды Buildcraft, IC2, Applied Energistics

Регистрация 01.07.2015

0 01.12.2015 в 00:49 .

Как быстро складывать вещи в инвенторе и в сундуке.!!

01.12.2015, 01:32 #2

Nikitossss2

  • Просмотр профиля
  • Сообщения форума
  • Личное сообщение
  • Репутация

Nikitossss2 вне форума

Узнаваемый

Ваш статус В игре

Сообщений 385

Cервер Новая сборка

Регистрация 25.12.2013

3 nbsp

Поблагодарил(а) 44 Получено благодарностей: 3,558 (сообщений: 812).

Источник: minecraftonly.ru