@@ -358,7 +358,13 @@ private void sendPacketInternal(
358
358
+ this .identifier + "found" );
359
359
}
360
360
361
- if (this .protocolSide .isAcceptingDirection (protocolPacket .direction )) {
361
+ Direction direction = protocolPacket .direction ;
362
+ if (direction != Direction .BOTH && this .protocolSide .isAcceptingDirection (direction )) {
363
+ this .protocolService .logger ().warn (
364
+ "Attempted to send packet " + packet .getClass ().getSimpleName ()
365
+ + " in the wrong direction (packet direction: " + direction + ", protocol side: "
366
+ + this .protocolSide + ")"
367
+ );
362
368
return ;
363
369
}
364
370
@@ -383,6 +389,61 @@ private void sendPacketInternal(
383
389
this .protocolService .afterPacketSent (this , packet , recipient );
384
390
}
385
391
392
+ private static class ProtocolPacket {
393
+
394
+ private static final UnsafeProvider UNSAFE_PROVIDER = new UnsafeProvider ();
395
+
396
+ private final int id ;
397
+ private final Class <? extends Packet > packet ;
398
+ private final Set <PacketHandler > handlers ;
399
+ private final Direction direction ;
400
+
401
+ private boolean fromConstructor = true ;
402
+ private Constructor <? extends Packet > constructor ;
403
+
404
+ private ProtocolPacket (int id , Class <? extends Packet > packet , Direction direction ) {
405
+ this .id = id ;
406
+ this .packet = packet ;
407
+ this .direction = direction ;
408
+ this .handlers = new HashSet <>();
409
+ }
410
+
411
+ private Packet createPacket () throws Exception {
412
+ if (this .constructor == null && this .fromConstructor ) {
413
+ try {
414
+ this .constructor = this .packet .getDeclaredConstructor ();
415
+ this .constructor .setAccessible (true );
416
+ this .fromConstructor = !this .constructor .isAnnotationPresent (
417
+ OnlyWriteConstructor .class
418
+ );
419
+ } catch (Exception e ) {
420
+ this .fromConstructor = false ;
421
+ }
422
+ }
423
+
424
+ if (this .fromConstructor ) {
425
+ return this .constructor .newInstance ();
426
+ }
427
+
428
+ return (Packet ) UNSAFE_PROVIDER .unsafe .allocateInstance (this .packet );
429
+ }
430
+ }
431
+
432
+ private static final class UnsafeProvider {
433
+
434
+ private final Unsafe unsafe ;
435
+
436
+ private UnsafeProvider () {
437
+ try {
438
+ Field field = Unsafe .class .getDeclaredField ("theUnsafe" );
439
+ field .setAccessible (true );
440
+ this .unsafe = (Unsafe ) field .get (null );
441
+ } catch (Exception exception ) {
442
+ throw new IllegalStateException ("Failed to get unsafe instance" , exception );
443
+ }
444
+ }
445
+ }
446
+
386
447
private final class AwaitingResponse {
387
448
388
449
private final UUID recipient ;
@@ -457,59 +518,4 @@ public String toString() {
457
518
"responseCallback=" + this .responseCallback + ']' ;
458
519
}
459
520
}
460
-
461
- private static class ProtocolPacket {
462
-
463
- private static final UnsafeProvider UNSAFE_PROVIDER = new UnsafeProvider ();
464
-
465
- private final int id ;
466
- private final Class <? extends Packet > packet ;
467
- private final Set <PacketHandler > handlers ;
468
- private final Direction direction ;
469
-
470
- private boolean fromConstructor = true ;
471
- private Constructor <? extends Packet > constructor ;
472
-
473
- private ProtocolPacket (int id , Class <? extends Packet > packet , Direction direction ) {
474
- this .id = id ;
475
- this .packet = packet ;
476
- this .direction = direction ;
477
- this .handlers = new HashSet <>();
478
- }
479
-
480
- private Packet createPacket () throws Exception {
481
- if (this .constructor == null && this .fromConstructor ) {
482
- try {
483
- this .constructor = this .packet .getDeclaredConstructor ();
484
- this .constructor .setAccessible (true );
485
- this .fromConstructor = !this .constructor .isAnnotationPresent (
486
- OnlyWriteConstructor .class
487
- );
488
- } catch (Exception e ) {
489
- this .fromConstructor = false ;
490
- }
491
- }
492
-
493
- if (this .fromConstructor ) {
494
- return this .constructor .newInstance ();
495
- }
496
-
497
- return (Packet ) UNSAFE_PROVIDER .unsafe .allocateInstance (this .packet );
498
- }
499
- }
500
-
501
- private static final class UnsafeProvider {
502
-
503
- private final Unsafe unsafe ;
504
-
505
- private UnsafeProvider () {
506
- try {
507
- Field field = Unsafe .class .getDeclaredField ("theUnsafe" );
508
- field .setAccessible (true );
509
- this .unsafe = (Unsafe ) field .get (null );
510
- } catch (Exception exception ) {
511
- throw new IllegalStateException ("Failed to get unsafe instance" , exception );
512
- }
513
- }
514
- }
515
521
}
0 commit comments