@EventHandler(priority = EventPriority.HIGHEST) public void onRodLand(ProjectileHitEvent e) { Entity hookEntity = e.getEntity(); World world = hookEntity.getWorld(); if (!isEnabled(world)) return; if (e.getEntityType() != EntityType.FISHING_HOOK) return; Entity hitent = null; try{ hitent = e.getHitEntity(); } catch(NoSuchMethodError e1){ //For older version that don't have such method Collection<Entity> entities = world.getNearbyEntities(hookEntity.getLocation(), 0.25, 0.25, 0.25); for (Entity entity : entities) { if (entity instanceof Player) hitent = entity; break; } } if(hitent == null) return; if(!(hitent instanceof Player)) return; FishHook hook = (FishHook) hookEntity; Player rodder = (Player) hook.getShooter(); Player player = (Player) hitent; debug("You were hit by a fishing rod!", player); if (player.getUniqueId().equals(rodder.getUniqueId())) return; if(player.getGameMode() == GameMode.CREATIVE) return; double damage = module().getDouble("damage"); if(damage < 0) damage = 0.2; EntityDamageEvent event = makeEvent(rodder, player, damage); Bukkit.getPluginManager().callEvent(event); if(module().getBoolean("checkCancelled") && event.isCancelled()){ //This is to check what plugins are listening to the event if(plugin.getConfig().getBoolean("debug.enabled")){ debug("You can't do that here!", rodder); HandlerList hl = event.getHandlers(); for(RegisteredListener rl : hl.getRegisteredListeners()) debug("Plugin Listening: " + rl.getPlugin().getName(), rodder); } return; } player.damage(damage); Location loc = player.getLocation().add(0, 0.5, 0); player.teleport(loc); player.setVelocity(loc.subtract(rodder.getLocation()).toVector().normalize().multiply(0.4)); }
private Vector reelVelocity(Player player, FishHook hook) { double x = player.getLocation().getX() - hook.getLocation().getX(); double y = player.getLocation().getY() - hook.getLocation().getY(); double z = player.getLocation().getZ() - hook.getLocation().getZ(); return new Vector(x * 0.1D, y * 0.1D + Math.sqrt(Math.sqrt(x * x + y * y + z * z)) * 0.08D, z * 0.1D); }
public Bullet(SwornGuns plugin, GunPlayer shooter, Gun shotFrom, Vector velocity) { this.plugin = plugin; this.shotFrom = shotFrom; this.shooter = shooter; this.velocity = velocity; this.active = true; if (shotFrom.isThrowable()) { ItemStack thrown = shotFrom.getMaterial().newItemStack(1); this.projectile = shooter.getPlayer().getWorld().dropItem(shooter.getPlayer().getEyeLocation(), thrown); this.id = projectile.getEntityId(); ((Item) projectile).setPickupDelay(9999999); this.startLocation = projectile.getLocation(); } else { Class<? extends Projectile> mclass = Snowball.class; String check = shotFrom.getProjType().toLowerCase().replaceAll("_", "").replaceAll(" ", ""); switch (check) { case "arrow": mclass = Arrow.class; break; case "egg": mclass = Egg.class; break; case "enderpearl": mclass = EnderPearl.class; break; case "fireball": mclass = Fireball.class; break; case "fish": case "fishhook": mclass = FishHook.class; break; case "largefireball": mclass = LargeFireball.class; break; case "smallfireball": mclass = SmallFireball.class; break; case "thrownexpbottle": mclass = ThrownExpBottle.class; break; case "thrownpotion": mclass = ThrownPotion.class; break; case "witherskull": mclass = WitherSkull.class; break; default: break; } this.projectile = shooter.getPlayer().launchProjectile(mclass); this.id = projectile.getEntityId(); ((Projectile) projectile).setShooter(shooter.getPlayer()); this.startLocation = projectile.getLocation(); } if (shotFrom.getReleaseTime() == -1) { this.releaseTime = 80 + (shotFrom.isThrowable() ? 0 : 1) * 400; } else { this.releaseTime = shotFrom.getReleaseTime(); } }