aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0295-Missing-Entity-API.patch
blob: 582dafaea4036655cf70ed53e85d30e8cc30520f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
Date: Fri, 28 May 2021 21:06:59 -0400
Subject: [PATCH] Missing Entity API

Co-authored-by: Nassim Jahnke <nassim@njahnke.dev>
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
Co-authored-by: William Blake Galbreath <blake.galbreath@gmail.com>
Co-authored-by: SoSeDiK <mrsosedik@gmail.com>
Co-authored-by: booky10 <boooky10@gmail.com>
Co-authored-by: Amin <amin.haddou@frg.wwschool.de>
Co-authored-by: TrollyLoki <trollyloki@gmail.com>
Co-authored-by: FireInstall <kettnerl@hu-berlin.de>
Co-authored-by: maxcom1 <46265094+maxcom1@users.noreply.github.com>

diff --git a/src/main/java/io/papermc/paper/entity/SchoolableFish.java b/src/main/java/io/papermc/paper/entity/SchoolableFish.java
new file mode 100644
index 0000000000000000000000000000000000000000..39ad7d283609d7e427a2ab35b6fad839e032fe92
--- /dev/null
+++ b/src/main/java/io/papermc/paper/entity/SchoolableFish.java
@@ -0,0 +1,47 @@
+package io.papermc.paper.entity;
+
+import org.bukkit.entity.Fish;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Represents a fish that can school with other fish.
+ */
+public interface SchoolableFish extends Fish {
+
+    /**
+     * Forces this fish to follow the given fish.
+     *
+     * @param leader fish to follow
+     */
+    void startFollowing(@NotNull SchoolableFish leader);
+
+    /**
+     * Causes the fish to stop following their current
+     * leader.
+     */
+    void stopFollowing();
+
+    /**
+     * Gets the amount of fish currently following this fish.
+     *
+     * @return school size
+     */
+    int getSchoolSize();
+
+    /**
+     * Gets the maximum number of fish that will naturally follow this fish.
+     *
+     * @return max school size
+     */
+    int getMaxSchoolSize();
+
+    /**
+     * Gets the fish that this entity is currently following.
+     *
+     * @return following fish
+     */
+    @Nullable
+    SchoolableFish getSchoolLeader();
+
+}
diff --git a/src/main/java/org/bukkit/entity/AbstractHorse.java b/src/main/java/org/bukkit/entity/AbstractHorse.java
index 0d88dce9978243a1f995c5fb448c5d71b01136eb..8b1048c94dffd058eb9fd9144f7f59fc9bd219ad 100644
--- a/src/main/java/org/bukkit/entity/AbstractHorse.java
+++ b/src/main/java/org/bukkit/entity/AbstractHorse.java
@@ -106,17 +106,71 @@ public interface AbstractHorse extends Vehicle, InventoryHolder, Tameable {
      * Gets whether the horse is currently grazing hay.
      *
      * @return true if eating hay
+     * @deprecated use {@link #isEatingGrass()}, this name is incorrect
      */
+    @Deprecated // Paper - Horse API
     boolean isEatingHaystack();
 
     /**
      * Sets whether the horse is grazing hay.
      *
      * @param eatingHaystack new hay grazing status
+     * @deprecated use {@link #setEatingGrass(boolean)}, this name is incorrect
      */
+    @Deprecated // Paper - Horse API
     void setEatingHaystack(boolean eatingHaystack);
 
     @NotNull
     @Override
     public AbstractHorseInventory getInventory();
+
+    // Paper start - Horse API
+    /**
+     * Gets if a horse is in their eating grass animation.
+     *
+     * @return eating grass animation is active
+     */
+    public boolean isEatingGrass();
+
+    /**
+     * Sets if a horse is in their eating grass animation.
+     *
+     * <p>When true, the horse will lower its neck.</p>
+     *
+     * @param eating eating grass animation is active
+     */
+    public void setEatingGrass(boolean eating);
+
+    /**
+     * Gets if a horse is in their rearing animation.
+     *
+     * @return rearing animation is active
+     */
+    public boolean isRearing();
+
+    /**
+     * Sets if a horse is in their rearing animation.
+     *
+     * <p>When true, the horse will stand on its hind legs.</p>
+     *
+     * @param rearing rearing animation is active
+     */
+    public void setRearing(boolean rearing);
+
+    /**
+     * Gets if a horse is in their eating animation.
+     *
+     * @return eating animation is active
+     */
+    public boolean isEating();
+
+    /**
+     * Sets if a horse is in their eating animation.
+     *
+     * <p>When true, the horse will bob its head.</p>
+     *
+     * @param eating eating animation is active
+     */
+    public void setEating(boolean eating);
+    // Paper end - Horse API
 }
diff --git a/src/main/java/org/bukkit/entity/AreaEffectCloud.java b/src/main/java/org/bukkit/entity/AreaEffectCloud.java
index 3c65da551aca046986fc0302de3ccc149ee9526c..7f989f2025d16b368829c45f08b8cc8537c99e13 100644
--- a/src/main/java/org/bukkit/entity/AreaEffectCloud.java
+++ b/src/main/java/org/bukkit/entity/AreaEffectCloud.java
@@ -239,4 +239,20 @@ public interface AreaEffectCloud extends Entity {
      * @param source the {@link ProjectileSource} that threw the LingeringPotion
      */
     public void setSource(@Nullable ProjectileSource source);
+
+    // Paper start - owner API
+    /**
+     * Get the entity UUID for the owner of this area effect cloud.
+     *
+     * @return the entity owner uuid or null
+     */
+    @Nullable java.util.UUID getOwnerUniqueId();
+
+    /**
+     * Sets the entity UUID for the owner of this area effect cloud.
+     *
+     * @param ownerUuid the entity owner uuid or null to clear
+     */
+    void setOwnerUniqueId(@Nullable java.util.UUID ownerUuid);
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Bat.java b/src/main/java/org/bukkit/entity/Bat.java
index bd73f22ef7e79e1ade69e860e7ae1d3dcd6fc858..b9f8b14d90a758672642222675d2f5664d4f67b4 100644
--- a/src/main/java/org/bukkit/entity/Bat.java
+++ b/src/main/java/org/bukkit/entity/Bat.java
@@ -24,4 +24,23 @@ public interface Bat extends Ambient {
      * @param state the new state
      */
     void setAwake(boolean state);
+
+    // Paper start
+    /**
+     * Gets the location that this bat is currently trying to move towards.
+     *
+     * @return target location, or null if it's going to find a new location
+     */
+    @org.jetbrains.annotations.Nullable
+    org.bukkit.Location getTargetLocation();
+
+    /**
+     * Sets the location that this bat is currently trying to move towards.
+     * <p>
+     * This can be set to null to cause the bat to recalculate its target location
+     *
+     * @param location location to move towards (world is ignored, will always use the entity's world)
+     */
+    void setTargetLocation(@org.jetbrains.annotations.Nullable org.bukkit.Location location);
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Bee.java b/src/main/java/org/bukkit/entity/Bee.java
index adb20a9abba33c32d553f620fa82b27dff64ab5f..1f6702b0de00b87dbed7f6d93e911655e8667b0b 100644
--- a/src/main/java/org/bukkit/entity/Bee.java
+++ b/src/main/java/org/bukkit/entity/Bee.java
@@ -93,4 +93,56 @@ public interface Bee extends Animals {
      * @param ticks Ticks the bee cannot enter a hive for
      */
     void setCannotEnterHiveTicks(int ticks);
+
+    // Paper start
+    /**
+     * Sets the override for if the bee is currently rolling.
+     *
+     * @param rolling is rolling, or unset for vanilla behavior
+     */
+    void setRollingOverride(@org.jetbrains.annotations.NotNull net.kyori.adventure.util.TriState rolling);
+
+    /**
+     * Gets the plugin set override for if the bee is currently rolling.
+     *
+     * @return plugin set rolling override
+     */
+    @org.jetbrains.annotations.NotNull
+    net.kyori.adventure.util.TriState getRollingOverride();
+
+    /**
+     * Gets if the bee is currently rolling.
+     *
+     * @return is rolling
+     */
+    boolean isRolling();
+
+    /**
+     * Sets how many crops this bee has grown since it last
+     * pollinated.
+     * @param crops number of crops
+     */
+    void setCropsGrownSincePollination(int crops);
+
+    /**
+     * Gets how many crops this bee has grown since it last
+     * pollinated.
+     * @return number of crops
+     */
+    int getCropsGrownSincePollination();
+
+    /**
+     * Sets how many ticks this bee has gone without pollinating.
+     *
+     * @param ticks number of ticks
+     */
+    void setTicksSincePollination(int ticks);
+
+    /**
+     * Gets how many ticks this bee has gone without pollinating
+     *
+     * @return number of ticks
+     */
+    int getTicksSincePollination();
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Cat.java b/src/main/java/org/bukkit/entity/Cat.java
index d1327761a4b95eba97877f1991fc19b298b48eaf..0534fbc228f64cf3b361ab097d9b88212bdb0f36 100644
--- a/src/main/java/org/bukkit/entity/Cat.java
+++ b/src/main/java/org/bukkit/entity/Cat.java
@@ -68,4 +68,36 @@ public interface Cat extends Tameable, Sittable {
             return key;
         }
     }
+
+    // Paper start - More cat api
+    /**
+     * Sets if the cat is lying down.
+     * This is visual and does not affect the behaviour of the cat.
+     *
+     * @param lyingDown whether the cat should lie down
+     */
+    public void setLyingDown(boolean lyingDown);
+
+    /**
+     * Gets if the cat is lying down.
+     *
+     * @return whether the cat is lying down
+     */
+    public boolean isLyingDown();
+
+    /**
+     * Sets if the cat has its head up.
+     * This is visual and does not affect the behaviour of the cat.
+     *
+     * @param headUp head is up
+     */
+    public void setHeadUp(boolean headUp);
+
+    /**
+     * Gets if the cat has its head up.
+     *
+     * @return head is up
+     */
+    public boolean isHeadUp();
+    // Paper end - More cat api
 }
diff --git a/src/main/java/org/bukkit/entity/Chicken.java b/src/main/java/org/bukkit/entity/Chicken.java
index cb3ec6ef6c38c2071cb6ad91da094fca2de8d5c6..b4c1a262602d4ca5ffc9fcc21d6aa79af8c040a7 100644
--- a/src/main/java/org/bukkit/entity/Chicken.java
+++ b/src/main/java/org/bukkit/entity/Chicken.java
@@ -3,4 +3,35 @@ package org.bukkit.entity;
 /**
  * Represents a Chicken.
  */
-public interface Chicken extends Animals {}
+// Paper start
+public interface Chicken extends Animals {
+
+    /**
+     * Gets if this chicken was spawned as a chicken jockey.
+     *
+     * @return is chicken jockey
+     */
+    boolean isChickenJockey();
+
+    /**
+     * Sets if this chicken was spawned as a chicken jockey.
+     *
+     * @param isChickenJockey is chicken jockey
+     */
+    void setIsChickenJockey(boolean isChickenJockey);
+
+    /**
+     * Gets the number of ticks till this chicken lays an egg.
+     *
+     * @return ticks till the chicken lays an egg
+     */
+    int getEggLayTime();
+
+    /**
+     * Sets the number of ticks till this chicken lays an egg.
+     *
+     * @param eggLayTime ticks till the chicken lays an egg
+     */
+    void setEggLayTime(int eggLayTime);
+}
+// Paper end
diff --git a/src/main/java/org/bukkit/entity/Cod.java b/src/main/java/org/bukkit/entity/Cod.java
index 191ce6c0e32ab3d05b1376e0fa56d1292c2d442c..8de09075e14a08a6c68f9c24e8960cc04a018036 100644
--- a/src/main/java/org/bukkit/entity/Cod.java
+++ b/src/main/java/org/bukkit/entity/Cod.java
@@ -4,4 +4,4 @@ package org.bukkit.entity;
 /**
  * Represents a cod fish.
  */
-public interface Cod extends Fish { }
+public interface Cod extends io.papermc.paper.entity.SchoolableFish { } // Paper - Schooling Fish API
diff --git a/src/main/java/org/bukkit/entity/Enderman.java b/src/main/java/org/bukkit/entity/Enderman.java
index 58191017244f3949f6174fb108e3a245738a53c4..61672c6faf94aa497145aadd634bb10103c7b05a 100644
--- a/src/main/java/org/bukkit/entity/Enderman.java
+++ b/src/main/java/org/bukkit/entity/Enderman.java
@@ -86,4 +86,36 @@ public interface Enderman extends Monster {
      * @return true if the teleport succeeded.
      */
     public boolean teleportTowards(@NotNull Entity entity);
+
+    // Paper start
+    /**
+     * Returns whether the enderman is screaming/angry.
+     *
+     * @return whether the enderman is screaming
+     */
+    boolean isScreaming();
+
+    /**
+     * Sets whether the enderman is screaming/angry.
+     *
+     * @param screaming whether the enderman is screaming
+     */
+    void setScreaming(boolean screaming);
+
+    /**
+     * Returns whether the enderman has been stared at.
+     * If set to true, players will hear an ambient sound.
+     *
+     * @return whether the enderman has been stared at
+     */
+    boolean hasBeenStaredAt();
+
+    /**
+     * Sets whether the enderman has been stared at.
+     * If set to true, players will hear an ambient sound.
+     *
+     * @param hasBeenStaredAt whether the enderman has been stared at
+     */
+    void setHasBeenStaredAt(boolean hasBeenStaredAt);
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Endermite.java b/src/main/java/org/bukkit/entity/Endermite.java
index 9e7f42caab1204036f4203354c115fd40c6def92..138d2530de2410f4a9424dabd3e5ce0cd1c1dcd2 100644
--- a/src/main/java/org/bukkit/entity/Endermite.java
+++ b/src/main/java/org/bukkit/entity/Endermite.java
@@ -23,4 +23,22 @@ public interface Endermite extends Monster {
      */
     @Deprecated
     void setPlayerSpawned(boolean playerSpawned);
+    // Paper start
+    /**
+     * Sets how many ticks this endermite has been living for.
+     * If this value is greater than 2400, this endermite will despawn.
+     *
+     * @param ticks lifetime ticks
+     */
+    void setLifetimeTicks(int ticks);
+
+    /**
+     * Gets how long this endermite has been living for.
+     * This value will tick up while {@link LivingEntity#getRemoveWhenFarAway()} is false.
+     * If this value is greater than 2400, this endermite will despawn.
+     *
+     * @return lifetime ticks
+     */
+    int getLifetimeTicks();
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
index c7d6a328def83619dca9b6122aeb5870e4585e70..795e799fec7cfd65a0e08bb3f941148d85ff4c3b 100644
--- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -289,6 +289,40 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
      */
     boolean isFrozen();
 
+    // Paper start - missing entity api
+    /**
+     * Sets whether the entity is invisible or not.
+     * <p>
+     * This setting is undefined for non-living entities like boats or paintings.
+     * Non-living entities that are marked as invisible through this method may e.g. only hide their shadow.
+     * To hide such entities from players completely, see {@link Player#hideEntity(org.bukkit.plugin.Plugin, Entity)}.
+     *
+     * @param invisible If the entity is invisible
+     */
+    void setInvisible(boolean invisible); // Paper - moved up from LivingEntity
+
+    /**
+     * Gets whether the entity is invisible or not.
+     *
+     * @return Whether the entity is invisible
+     */
+    boolean isInvisible(); // Paper - moved up from LivingEntity
+
+    /**
+     * Sets this entities no physics status.
+     *
+     * @param noPhysics boolean indicating if the entity should not have physics.
+     */
+    void setNoPhysics(boolean noPhysics);
+
+    /**
+     * Gets if this entity has no physics.
+     *
+     * @return true if the entity does not have physics.
+     */
+    boolean hasNoPhysics();
+    // Paper end - missing entity api
+
     /**
      * Mark the entity's removal.
      *
diff --git a/src/main/java/org/bukkit/entity/Fireball.java b/src/main/java/org/bukkit/entity/Fireball.java
index 7a44707f2307dc4dbfea4de3f4baf3cc0490dc93..d0e82102425e54274be9c4769634d754319d6196 100644
--- a/src/main/java/org/bukkit/entity/Fireball.java
+++ b/src/main/java/org/bukkit/entity/Fireball.java
@@ -23,4 +23,32 @@ public interface Fireball extends Projectile, Explosive {
     @NotNull
     public Vector getDirection();
 
+    // Paper start - Expose power on fireball projectiles
+    /**
+     * {@inheritDoc}
+     * <p>
+     * Note: For fireball entities, their movement is also controlled by their power.
+     *
+     * @param velocity New velocity to travel with
+     * @see #setPower(Vector)
+     */
+    @Override
+    public void setVelocity(@NotNull Vector velocity);
+
+    /**
+     * Sets the power of a fireball. The power determines the direction and magnitude of its acceleration.
+     *
+     * @param power the power
+     */
+    public void setPower(@NotNull Vector power);
+
+    /**
+     * Gets the power of a fireball. The power determines the direction and magnitude of its acceleration.
+     *
+     * @return the power
+     */
+    @NotNull
+    public Vector getPower();
+    // Paper end - Expose power on fireball projectiles
+
 }
diff --git a/src/main/java/org/bukkit/entity/Fox.java b/src/main/java/org/bukkit/entity/Fox.java
index c61a473453f33f9d10c330fc46cfa9d52251fe49..473a7e36ad64f866d1d2e09e2ecb2e9881668faf 100644
--- a/src/main/java/org/bukkit/entity/Fox.java
+++ b/src/main/java/org/bukkit/entity/Fox.java
@@ -92,4 +92,55 @@ public interface Fox extends Animals, Sittable {
         RED,
         SNOW;
     }
+
+    // Paper start - Add more fox behavior API
+    /**
+     * Sets if the fox is interested.
+     *
+     * @param interested is interested
+     */
+    public void setInterested(boolean interested);
+
+    /**
+     * Gets if the fox is interested.
+     *
+     * @return fox is interested
+     */
+    public boolean isInterested();
+
+    /**
+     * Sets if the fox is leaping.
+     *
+     * @param leaping is leaping
+     */
+    public void setLeaping(boolean leaping);
+
+    /**
+     * Gets if the fox is leaping.
+     *
+     * @return fox is leaping
+     */
+    public boolean isLeaping();
+
+    /**
+     * Sets if the fox is defending.
+     *
+     * @param defending is defending
+     */
+    public void setDefending(boolean defending);
+
+    /**
+     * Gets if the fox is defending.
+     *
+     * @return fox is defending
+     */
+    public boolean isDefending();
+
+    /**
+     * Sets if the fox face planted.
+     *
+     * @param faceplanted face planted
+     */
+    public void setFaceplanted(boolean faceplanted);
+    // Paper end - Add more fox behavior API
 }
diff --git a/src/main/java/org/bukkit/entity/Ghast.java b/src/main/java/org/bukkit/entity/Ghast.java
index 6b3c9bef9a8a34ddc6ff42cf358541a2665bf5e3..9c618a27d590f186f29c5d9094fc565efd40ca49 100644
--- a/src/main/java/org/bukkit/entity/Ghast.java
+++ b/src/main/java/org/bukkit/entity/Ghast.java
@@ -18,4 +18,21 @@ public interface Ghast extends Flying, Enemy {
      * @param flag Whether the Ghast is charging
      */
     void setCharging(boolean flag);
+
+    // Paper start
+    /**
+     * Returns the explosion power of shot fireballs.
+     *
+     * @return explosion power of shot fireballs
+     */
+    int getExplosionPower();
+
+    /**
+     * Sets the explosion power of shot fireballs.
+     *
+     * @param explosionPower explosion power of shot fireballs
+     * @throws IllegalArgumentException if the explosion power is less than 0 or greater than 127
+     */
+    void setExplosionPower(int explosionPower);
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
index 62a301f2f87b053bcfbf16c9870c3f740eb70022..ce5cf587ce44f2410c1d0bcf459b6309ec70bfee 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -994,6 +994,7 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
      *
      * @param invisible If the entity is invisible
      */
+    @Override // Paper - move invisibility up to Entity
     public void setInvisible(boolean invisible);
 
     /**
@@ -1001,6 +1002,7 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
      *
      * @return Whether the entity is invisible
      */
+    @Override // Paper - move invisibility up to Entity
     public boolean isInvisible();
 
     // Paper start
@@ -1037,6 +1039,57 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
     void setShieldBlockingDelay(int delay);
     // Paper end
 
+    // Paper start - missing entity API
+    /**
+     * Retrieves the sideways movement direction of the entity.
+     * <p>
+     * The returned value ranges from -1 to 1, where:
+     * - Positive 1 represents movement to the left.
+     * - Negative 1 represents movement to the right.
+     * <p>
+     * Please note that for entities of type {@link Player}, this value is updated only when riding another entity.
+     * <p>
+     * This method specifically provides information about the entity's sideways movement, whereas {@link #getVelocity()} returns
+     * a vector representing the entity's overall current momentum.
+     *
+     * @return Sideways movement direction, ranging from -1 (right) to 1 (left).
+     */
+    float getSidewaysMovement();
+
+    /**
+     * Retrieves the upwards movement direction of the entity.
+     * <p>
+     * The returned value ranges from -1 to 1, where:
+     * - Positive 1 represents upward movement.
+     * - Negative 1 represents downward movement.
+     * <p>
+     * Please note that for entities of type {@link Player}, this value is never updated.
+     * <p>
+     * This method specifically provides information about the entity's vertical movement,
+     * whereas {@link #getVelocity()} returns a vector representing the entity's overall
+     * current momentum.
+     *
+     * @return Upwards movement direction, ranging from -1 (downward) to 1 (upward).
+     */
+    float getUpwardsMovement();
+
+    /**
+     * Retrieves the forwards movement direction of the entity.
+     * <p>
+     * The returned value ranges from -1 to 1, where:
+     * - Positive 1 represents movement forwards.
+     * - Negative 1 represents movement backwards.
+     * <p>
+     * Please note that for entities of type {@link Player}, this value is updated only when riding another entity.
+     * <p>
+     * This method specifically provides information about the entity's forward and backward movement,
+     * whereas {@link #getVelocity()} returns a vector representing the entity's overall current momentum.
+     *
+     * @return Forwards movement direction, ranging from -1 (backward) to 1 (forward).
+     */
+    float getForwardsMovement();
+    // Paper end - missing entity API
+
     // Paper start - active item API
     /**
      * Starts using the item in the specified hand, making it the
diff --git a/src/main/java/org/bukkit/entity/Llama.java b/src/main/java/org/bukkit/entity/Llama.java
index d23226ccb0f6c25028f000ce31346cd0a8898e6a..bc84b892cae5fe7019a3ad481e9da79956efa1fe 100644
--- a/src/main/java/org/bukkit/entity/Llama.java
+++ b/src/main/java/org/bukkit/entity/Llama.java
@@ -67,4 +67,56 @@ public interface Llama extends ChestedHorse, RangedEntity { // Paper
     @NotNull
     @Override
     LlamaInventory getInventory();
+
+    // Paper start
+    /**
+     * Checks if this llama is in a caravan.
+     * This means that this llama is currently following
+     * another llama.
+     *
+     * @return is in caravan
+     */
+    boolean inCaravan();
+
+    /**
+     * Joins a caravan, with the provided llama being the leader
+     * of the caravan.
+     * This llama will then follow the provided llama.
+     *
+     * @param llama head of caravan to join
+     */
+    void joinCaravan(@NotNull Llama llama);
+
+    /**
+     * Leaves the current caravan that they are in.
+     */
+    void leaveCaravan();
+
+    /**
+     * Get the llama that this llama is following.
+     * <p>
+     * Does not necessarily mean the leader of the entire caravan.
+     *
+     * @return the llama currently being followed
+     */
+    @org.jetbrains.annotations.Nullable
+    Llama getCaravanHead();
+
+    /**
+     * Checks if another llama is currently following behind
+     * this llama.
+     *
+     * @return true if being followed in the caravan
+     */
+    boolean hasCaravanTail();
+
+    /**
+     * Gets the llama that is currently following behind
+     * this llama.
+     *
+     * @return the llama following this llama, or null if none is following them
+     */
+    @org.jetbrains.annotations.Nullable
+    Llama getCaravanTail();
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Mob.java b/src/main/java/org/bukkit/entity/Mob.java
index 11b6d1aba7d1f6ae1f3c822193486f5a1478e105..709c8fc3dde786f45ff13d6ee6c405ffdc765282 100644
--- a/src/main/java/org/bukkit/entity/Mob.java
+++ b/src/main/java/org/bukkit/entity/Mob.java
@@ -162,4 +162,38 @@ public interface Mob extends LivingEntity, Lootable {
      */
     @Nullable
     public Sound getAmbientSound();
+
+    // Paper start
+    /**
+     * Some mobs will raise their arm(s) when aggressive:
+     * <ul>
+     *     <li>{@link Drowned}</li>
+     *     <li>{@link Piglin}</li>
+     *     <li>{@link Skeleton}</li>
+     *     <li>{@link Zombie}</li>
+     *     <li>{@link ZombieVillager}</li>
+     *     <li>{@link Illusioner}</li>
+     *     <li>{@link Vindicator}</li>
+     *     <li>{@link Panda}</li>
+     *     <li>{@link Pillager}</li>
+     *     <li>{@link PiglinBrute}</li>
+     * </ul>
+     * <p>
+     * Note: This doesn't always show the actual aggressive state as
+     * set by {@link #setAggressive(boolean)}. {@link Panda}'s are always
+     * aggressive if their combined {@link Panda.Gene} is {@link Panda.Gene#AGGRESSIVE}.
+     *
+     * @return wether the mob is aggressive or not
+     */
+    boolean isAggressive();
+
+    /**
+     * Some mobs will raise their arm(s) when aggressive,
+     * see {@link #isAggressive()} for full list.
+     *
+     * @param aggressive wether the mob should be aggressive or not
+     * @see #isAggressive()
+     */
+    void setAggressive(boolean aggressive);
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Panda.java b/src/main/java/org/bukkit/entity/Panda.java
index 1f027927a1194f4f8e86c1375a2772e6e261c151..aa5686df134185334a74429576ff0709a604dbfd 100644
--- a/src/main/java/org/bukkit/entity/Panda.java
+++ b/src/main/java/org/bukkit/entity/Panda.java
@@ -107,6 +107,98 @@ public interface Panda extends Animals, Sittable {
      */
     int getUnhappyTicks();
 
+    // Paper start - Panda API
+    /**
+     * Sets the sneeze progress in this animation.
+     * This value counts up only if {@link Panda#isSneezing()} is true
+     *
+     * @param ticks sneeze progress
+     */
+    void setSneezeTicks(int ticks);
+
+    /**
+     * Gets the current sneeze progress, or how many ticks this panda will sneeze for.
+     *
+     * @return sneeze progress
+     */
+    int getSneezeTicks();
+
+    /**
+     * Sets the eating ticks for this panda.
+     * <p>
+     *
+     * This starts counting up as long as it is greater than 0.
+     *
+     * @param ticks eating ticks
+     */
+    void setEatingTicks(int ticks);
+
+    /**
+     * Gets the current eating progress, or how many ticks this panda has been eating for.
+     *
+     * @return eating progress
+     */
+    int getEatingTicks();
+
+    /**
+     * Sets the number of ticks this panda will be unhappy for.
+     * <p>
+     * This value counts down.
+     *
+     * @param ticks unhappy ticks
+     */
+    void setUnhappyTicks(int ticks);
+
+    /**
+     * Sets if this panda is currently on its back.
+     *
+     * @param onBack is on its back
+     * @deprecated use {@link #setOnBack(boolean)}
+     */
+    @Deprecated(forRemoval = true)
+    default void setIsOnBack(boolean onBack) {
+        this.setOnBack(onBack);
+    }
+
+    /**
+     * Sets if this panda is currently sitting.
+     *
+     * @param sitting is currently sitting
+     * @deprecated use {@link #setSitting(boolean)}
+     */
+    @Deprecated(forRemoval = true)
+    default void setIsSitting(boolean sitting) {
+        this.setSitting(sitting);
+    }
+
+    /**
+     * Sets if this panda is currently sitting.
+     *
+     * @param sitting is currently sitting
+     */
+    @Override
+    void setSitting(boolean sitting);
+
+    /**
+     * Gets if this panda is sitting.
+     *
+     * @return is sitting
+     */
+    @Override
+    boolean isSitting();
+
+    /**
+     * Gets this Panda's combined gene.
+     * <p>
+     * The combined gene can be modified using
+     * {@link #setMainGene(Gene)} or {@link #setHiddenGene(Gene)}.
+     *
+     * @return combined gene
+     */
+    @NotNull
+    Gene getCombinedGene();
+    // Paper end - Panda API
+
     public enum Gene {
 
         NORMAL(false),
diff --git a/src/main/java/org/bukkit/entity/Phantom.java b/src/main/java/org/bukkit/entity/Phantom.java
index 3dafdf14ced991ae1179ef1ca455da62f8c3243e..2fe8e8868f12bd9e846baf8858cd2c333c00a0d8 100644
--- a/src/main/java/org/bukkit/entity/Phantom.java
+++ b/src/main/java/org/bukkit/entity/Phantom.java
@@ -40,5 +40,21 @@ public interface Phantom extends Flying, Enemy {
      * @param shouldBurnInDay True to burn in sunlight
      */
     public void setShouldBurnInDay(boolean shouldBurnInDay);
+
+    /**
+     * Gets the location that this phantom circles around when not attacking a player
+     * This will be changed after attacking a player.
+     *
+     * @return circling location
+     */
+    @org.jetbrains.annotations.NotNull
+    org.bukkit.Location getAnchorLocation();
+
+    /**
+     * Sets the location that this phantom circles around when not attacking a player
+     *
+     * @param location circling location (world is ignored, will always use the entity's world)
+     */
+    void setAnchorLocation(@org.jetbrains.annotations.NotNull org.bukkit.Location location);
     // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Piglin.java b/src/main/java/org/bukkit/entity/Piglin.java
index 6fdc0e0bb62189dbf3cf9ce7a87b7fbb995956a3..eb0b7c18c1266748ff1e8e18e49b6c4f6e078b83 100644
--- a/src/main/java/org/bukkit/entity/Piglin.java
+++ b/src/main/java/org/bukkit/entity/Piglin.java
@@ -90,4 +90,47 @@ public interface Piglin extends PiglinAbstract, InventoryHolder, com.destroystok
      */
     @NotNull
     public Set<Material> getBarterList();
+
+    // Paper start
+    /**
+     * Causes the piglin to appear as if they are charging
+     * a crossbow.
+     * <p>
+     * This works with any item currently held in the piglin's hand.
+     *
+     * @param chargingCrossbow is charging
+     */
+    void setChargingCrossbow(boolean chargingCrossbow);
+
+    /**
+     * Gets if the piglin is currently charging the
+     * item in their hand.
+     *
+     * @return is charging
+     */
+    boolean isChargingCrossbow();
+
+    /**
+     * Sets whether the Piglin is dancing or not
+     *
+     * @param dancing is dancing
+     */
+    void setDancing(boolean dancing);
+
+    /**
+     * Causes the piglin to dance for a
+     * specified amount of time
+     *
+     * @param duration duration of the dance in ticks
+     */
+    void setDancing(long duration);
+
+    /**
+     * Gets if the piglin is currently dancing
+     *
+     * @return is dancing
+     */
+    boolean isDancing();
+    // Paper end
+
 }
diff --git a/src/main/java/org/bukkit/entity/PolarBear.java b/src/main/java/org/bukkit/entity/PolarBear.java
index 479f7a7c54c85cb685f56e60906650d1989c03ff..4e526ba6aa462a484984fb9f0512b8db113086fe 100644
--- a/src/main/java/org/bukkit/entity/PolarBear.java
+++ b/src/main/java/org/bukkit/entity/PolarBear.java
@@ -3,4 +3,22 @@ package org.bukkit.entity;
 /**
  * Represents a polar bear.
  */
-public interface PolarBear extends Animals {}
+// Paper start
+public interface PolarBear extends Animals {
+
+    /**
+     * Returns whether the polar bear is standing.
+     *
+     * @return whether the polar bear is standing
+     */
+    boolean isStanding();
+
+    /**
+     * Sets whether the polar bear is standing.
+     *
+     * @param standing whether the polar bear should be standing
+     */
+    void setStanding(boolean standing);
+
+}
+// Paper end
diff --git a/src/main/java/org/bukkit/entity/Rabbit.java b/src/main/java/org/bukkit/entity/Rabbit.java
index e88154283a8ef594e160d25005870053de15568a..979062aa476e3bd75166458d8831894fba8778cd 100644
--- a/src/main/java/org/bukkit/entity/Rabbit.java
+++ b/src/main/java/org/bukkit/entity/Rabbit.java
@@ -14,6 +14,23 @@ public interface Rabbit extends Animals {
      * @param type Sets the type of rabbit for this entity.
      */
     public void setRabbitType(@NotNull Type type);
+    // Paper start
+    /**
+     * Sets how many ticks this rabbit will wait
+     * until trying to find more carrots.
+     *
+     * @param ticks ticks
+     */
+    void setMoreCarrotTicks(int ticks);
+
+    /**
+     * Returns how many ticks this rabbit
+     * will wait until trying to find more carrots.
+     *
+     * @return ticks
+     */
+    int getMoreCarrotTicks();
+    // Paper end
 
     /**
      * Represents the various types a Rabbit might be.
diff --git a/src/main/java/org/bukkit/entity/Ravager.java b/src/main/java/org/bukkit/entity/Ravager.java
index 4374d5206d4d15a4d8d228c137ed9a96821a1f02..0eb7214472f3a43641a3526000af6beeefb7b36f 100644
--- a/src/main/java/org/bukkit/entity/Ravager.java
+++ b/src/main/java/org/bukkit/entity/Ravager.java
@@ -3,4 +3,61 @@ package org.bukkit.entity;
 /**
  * Illager beast.
  */
-public interface Ravager extends Raider { }
+// Paper start - Missing Entity Behavior
+public interface Ravager extends Raider {
+
+    /**
+     * Gets how many ticks this ravager is attacking for.
+     * When attacking, the ravager cannot move.
+     *
+     * @return ticks attacking or -1 if they are currently not attacking
+     */
+    int getAttackTicks();
+
+    /**
+     * Sets how many ticks this ravager is attacking for.
+     * When attacking, the ravager cannot move.
+     * This will tick down till it gets to -1, where this ravager will no longer be attacking.
+     *
+     * @param ticks ticks attacking or -1 if they should no longer be attacking
+     */
+    void setAttackTicks(int ticks);
+
+    /**
+     * Gets how many ticks the ravager is stunned for.
+     * The ravager cannot move or attack while stunned.
+     * At 0, this will cause the ravager to roar.
+     *
+     * @return ticks stunned or -1 if they are currently not stunned
+     */
+    int getStunnedTicks();
+
+    /**
+     * Sets how many ticks the ravager is stunned for.
+     * The ravager cannot move or attack while stunned.
+     * At 0, this will cause the ravager to roar.
+     *
+     * @param ticks ticks stunned or -1 if they should no longer be stunned
+     */
+    void setStunnedTicks(int ticks);
+
+    /**
+     * Gets how many ticks the ravager is roaring for.
+     * While roaring, the ravager cannot move
+     *
+     * @return ticks roaring or -1 if they are currently not roaring
+     */
+    int getRoarTicks();
+
+    /**
+     * Sets how many ticks the ravager is roaring for.
+     * While roaring, the ravager cannot move
+     * This will tick down till it gets to -1, where it is no longer active.
+     * If set to 11, this will play a sound and hurt nearby players.
+     *
+     * @param ticks ticks roaring or -1 if they should no longer be roaring
+     */
+    void setRoarTicks(int ticks);
+
+}
+// Paper end
diff --git a/src/main/java/org/bukkit/entity/Salmon.java b/src/main/java/org/bukkit/entity/Salmon.java
index a52a7af219633d575dcbe8ac4b219834bfd4d4d2..1e839b247182af6873a4d74b236d6412817c18bf 100644
--- a/src/main/java/org/bukkit/entity/Salmon.java
+++ b/src/main/java/org/bukkit/entity/Salmon.java
@@ -4,4 +4,4 @@ package org.bukkit.entity;
 /**
  * Represents a salmon fish.
  */
-public interface Salmon extends Fish { }
+public interface Salmon extends io.papermc.paper.entity.SchoolableFish { } // Paper - Schooling Fish API
diff --git a/src/main/java/org/bukkit/entity/TNTPrimed.java b/src/main/java/org/bukkit/entity/TNTPrimed.java
index 0813bd913c8fdb2001963ce3e82c07c2af105418..87e717c9ea61b0cbf536bc62fa829ddcfae5ad8c 100644
--- a/src/main/java/org/bukkit/entity/TNTPrimed.java
+++ b/src/main/java/org/bukkit/entity/TNTPrimed.java
@@ -64,4 +64,26 @@ public interface TNTPrimed extends Explosive {
     default org.bukkit.Location getSourceLoc() {
         return this.getOrigin();
     }
+
+    // Paper start
+    /**
+     * Sets the visual block data of this
+     * primed tnt.
+     * <br>
+     * The explosion of the tnt stays the
+     * same and is not affected by this change.
+     *
+     * @param data the visual block data
+     */
+    void setBlockData(@org.jetbrains.annotations.NotNull org.bukkit.block.data.BlockData data);
+
+    /**
+     * Gets the visual block data of this
+     * primed tnt.
+     *
+     * @return the visual block data
+     */
+    @org.jetbrains.annotations.NotNull
+    org.bukkit.block.data.BlockData getBlockData();
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Tadpole.java b/src/main/java/org/bukkit/entity/Tadpole.java
index d64979ebdd018f0f63b6115809b48374ba454249..8e097ad55d208a6980c320e2a849efdcc504cff1 100644
--- a/src/main/java/org/bukkit/entity/Tadpole.java
+++ b/src/main/java/org/bukkit/entity/Tadpole.java
@@ -18,4 +18,21 @@ public interface Tadpole extends Fish {
      * @param age New age
      */
     public void setAge(int age);
+
+    // Paper start - Tadpole age lock api
+    /**
+     * Lock the age of the animal, setting this will prevent the animal from
+     * maturing.
+     *
+     * @param lock new lock
+     */
+    void setAgeLock(boolean lock);
+
+    /**
+     * Gets the current agelock.
+     *
+     * @return the current agelock
+     */
+    boolean getAgeLock();
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Trident.java b/src/main/java/org/bukkit/entity/Trident.java
index 28cdb3b544572ba7aeb9061e3163e3895ac7d4e6..c8015ff610e3c1222cb368ea1d8a0c2f3785d9c7 100644
--- a/src/main/java/org/bukkit/entity/Trident.java
+++ b/src/main/java/org/bukkit/entity/Trident.java
@@ -3,4 +3,40 @@ package org.bukkit.entity;
 /**
  * Represents a thrown trident.
  */
-public interface Trident extends AbstractArrow, ThrowableProjectile { }
+// Paper start
+public interface Trident extends AbstractArrow, ThrowableProjectile {
+
+    /**
+     * Returns whether the trident has an enchanted glow.
+     * This can be separate from the underlying item having any enchantments.
+     *
+     * @return whether the trident has an enchanted glow
+     */
+    boolean hasGlint();
+
+    /**
+     * Sets whether the trident has an enchanted glow.
+     * This is separate from the underlying item having any enchantments.
+     *
+     * @param glint whether the trident should have an enchanted glow
+     */
+    void setGlint(boolean glint);
+
+    /**
+     * Returns the loyalty level of the trident.
+     * This can be separate from the underlying item's enchantments.
+     *
+     * @return loyalty level of the trident
+     */
+    int getLoyaltyLevel();
+
+    /**
+     * Sets the loyalty level of the trident.
+     * This is separate from the underlying item's enchantments.
+     *
+     * @param loyaltyLevel loyalty level
+     * @throws IllegalArgumentException if the loyalty level is lower than 0 or greater than 127
+     */
+    void setLoyaltyLevel(int loyaltyLevel);
+}
+// Paper end
diff --git a/src/main/java/org/bukkit/entity/TropicalFish.java b/src/main/java/org/bukkit/entity/TropicalFish.java
index ab31289bb0f9c8e581537a88e1db22bcdbd3d484..84bba32e80d755f094975b667f1bf2a132087f4f 100644
--- a/src/main/java/org/bukkit/entity/TropicalFish.java
+++ b/src/main/java/org/bukkit/entity/TropicalFish.java
@@ -6,7 +6,7 @@ import org.jetbrains.annotations.NotNull;
 /**
  * Tropical fish.
  */
-public interface TropicalFish extends Fish {
+public interface TropicalFish extends io.papermc.paper.entity.SchoolableFish { // Paper - Schooling Fish API
 
     /**
      * Gets the color of the fish's pattern.
diff --git a/src/main/java/org/bukkit/entity/Vex.java b/src/main/java/org/bukkit/entity/Vex.java
index 627e3c1a96ae3331f5aa2dd7803dd2a31c7204be..3c447d2300c866ae605eeca97bd869f400d6be6f 100644
--- a/src/main/java/org/bukkit/entity/Vex.java
+++ b/src/main/java/org/bukkit/entity/Vex.java
@@ -57,21 +57,30 @@ public interface Vex extends Monster {
      * Gets the remaining lifespan of this entity.
      *
      * @return life in ticks
+     * @deprecated This API duplicates existing API which uses the more
+     * preferable name due to mirroring internals better
      */
+    @Deprecated
     int getLifeTicks();
 
     /**
      * Sets the remaining lifespan of this entity.
      *
      * @param lifeTicks life in ticks, or negative for unlimited lifepan
+     * @deprecated This API duplicates existing API which uses the more
+     * preferable name due to mirroring internals better
      */
+    @Deprecated
     void setLifeTicks(int lifeTicks);
 
     /**
      * Gets if the entity has a limited life.
      *
      * @return true if the entity has limited life
+     * @deprecated This API duplicates existing API which uses the more
+     * preferable name due to mirroring internals better
      */
+    @Deprecated
     boolean hasLimitedLife();
     // Paper start
 
@@ -89,5 +98,37 @@ public interface Vex extends Monster {
      * @param summoner New summoner
      */
     void setSummoner(@Nullable Mob summoner);
+
+    /**
+     * Gets if this vex should start to take damage
+     * once {@link Vex#getLimitedLifetimeTicks()} is less than or equal to 0.
+     * 
+     * @return will take damage
+     */
+    boolean hasLimitedLifetime();
+
+    /**
+     * Sets if this vex should start to take damage
+     * once {@link Vex#getLimitedLifetimeTicks()} is less than or equal to 0.
+     *      
+     * @param hasLimitedLifetime should take damage
+     */
+    void setLimitedLifetime(boolean hasLimitedLifetime);
+
+    /**
+     * Gets the number of ticks remaining until the vex will start
+     * to take damage.
+     * 
+     * @return ticks until the vex will start to take damage
+     */
+    int getLimitedLifetimeTicks();
+
+    /**
+     * Sets the number of ticks remaining until the vex takes damage.
+     * This number is ticked down only if {@link Vex#hasLimitedLifetime()} is true.
+     * 
+     * @param ticks ticks remaining
+     */
+    void setLimitedLifetimeTicks(int ticks);
     // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/WanderingTrader.java b/src/main/java/org/bukkit/entity/WanderingTrader.java
index da76e1ed5406322073dd8c7a89ca55aa68620ac4..9f25774659b29d8fcca3eb9d9487edff42dbad13 100644
--- a/src/main/java/org/bukkit/entity/WanderingTrader.java
+++ b/src/main/java/org/bukkit/entity/WanderingTrader.java
@@ -53,5 +53,26 @@ public interface WanderingTrader extends AbstractVillager {
      * @return whether the mob will drink
      */
     public boolean canDrinkMilk();
+
+    /**
+     * Gets the location that this wandering trader is currently
+     * wandering towards.
+     * <p>
+     * This will return null if the wandering trader has finished
+     * wandering towards the given location.
+     *
+     * @return the location currently wandering towards, or null if not wandering
+     */
+    @org.jetbrains.annotations.Nullable
+    org.bukkit.Location getWanderingTowards();
+
+    /**
+     * Sets the location that this wandering trader is currently wandering towards.
+     * <p>
+     * This can be set to null to prevent the wandering trader from wandering further.
+     *
+     * @param location location to wander towards (world is ignored, will always use the entity's world)
+     */
+    void setWanderingTowards(@org.jetbrains.annotations.Nullable org.bukkit.Location location);
     // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/Warden.java b/src/main/java/org/bukkit/entity/Warden.java
index 3794db8867b53f3b3735ad82fdd8765a26df2bfb..efaa45f41bc1dc8df6665c55b4e5ade343d60d4c 100644
--- a/src/main/java/org/bukkit/entity/Warden.java
+++ b/src/main/java/org/bukkit/entity/Warden.java
@@ -30,6 +30,18 @@ public interface Warden extends Monster {
      */
     int getAnger(@NotNull Entity entity);
 
+    // Paper start
+    /**
+     * Gets the highest anger level of this warden.
+     * <p>
+     * Anger is an integer from 0 to 150. Once a Warden reaches 80 anger at a
+     * target it will actively pursue it.
+     *
+     * @return highest anger level
+     */
+    int getHighestAnger();
+    // Paper end
+
     /**
      * Increases the anger level of this warden.
      *
diff --git a/src/main/java/org/bukkit/entity/Wither.java b/src/main/java/org/bukkit/entity/Wither.java
index 87a814f63c3f35be35bfa210c9248ad211c0dd8f..14543c2238b45c526dd9aebea2aa5c22f5df54dc 100644
--- a/src/main/java/org/bukkit/entity/Wither.java
+++ b/src/main/java/org/bukkit/entity/Wither.java
@@ -43,7 +43,9 @@ public interface Wither extends Monster, Boss, com.destroystokyo.paper.entity.Ra
      * Returns the wither's current invulnerability ticks.
      *
      * @return amount of invulnerability ticks
+     * @deprecated Duplicate api, use {@link #getInvulnerableTicks()}
      */
+    @Deprecated(forRemoval = true) // Paper
     int getInvulnerabilityTicks();
 
     /**
@@ -52,7 +54,9 @@ public interface Wither extends Monster, Boss, com.destroystokyo.paper.entity.Ra
      * When invulnerability ticks reach 0, the wither will trigger an explosion.
      *
      * @param ticks amount of invulnerability ticks
+     * @deprecated Duplicate api, use {@link #setInvulnerableTicks(int)}
      */
+    @Deprecated(forRemoval = true) // Paper
     void setInvulnerabilityTicks(int ticks);
 
     /**
@@ -64,4 +68,43 @@ public interface Wither extends Monster, Boss, com.destroystokyo.paper.entity.Ra
         LEFT,
         RIGHT
     }
+
+    // Paper start
+    /**
+     * @return whether the wither is charged
+     */
+    boolean isCharged();
+
+    /**
+     * @return ticks the wither is invulnerable for
+     */
+    int getInvulnerableTicks();
+
+    /**
+     * Sets for how long in the future, the wither should be invulnerable.
+     *
+     * @param ticks ticks the wither is invulnerable for
+     */
+    void setInvulnerableTicks(int ticks);
+
+    /**
+     * @return whether the wither can travel through portals
+     */
+    boolean canTravelThroughPortals();
+
+    /**
+     * Sets whether the wither can travel through portals.
+     *
+     * @param value whether the wither can travel through portals
+     */
+    void setCanTravelThroughPortals(boolean value);
+
+    /**
+     * Makes the wither invulnerable for 11 seconds and
+     * sets the health to one third of the max health.
+     * <br>
+     * This is called in vanilla directly after spawning the wither.
+     */
+    void enterInvulnerabilityPhase();
+    // Paper end
 }
diff --git a/src/main/java/org/bukkit/entity/ZombieVillager.java b/src/main/java/org/bukkit/entity/ZombieVillager.java
index 7cc1d9a966454af70b7c25735fe474fe3eb97eb4..ac6fd8ca95771c185c145f4589ddd5b2a6e8c2da 100644
--- a/src/main/java/org/bukkit/entity/ZombieVillager.java
+++ b/src/main/java/org/bukkit/entity/ZombieVillager.java
@@ -90,4 +90,22 @@ public interface ZombieVillager extends Zombie {
      * @param conversionPlayer the player
      */
     void setConversionPlayer(@Nullable OfflinePlayer conversionPlayer);
+
+    // Paper start - missing entity behaviour api - converting without entity event
+    /**
+     * Sets the amount of ticks until this entity will be converted to a
+     * Villager as a result of being cured.
+     * <p>
+     * When this reaches 0, the entity will be converted. A value of less than 0
+     * will stop the current conversion process without converting the current
+     * entity.
+     *
+     * @param time new conversion time
+     * @param broadcastEntityEvent whether this conversion time mutation should broadcast the
+     *                             org.bukkit.{@link org.bukkit.EntityEffect#ZOMBIE_TRANSFORM} entity event to the
+     *                             world. If false, no entity event is published, preventing for example the
+     *                             org.bukkit.{@link org.bukkit.Sound#ENTITY_ZOMBIE_VILLAGER_CURE} from playing.
+     */
+    void setConversionTime(int time, boolean broadcastEntityEvent);
+    // Paper end - missing entity behaviour api - converting without entity event
 }
diff --git a/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java b/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java
index db69687a7ad4b18d17ab1677cae5d8dd4dcd3678..304b05aeaea5febf493fc40d433a23acb384b4f0 100644
--- a/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java
+++ b/src/main/java/org/bukkit/entity/minecart/HopperMinecart.java
@@ -24,4 +24,23 @@ public interface HopperMinecart extends Minecart, InventoryHolder, LootableEntit
      * @param enabled new enabled state
      */
     void setEnabled(boolean enabled);
+    // Paper start
+    /**
+     * Gets the number of ticks that this hopper minecart cannot pickup items up for.
+     *
+     * @return ticks left on cooldown
+     * @deprecated Hopper minecarts don't have cooldowns anymore
+     */
+    @Deprecated(forRemoval = true)
+    int getPickupCooldown();
+
+    /**
+     * Sets the number of ticks that this hopper minecart cannot pickup items for.
+     *
+     * @param cooldown cooldown length in ticks
+     * @deprecated Hopper minecarts don't have cooldowns anymore
+     */
+    @Deprecated(forRemoval = true)
+    void setPickupCooldown(int cooldown);
+    // Paper end
 }