Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- double mHorizontal = 1.4D;
- double mVertical = 1.2D;
- @EventHandler
- public void onVelocity(PlayerVelocityEvent event){
- Player player = event.getPlayer();
- if (player.getLastDamageCause() == null){return;}
- if (!(player.getLastDamageCause() instanceof EntityDamageByEntityEvent)){return;}
- if (((EntityDamageByEntityEvent) player.getLastDamageCause()).getDamager() instanceof Player) {event.setCancelled(true);}
- }
- @EventHandler(priority = EventPriority.HIGHEST)
- public void onEntityDamageEvent(EntityDamageByEntityEvent event){
- if (!(event.getEntity() instanceof Player) || !(event.getDamager() instanceof Player)) {return;}
- if (event.isCancelled()) {return;}
- Player damaged = (Player) event.getEntity();
- Player damager = (Player) event.getDamager();
- if (damaged.getNoDamageTicks() > damaged.getMaximumNoDamageTicks() / 2D) {return;}
- double mSprint = damaged.isSprinting() ? 0.8D : 0.5D;
- double mAirtime = damaged.isOnGround() ? 1 : 0.5D;
- @SuppressWarnings("deprecation")
- double mKnockbackEnchant = damager.getItemInHand() == null ? 0 : damager.getItemInHand().getEnchantmentLevel(Enchantment.KNOCKBACK) * 0.2D;
- Vector knockback = damaged.getLocation().toVector().subtract(damager.getLocation().toVector()).normalize();
- knockback.setX((knockback.getX() * mSprint + mKnockbackEnchant) * mHorizontal);
- knockback.setY(0.35D * mAirtime * mVertical);
- knockback.setZ((knockback.getZ() * mSprint + mKnockbackEnchant) * mHorizontal);
- try {
- PacketPlayOutEntityVelocity packet = PacketPlayOutEntityVelocity.class.getConstructor(int.class, double.class, double.class, double.class).newInstance(damaged.getEntityId(), knockback.getX(), knockback.getY(), knockback.getZ());
- ((CraftPlayer) damaged).getHandle().playerConnection.sendPacket(packet);
- } catch(Exception e){
- e.printStackTrace();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment