22
33import me .nik .combatplus .files .Config ;
44import me .nik .combatplus .utils .Messenger ;
5+ import me .nik .combatplus .utils .MiscUtils ;
56import org .bukkit .Bukkit ;
67import org .bukkit .GameMode ;
7- import org .bukkit .Location ;
8- import org .bukkit .World ;
98import org .bukkit .entity .Entity ;
109import org .bukkit .entity .EntityType ;
1110import org .bukkit .entity .FishHook ;
1211import org .bukkit .entity .LivingEntity ;
1312import org .bukkit .entity .Player ;
1413import org .bukkit .event .EventHandler ;
15- import org .bukkit .event .EventPriority ;
1614import org .bukkit .event .Listener ;
1715import org .bukkit .event .entity .EntityDamageByEntityEvent ;
1816import org .bukkit .event .entity .EntityDamageEvent ;
1917import org .bukkit .event .entity .ProjectileHitEvent ;
2018import org .bukkit .event .player .PlayerFishEvent ;
21- import org .bukkit .util .Vector ;
2219
2320public class FishingRodKnockback implements Listener {
2421
2522 private final double fishingRodDamage = Config .get ().getDouble ("advanced.settings.knockback.fishing_rod.damage" );
2623 private final boolean cancelDragging = Config .get ().getBoolean ("knockback.fishing_rod.cancel_dragging" );
2724
28- @ EventHandler (priority = EventPriority .HIGHEST )
29- public void onRodLand (ProjectileHitEvent e ) {
25+ /*
26+ Bring back old fishing rod behavior
27+ */
3028
29+ @ EventHandler
30+ public void onRodLand (ProjectileHitEvent e ) {
3131 Entity rodHook = e .getEntity ();
32- World world = rodHook .getWorld ();
3332 if (e .getEntityType () != EntityType .FISHING_HOOK ) return ;
34-
3533 Entity target ;
36-
37- try {
38- target = e .getHitEntity ();
39- } catch (NoSuchMethodError error ) {
40- target = world .getNearbyEntities (rodHook .getLocation (), 0.25 , 0.25 , 0.25 ).stream ().filter (entity -> entity instanceof Player ).findFirst ().orElse (null );
41- }
34+ target = e .getHitEntity ();
4235
4336 if (target == null ) return ;
4437 if (!(target instanceof LivingEntity )) return ;
4538
39+ /*
40+ return on citizen NPCS
41+ */
4642 if (target .hasMetadata ("NPC" )) return ;
4743
4844 FishHook hook = (FishHook ) rodHook ;
49- Player rodder = (Player ) hook .getShooter ();
45+ Player holder = (Player ) hook .getShooter ();
5046
5147 if (target instanceof Player ) {
5248 Player player = (Player ) target ;
5349
54- if (player .equals (rodder )) return ;
50+ if (player .equals (holder )) return ;
5551
5652 if (player .getGameMode () == GameMode .CREATIVE ) return ;
5753 }
5854 LivingEntity livingEntity = (LivingEntity ) target ;
5955
6056 if (livingEntity .getNoDamageTicks () > livingEntity .getMaximumNoDamageTicks () / 2f ) return ;
61- EntityDamageEvent event = customEvent (rodder , target , fishingRodDamage );
57+ EntityDamageEvent event = customEvent (holder , target , fishingRodDamage );
6258 Bukkit .getPluginManager ().callEvent (event );
6359 if (event .isCancelled ()) return ;
6460
65- livingEntity .setVelocity (calculateKnockbackVelocity (livingEntity .getVelocity (), livingEntity .getLocation (), hook .getLocation ()));
61+ livingEntity .setVelocity (MiscUtils . calculateVelocity (livingEntity .getVelocity (), livingEntity .getLocation (), hook .getLocation ()));
6662 livingEntity .damage (fishingRodDamage );
67- Messenger .debug (rodder , "&3Fishing Rod Knockback &f&l>> &6Velocity: &a" + livingEntity .getVelocity ().toString ());
63+ Messenger .debug (holder , "&3Fishing Rod Knockback &f&l>> &6Velocity: &a" + livingEntity .getVelocity ().toString ());
6864 }
6965
70- @ EventHandler ( priority = EventPriority . HIGHEST )
66+ @ EventHandler
7167 public void onHook (PlayerFishEvent e ) {
7268 if (!cancelDragging ) return ;
7369 if (e .getState () != PlayerFishEvent .State .CAUGHT_ENTITY ) return ;
@@ -76,34 +72,6 @@ public void onHook(PlayerFishEvent e) {
7672 Messenger .debug (e .getPlayer (), "&3Fishing Rod Knockback &f&l>> &6Cancelled Dragging: &atrue" );
7773 }
7874
79- private Vector calculateKnockbackVelocity (Vector currentVelocity , Location player , Location hook ) {
80- double xDist = hook .getX () - player .getX ();
81- double zDist = hook .getZ () - player .getZ ();
82-
83- while (xDist * xDist + zDist * zDist < 0.0001 ) {
84- xDist = (Math .random () - Math .random ()) * 0.01D ;
85- zDist = (Math .random () - Math .random ()) * 0.01D ;
86- }
87-
88- double distance = Math .sqrt (xDist * xDist + zDist * zDist );
89-
90- double y = currentVelocity .getY () / 2 ;
91- double x = currentVelocity .getX () / 2 ;
92- double z = currentVelocity .getZ () / 2 ;
93-
94- x -= xDist / distance * 0.4 ;
95-
96- y += 0.4 ;
97-
98- z -= zDist / distance * 0.4 ;
99-
100- if (y >= 0.4 ) {
101- y = 0.4 ;
102- }
103-
104- return new Vector (x , y , z );
105- }
106-
10775 private EntityDamageEvent customEvent (Player rodder , Entity entity , double damage ) {
10876 return new EntityDamageByEntityEvent (rodder , entity , EntityDamageEvent .DamageCause .PROJECTILE , damage );
10977 }
0 commit comments