- 126
- 6
- 33
Возможно всё предельно просто и это уже было, но... краш при отправке пакета...
Код:
[00:57:42] [Client thread/ERROR] [FML]: Exception caught during firing event cpw.mods.fml.common.gameevent.InputEvent$KeyInputEvent@15a38f3e:
java.lang.NullPointerException
at by.Sasha.AtisotEffect.Client.KeyHandlerClient.sendKeyControlsPacket(KeyHandlerClient.java:101) ~[KeyHandlerClient.class:?]
at by.Sasha.AtisotEffect.Client.KeyHandlerClient.onKeyInput(KeyHandlerClient.java:88) ~[KeyHandlerClient.class:?]
at cpw.mods.fml.common.eventhandler.ASMEventHandler_6_KeyHandlerClient_onKeyInput_KeyInputEvent.invoke(.dynamic) ~[?:?]
at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) ~[ASMEventHandler.class:?]
at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) [EventBus.class:?]
at cpw.mods.fml.common.FMLCommonHandler.fireKeyInput(FMLCommonHandler.java:540) [FMLCommonHandler.class:?]
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1964) [Minecraft.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_151]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_151]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_151]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_151]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
at GradleStart.main(Unknown Source) [start/:?]
Java:
public class KeyHandlerClient {
public static KeyBinding strafeUP;
public static KeyBinding strafeDOWN;
public static KeyBinding strafeLEFT;
public static KeyBinding strafeRIGHT;
public static KeyBinding accelerateFORWARD;
public static KeyBinding accelerateBACK;
public static KeyBinding yawLEFT;
public static KeyBinding yawRIGHT;
public static KeyBinding pitchUP;
public static KeyBinding pitchDOWN;
public static KeyBinding EXIT;
public static KeyBinding DOORS;
private static Minecraft mc = Minecraft.getMinecraft();
public KeyHandlerClient()
{
KeyHandlerClient.strafeUP = KeyHandlerClient.mc.gameSettings.keyBindJump;
KeyHandlerClient.strafeDOWN = KeyHandlerClient.mc.gameSettings.keyBindSneak;
KeyHandlerClient.strafeLEFT = KeyHandlerClient.mc.gameSettings.keyBindLeft;
KeyHandlerClient.strafeRIGHT = KeyHandlerClient.mc.gameSettings.keyBindRight;
KeyHandlerClient.accelerateFORWARD = KeyHandlerClient.mc.gameSettings.keyBindForward;
KeyHandlerClient.accelerateBACK = KeyHandlerClient.mc.gameSettings.keyBindBack;
KeyHandlerClient.yawLEFT = new KeyBinding("key.sasha.yawLEFT", Keyboard.KEY_LEFT, constants.ACK);
KeyHandlerClient.yawRIGHT = new KeyBinding("key.sasha.yawRIGHT", Keyboard.KEY_RIGHT, constants.ACK);
KeyHandlerClient.pitchUP = new KeyBinding("key.sasha.yawRIGHT", Keyboard.KEY_UP, constants.ACK);
KeyHandlerClient.pitchDOWN = new KeyBinding("key.sasha.yawRIGHT", Keyboard.KEY_DOWN, constants.ACK);
KeyHandlerClient.EXIT = new KeyBinding("key.sasha.EXIT", Keyboard.KEY_BACK, constants.ACK);
KeyHandlerClient.DOORS = new KeyBinding("key.sasha.DOORS", Keyboard.KEY_O, constants.ACK);
}
@SubscribeEvent
public void onKeyInput(InputEvent.KeyInputEvent event) {
if(!Minecraft.getMinecraft().ingameGUI.getChatGUI().getChatOpen()) {
if (strafeUP.isPressed()) {
sendKeyControlsPacket(0);
}
if (strafeDOWN.isPressed()) {
sendKeyControlsPacket(1);
}
if (strafeLEFT.isPressed()) {
sendKeyControlsPacket(2);
}
if (strafeRIGHT.isPressed()) {
sendKeyControlsPacket(3);
}
if (accelerateFORWARD.isPressed()) {
sendKeyControlsPacket(4);
}
if (accelerateBACK.isPressed()) {
sendKeyControlsPacket(5);
}
if (yawLEFT.isPressed()) {
sendKeyControlsPacket(6);
}
if (yawRIGHT.isPressed()) {
sendKeyControlsPacket(7);
}
if (pitchUP.isPressed()) {
sendKeyControlsPacket(8);
}
if (pitchDOWN.isPressed()) {
sendKeyControlsPacket(9); //88
}
if (EXIT.isPressed()) {
sendKeyControlsPacket(10);
}
if (DOORS.isPressed()) {
sendKeyControlsPacket(11);
}
}
}
private static void sendKeyControlsPacket(int key)
{
AtisotEffect.keyChannelTest.sendToServer(new PacketKeyPress(key)); //101
}
Java:
public class PacketKeyPress implements IMessage {
/** The key that was pressed. */
int key;
public PacketKeyPress() {}
public PacketKeyPress(int key) {
this.key = key;
}
@Override
public void fromBytes(ByteBuf bbuf) {
this.key = bbuf.readInt();
}
@Override
public void toBytes(ByteBuf bbuf) {
bbuf.writeInt(this.key);
}
public static class Handler implements IMessageHandler<PacketKeyPress, IMessage> {
@Override
public IMessage onMessage(PacketKeyPress message, MessageContext context) {
Entity ridingEntity = context.getServerHandler().playerEntity.ridingEntity;
if (ridingEntity != null) {
if (ridingEntity instanceof EntityShip1) {
((EntityShip1) ridingEntity).pressKey(message.key);
}
}
return null;
}
}
}