[Решено] Игрок жмёт кнопку

Статус
В этой теме нельзя размещать новые ответы.

AlexSocol

Золотая лига
Сообщения
1,951
Лучшие ответы
66
Симпатии
183
#1
Снова здрасти :D
Подскажите, пожалуйста, как проверить, что определённый EntityPlayer нажимает нужную кнопку (ту, что среди Minecraft.getMinecraft().gameSettings.keyBind)? Вроде даже можно на клиенте проверять.
 

timaxa007

Команда форума
Сообщения
5,499
Лучшие ответы
360
Симпатии
517
#2
Отсылая на сервер, что игрок нажал ту или иную кнопку. И проверяется из клиента, какая кнопка нажата, а не от игрока.
Можно KeyBinding.keybindArray (keybindArray приватная переменная) проверяя циклом на getIsKeyPressed(), т.е. нажата-ли клавиша. И отправляй что надо, не забывая что на одну кнопку может стоять два бинда.
 

AlexSocol

Золотая лига
Сообщения
1,951
Лучшие ответы
66
Симпатии
183
#3
А как понять, какой из игроков её нажал? В каком классе этот метод или что?
 

Dahaka

Золотая лига
Сообщения
2,411
Лучшие ответы
82
Симпатии
306
#4
Внутри пакета игрок есть.
 

AlexSocol

Золотая лига
Сообщения
1,951
Лучшие ответы
66
Симпатии
183
#5
Можешь, пожалуйста, пример привести
 

timaxa007

Команда форума
Сообщения
5,499
Лучшие ответы
360
Симпатии
517
#6
Я же писал. Если не понял, то постараюсь более понятно объяснить. KeyBinding и Keyboard это клиентские классы.
Нужно отправлять пакеты, о том какую кнопку нажал, как-бы клиентский игрок. Потом обрабатываешь пакет, из пакета достаешь серверного игрока.
Ну а дальше сам решай, что будешь делать с этой обработкой.
[merge_posts_bbcode]Добавлено: 02.07.2016 15:19:17[/merge_posts_bbcode]

Код:
@Override
public IMessage onMessage(REQ packet, MessageContext message) {
    //int id = packet.id;
    //boolean state = packet.state;
    EntityPlayerMP playerMP = message.getServerHandler().playerEntity;
    return null;
}
[merge_posts_bbcode]Добавлено: 02.07.2016 15:21:21[/merge_posts_bbcode]

Я не знаю каким кассами для отправки и приёма пакетов ты будешь пользоваться, но пример показал.
 

AlexSocol

Золотая лига
Сообщения
1,951
Лучшие ответы
66
Симпатии
183
#7

[merge_posts_bbcode]Добавлено: 02.07.2016 15:33:58[/merge_posts_bbcode]

Есть ли хоть где-то нормальный туториал по этим пакетам? Что, где, как, куда и зачем.
Потому что из кода выше я понял только извлечение игрока. А кнопка где? И что за переменные? И зачем они нужны? И как вообще эти пакеты отправлять, принимать и где это делать? Искал я, искал, все говорят "Отправь пакет." А что за пакет, как создать, что туда засунуть итп - никто не пишет. И как другим понять, если знающие полностью не описывают?
 

Dahaka

Золотая лига
Сообщения
2,411
Лучшие ответы
82
Симпатии
306
#8
Только не говори, что ты до сих пор не умеешь отправлять пакеты...
[merge_posts_bbcode]Добавлено: 02.07.2016 16:44:01[/merge_posts_bbcode]

Тем жи миллион было
 

timaxa007

Команда форума
Сообщения
5,499
Лучшие ответы
360
Симпатии
517
#9
Я пользуюсь вторым способом.
Я не знаю для чего именно тебе нужно отправлять нажатую кнопку. Я не знаю нужно-ли тебе отправлять значения от KeyBinding, или лучше надо Keyboard, или надо просто отправлять значение от Keyboard по имеющийся клавиш в KeyBinding.
Каждый может по своему сделать, цели могут быть разные.
 

XuPuPG

Каменная лига
Сообщения
1,234
Лучшие ответы
2
Симпатии
9
#10
с пакетами все просто если IMessage. это просто действие на стороне сервера.
 

AlexSocol

Золотая лига
Сообщения
1,951
Лучшие ответы
66
Симпатии
183
#11
Я сижу в танке. Я жму кнопку, на которую привязано обычное движение вперёд (W) - модификатор скорости танка (моя переменная, не motionX/Y/Z!) увеличивается.
Я жму назад - модификатор уменьшается.
Я удерживаю кнопку атаки - танк заряжается и стреляет.
Вот что мне нужно.
[merge_posts_bbcode]Добавлено: 02.07.2016 16:05:19[/merge_posts_bbcode]

За ссылки спасибо, сейчас посмотрю.

[merge_posts_bbcode]Добавлено: 02.07.2016 16:06:36[/merge_posts_bbcode]

Dahaka написал(а):
Только не говори, что ты до сих пор не умеешь отправлять пакеты...
Не было нужды. Единственная отправка - из NBT тайлэнтити на SkyProvider моего мира (сервер - клиент). И код без объяснений мне дал Wilah. Так что сделать-то я сделал, но уметь - не умею.
 

wilah

Каменная лига
Сообщения
1,138
Лучшие ответы
6
Симпатии
1
#12
Там тайл был. Лично я, пакеты делаю через эвенты. Мне так удобнее :) а ещё, оказывается, ненужный ByteBuf можно удалить методом release(хотя в джаве нет ручного выделения памяти)
 

Dahaka

Золотая лига
Сообщения
2,411
Лучшие ответы
82
Симпатии
306
#14
Передавай в пакете число 0-3. И в хендлере уже что-нибудь делай, как вариант.
 

AlexSocol

Золотая лига
Сообщения
1,951
Лучшие ответы
66
Симпатии
183
#16
Да, всё работает, всё хорошо, огромное спасибо за менее непонятный код, чем везде :D
Тему можно закрывать
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху