Удалить предмет перед этим использовать

Версия Minecraft
1.7.10
477
7
51
Здравствуйте, мне нужно при наводке на игрока и если в руках предмет нужный то использовать предмет на том игроке на которого смотрят, сделал наводку отправляю пакет, и на пакетной систем вроде как понял как использовать на другом игроке, игрока на которого смотрю отправляю пакет с ид его и на сервере получаю через getEntityByID, но когда я использую предмет на нем то предмет не исчезает что я думал произойдет но он как бы есть, когда выкидываю он пропадает, но его можно использовать хоть сколько если не выкидывать, крч я в чем-то рукожоплю
 
Решение
Сразу бы так и сказал. Да, тут без пакетов не обойтись, ибо сервер просто не знает, че там у игрока нажато.
Проблема с удалением предмета после юза? Если да, то
Java:
//на сервере
ItemStack current = player.getCurrentEquippedItem();
current.stackSize--;
if(current.stackSize==0)
    player.destroyCurrentEquippedItem();
7,099
324
1,509
Зачем пакет? Лови событие PlayerInteractEvent, чекай предмет и делай эффект
 
7,099
324
1,509
да и вроде пакетом рекомендуется
Кто рекомендует? Вот я рекомендую: лучше делать код проще, поддерживать его потом будет легче. Юзать пакеты, когда есть готовое серверное событие - это усложнение
для данной задачи
на сервере: onItemRightClick
Нет, потому что в этом методе нету параметра сущности, по которой кликают. Можно определить трассировкой, но зачем, если есть PlayerInteractEvent?
 
477
7
51
нету параметра сущности
Вроде там есть плеер хм, да я через клавишу активирую не нужен мне этот эвент, я получаю ентити на клиенте это для рендера и для эвента
 
Последнее редактирование:
7,099
324
1,509
Тебе нужно применение предмета по нажатию на клавишу? Не пкм по сущности?
 
477
7
51
7,099
324
1,509
Сразу бы так и сказал. Да, тут без пакетов не обойтись, ибо сервер просто не знает, че там у игрока нажато.
Проблема с удалением предмета после юза? Если да, то
Java:
//на сервере
ItemStack current = player.getCurrentEquippedItem();
current.stackSize--;
if(current.stackSize==0)
    player.destroyCurrentEquippedItem();
 
477
7
51
477
7
51
нашел ещё один метод, щас интересно теперь что из них и где можно использовать
player.getCurrentEquippedItem().useItemRightClick(world, player2(Это по кому нажимаем)) - сервер код
 
477
7
51
Проблема с удалением предмета после юза? Если да, то
Даа, щас попробовал иии... предмет всё так же остается в руке как фантом, выкину и он пропадает, но пока он в руке я могу бесконечно его использовать.... странно
 

VeniVidiVici

Санта Барбарис
327
15
198
Сразу бы так и сказал. Да, тут без пакетов не обойтись, ибо сервер просто не знает, че там у игрока нажато.
Проблема с удалением предмета после юза? Если да, то
Java:
//на сервере
ItemStack current = player.getCurrentEquippedItem();
current.stackSize--;
if(current.stackSize==0)
    player.destroyCurrentEquippedItem();
Я конечно извиняюсь, но если вы с клиента отправляете пакет на сервер и обрабатываете его на сервере, как клиент то узнает, что вы удаляете итем? Хотя я может неправильно понял детали.
 
917
22
332
Некоторые вещи майнкрафт синхронизируется сам (автоматически). Но вообще, здесь я в автоматизме неуверен, по-моему удаление предмета всё же должно вызываться с обоих сторон. Разумно будет попробовать. выполнить удаление на клиенте, и затем на сервере, после приёма пакета (причём убедится, что удаляешь у игрока который использовал, а не на котором использовали)
Java:
ItemStack current = player.getCurrentEquippedItem();
current.stackSize--;
if(current.stackSize==0)
    player.destroyCurrentEquippedItem();
 
7,099
324
1,509
Инвентари игроков по идее синхронизируются при каждом изменении
 
Сверху