@@ -53,6 +53,69 @@ public final class Plugin extends JavaPlugin implements Listener {
53
53
return tridentSlotMap ;
54
54
}
55
55
56
+ @ EventHandler
57
+ private void onEntityRemoveFromWorld (final @ NotNull EntityRemoveFromWorldEvent event ) {
58
+ final Entity entity = event .getEntity ();
59
+ if (entity instanceof final Trident trident )
60
+ if (trident .getShooter () instanceof final Player player ) {
61
+ final Set <Pair <UUID , EquipmentSlot >> tridentSlotPairSet = getTridentSlotPairSet (player .getUniqueId (), false );
62
+ final UUID tridentUUID ;
63
+ if (tridentSlotPairSet == null || tridentSlotPairSet .isEmpty ())
64
+ return ;
65
+ tridentUUID = trident .getUniqueId ();
66
+ for (final Pair <UUID , EquipmentSlot > tridentSlotPair : tridentSlotPairSet )
67
+ if (tridentSlotPair .getLeft ().equals (tridentUUID )) {
68
+ tridentSlotPairSet .remove (tridentSlotPair );
69
+ return ;
70
+ }
71
+ }
72
+ }
73
+
74
+ @ EventHandler
75
+ @ SuppressWarnings ("deprecation" ) // org.bukkit.event.player.PlayerPickupArrowEvent#setCancelled is not deprecated actually
76
+ private void onPlayerPickupArrow (final @ NotNull PlayerPickupArrowEvent event ) {
77
+ final AbstractArrow arrow = event .getArrow ();
78
+ if (arrow instanceof final Trident trident )
79
+ if (trident .getShooter () instanceof final Player player ) {
80
+ final ItemStack tridentItem = trident .getItem ();
81
+ final PlayerInventory playerInventory = player .getInventory ();
82
+ final Set <Pair <UUID , EquipmentSlot >> tridentSlotPairSet = getTridentSlotPairSet (player .getUniqueId (), false );
83
+ final UUID tridentUUID ;
84
+ if (tridentSlotPairSet == null || tridentSlotPairSet .isEmpty ())
85
+ return ;
86
+ tridentUUID = trident .getUniqueId ();
87
+ for (final Pair <UUID , EquipmentSlot > tridentSlotPair : tridentSlotPairSet )
88
+ if (tridentSlotPair .getLeft ().equals (tridentUUID )) {
89
+ final EquipmentSlot equipmentSlot = tridentSlotPair .getRight ();
90
+ if (playerInventory .getItem (equipmentSlot ).getType () == Material .AIR ) {
91
+ final float itemPickupSoundPitch =
92
+ // stolen from net.minecraft.client.multiplayer.ClientPacketListener#handleTakeItemEntity
93
+ (randomGenerator .nextFloat () - randomGenerator .nextFloat ()) * 1.4f + 2f ;
94
+ final Location tridentLocation = trident .getLocation ();
95
+ event .setCancelled (true );
96
+ playerInventory .setItem (equipmentSlot , tridentItem );
97
+ player .getWorld ().playSound (tridentLocation , Sound .ENTITY_ITEM_PICKUP , SoundCategory .PLAYERS , .2f , itemPickupSoundPitch );
98
+ }
99
+ trident .remove ();
100
+ return ;
101
+ }
102
+ }
103
+ }
104
+
105
+ @ EventHandler
106
+ private void onProjectileLaunch (final @ NotNull ProjectileLaunchEvent event ) {
107
+ if (event .getEntity () instanceof final Trident trident )
108
+ if (trident .getShooter () instanceof final Player player ) {
109
+ final PlayerInventory playerInventory = player .getInventory ();
110
+ final ItemStack tridentItem = trident .getItem ();
111
+ final Set <Pair <UUID , EquipmentSlot >> tridentSlotPairSet = getTridentSlotPairSet (player .getUniqueId (), true );
112
+ if (tridentItem .equals (playerInventory .getItemInMainHand ()))
113
+ tridentSlotPairSet .add (Pair .of (trident .getUniqueId (), EquipmentSlot .HAND ));
114
+ else if (tridentItem .equals (playerInventory .getItemInOffHand ()))
115
+ tridentSlotPairSet .add (Pair .of (trident .getUniqueId (), EquipmentSlot .OFF_HAND ));
116
+ }
117
+ }
118
+
56
119
private void sync (final @ NotNull UUID playerUUID ) {
57
120
final File playerFile ;
58
121
final String playerUUIDString ;
@@ -167,69 +230,4 @@ public void onDisable() {
167
230
randomGenerator = null ;
168
231
varFolder = null ;
169
232
}
170
-
171
- // MARK: Listener
172
-
173
- @ EventHandler
174
- public void onEntityRemoveFromWorld (final @ NotNull EntityRemoveFromWorldEvent event ) {
175
- final Entity entity = event .getEntity ();
176
- if (entity instanceof final Trident trident )
177
- if (trident .getShooter () instanceof final Player player ) {
178
- final Set <Pair <UUID , EquipmentSlot >> tridentSlotPairSet = getTridentSlotPairSet (player .getUniqueId (), false );
179
- final UUID tridentUUID ;
180
- if (tridentSlotPairSet == null || tridentSlotPairSet .isEmpty ())
181
- return ;
182
- tridentUUID = trident .getUniqueId ();
183
- for (final Pair <UUID , EquipmentSlot > tridentSlotPair : tridentSlotPairSet )
184
- if (tridentSlotPair .getLeft ().equals (tridentUUID )) {
185
- tridentSlotPairSet .remove (tridentSlotPair );
186
- return ;
187
- }
188
- }
189
- }
190
-
191
- @ EventHandler
192
- @ SuppressWarnings ("deprecation" ) // org.bukkit.event.player.PlayerPickupArrowEvent#setCancelled is not deprecated actually
193
- public void onPlayerPickupArrow (final @ NotNull PlayerPickupArrowEvent event ) {
194
- final AbstractArrow arrow = event .getArrow ();
195
- if (arrow instanceof final Trident trident )
196
- if (trident .getShooter () instanceof final Player player ) {
197
- final ItemStack tridentItem = trident .getItem ();
198
- final PlayerInventory playerInventory = player .getInventory ();
199
- final Set <Pair <UUID , EquipmentSlot >> tridentSlotPairSet = getTridentSlotPairSet (player .getUniqueId (), false );
200
- final UUID tridentUUID ;
201
- if (tridentSlotPairSet == null || tridentSlotPairSet .isEmpty ())
202
- return ;
203
- tridentUUID = trident .getUniqueId ();
204
- for (final Pair <UUID , EquipmentSlot > tridentSlotPair : tridentSlotPairSet )
205
- if (tridentSlotPair .getLeft ().equals (tridentUUID )) {
206
- final EquipmentSlot equipmentSlot = tridentSlotPair .getRight ();
207
- if (playerInventory .getItem (equipmentSlot ).getType () == Material .AIR ) {
208
- final float itemPickupSoundPitch =
209
- // stolen from net.minecraft.client.multiplayer.ClientPacketListener#handleTakeItemEntity
210
- (randomGenerator .nextFloat () - randomGenerator .nextFloat ()) * 1.4f + 2f ;
211
- final Location tridentLocation = trident .getLocation ();
212
- event .setCancelled (true );
213
- playerInventory .setItem (equipmentSlot , tridentItem );
214
- player .getWorld ().playSound (tridentLocation , Sound .ENTITY_ITEM_PICKUP , SoundCategory .PLAYERS , .2f , itemPickupSoundPitch );
215
- }
216
- trident .remove ();
217
- return ;
218
- }
219
- }
220
- }
221
-
222
- @ EventHandler
223
- public void onProjectileLaunch (final @ NotNull ProjectileLaunchEvent event ) {
224
- if (event .getEntity () instanceof final Trident trident )
225
- if (trident .getShooter () instanceof final Player player ) {
226
- final PlayerInventory playerInventory = player .getInventory ();
227
- final ItemStack tridentItem = trident .getItem ();
228
- final Set <Pair <UUID , EquipmentSlot >> tridentSlotPairSet = getTridentSlotPairSet (player .getUniqueId (), true );
229
- if (tridentItem .equals (playerInventory .getItemInMainHand ()))
230
- tridentSlotPairSet .add (Pair .of (trident .getUniqueId (), EquipmentSlot .HAND ));
231
- else if (tridentItem .equals (playerInventory .getItemInOffHand ()))
232
- tridentSlotPairSet .add (Pair .of (trident .getUniqueId (), EquipmentSlot .OFF_HAND ));
233
- }
234
- }
235
233
}
0 commit comments