нажатие клавиши

Версия Minecraft
1.7.10
38
2
Всем привет.
Сразу вопрос.
Как сделать так что-бы при нажатие сочетании клавишь. Выдавался предмет.
Нужно регистрировать сочетание клавиш. 


ClientRegistry.registerKeyBinding()


Этим? и как? Исправте если не так но как я понял это вод так: (на примере клавиша "H")

public static KeyBinding Kay_H;

@Mod.EventHandler

public void preInit(FMLPreInitializationEvent event) {


ClientRegistry.registerKeyBinding(Kay_H);

}

Но как потом сделать так что-бы при нажатии клавиши появлялся предмет я без понятия.






Kanto написал(а):
Всем привет.
Сразу вопрос.
Как сделать так что-бы при нажатие сочетании клавишь. Выдавался предмет.
Нужно регистрировать сочетание клавиш. 


ClientRegistry.registerKeyBinding()


Этим? и как? Исправте если не так но как я понял это вод так: (на примере клавиша "H")

public static KeyBinding Kay_H;

@Mod.EventHandler

public void preInit(FMLPreInitializationEvent event) {


ClientRegistry.registerKeyBinding(Kay_H);

}

Но как потом сделать так что-бы при нажатии клавиши появлялся предмет я без понятия.




Если все таки я слепой урод и не увидел урока, то пожалуйста подскажите урок
 
317
10
В тик эвенте(на стороне клиента проверяешь ли нажата кнопка, потом шлешь пакет серверу), проверяешь ли есть свободный слот, добавляешь itemStack в инвентарь(player.inventory).
Туториалы про эвенты, пакеты, проверку слота есть на форуме(одну из тем даже я создавал и там есть ответ). А добавить itemSack - player.inventory.addItemStackToInventory(new ItemStack(Items.apple, 10));
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Dahaka написал(а):
Только не отсылай пакеты с периодичностью 20 штук в секунду :)
По-моему нереально нажать кнопку 20 раз за секунду :D
KeyInputEvent же срабатывает только при нажатии. Делать подобное в тик хандлере не нужно.
 
7,099
324
1,509
KeyInputEvent
 
2,505
81
397
Это обработчик ивента. Если не знаешь, как с ним работать, топай в учебник
Код:
@SubscribeEvent
public void qweqwe(KeyInputEvent event)
{
    if (Minecraft.getMinecraft().inGameHasFocus &&
        МестоГдеОставилKeyBinding.назвыниеПеременной.getIsKeyPressed()) {

    }
}


Если что, это онли клиентский ивент
 
667
7
2
38
2
Я наконец роздуплился и решил сделать отдельный класс KeyBindings. Где указал вод это 
Код:
package assets.potter.src;

import cpw.mods.fml.client.registry.ClientRegistry;
import net.java.games.input.Keyboard;
import net.minecraft.client.settings.KeyBinding;

public class KeyBindings {
 
 public static KeyBinding TestClick;
 
 private static String pottermod = "pottercraft";
 
 public static void init() {
 
 TestClick =  new KeyBinding("TestClick", Keyboard.Key_F, pottermod);
 ClientRegistry.registerKeyBinding(TestClick);
 
 
 
 }

}

Но у меня горит красным Key_F. Я так понял я должен где-то забиндить этот Key_F но где?
 
38
2
timaxa007 написал(а):
Keyboard не тот импортировал.


Код:
import org.lwjgl.input.Keyboard;




Все ровно горит красным


А понял. Уже не горит


Вот метод:
Код:
 @SubscribeEvent
 public void onKeyInput(InputEvent.KeyInputEvent event, ItemStack is, World world, EntityPlayer player)
 {
    if (Minecraft.getMinecraft().inGameHasFocus && KeyBindings.TestClick.getIsKeyPressed()) {
     
     player.inventory.addItemStackToInventory(new ItemStack(Items.apple, 10));
     
     

    }
 }

Когда пытаюсь запустить майнкрафт, крашь и ругает регистрацию:
[font=Monaco, Consolas, Courier, monospace] FMLCommonHandler.instance().bus().[/font][font=Monaco, Consolas, Courier, monospace]register[/font][font=Monaco, Consolas, Courier, monospace]([/font][font=Monaco, Consolas, Courier, monospace]new[/font][font=Monaco, Consolas, Courier, monospace] EventTestClick());[/font]

[font=Monaco, Consolas, Courier, monospace]Я так понял я использую не ту шину?





[/font]
 
1,239
2
24
В инит
Код:
ClientRegistry.registerKeyBinding(KeyHandler.openGui);

KeyHandler.java
Код:
public static KeyBinding openGui = new KeyBinding("Name1", Keyboard.KEY_X, "Category");

@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onKeyInput(InputEvent.KeyInputEvent event)
{
    if (rld.isPressed()) //если нажата
    {
        //отсылаешь пакет на серв,в котором выдаешь предмет
    }
}
}

тема с пакетами была, ищи в поиске по форуму  IMessage

всё,готово
 
Сверху