Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.48 KB | None | 0 0
  1. package com.planetgallium.kitpvp.listener;
  2.  
  3. import org.bukkit.Bukkit;
  4. import org.bukkit.Effect;
  5. import org.bukkit.GameMode;
  6. import org.bukkit.entity.Arrow;
  7. import org.bukkit.entity.Entity;
  8. import org.bukkit.entity.EntityType;
  9. import org.bukkit.entity.Player;
  10. import org.bukkit.entity.Snowball;
  11. import org.bukkit.event.EventHandler;
  12. import org.bukkit.event.Listener;
  13. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  14. import org.bukkit.event.entity.EntityDamageEvent;
  15. import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
  16. import org.bukkit.inventory.ItemStack;
  17. import org.bukkit.potion.PotionEffect;
  18. import org.bukkit.potion.PotionEffectType;
  19. import org.bukkit.scheduler.BukkitRunnable;
  20.  
  21. import com.planetgallium.kitpvp.Game;
  22. import com.planetgallium.kitpvp.api.PlayerDeathEvent;
  23. import com.planetgallium.kitpvp.util.Config;
  24. import com.planetgallium.kitpvp.util.Resources;
  25. import com.planetgallium.kitpvp.util.Sounds;
  26. import com.planetgallium.kitpvp.util.Title;
  27. import me.clip.placeholderapi.PlaceholderAPI;
  28.  
  29. public class DeathListener implements Listener {
  30.  
  31. private Title title = new Title();
  32. private Resources resources;
  33.  
  34.  
  35. public DeathListener(Resources resources) {
  36. this.resources = resources;
  37. }
  38.  
  39. private boolean hasPlaceholders = Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI");
  40.  
  41. @EventHandler
  42. public void onDeath(PlayerDeathEvent e) {
  43.  
  44. respawnPlayer(e.getPlayer());
  45. setDeathMessage(e.getPlayer(), e.getEvent());
  46.  
  47. }
  48.  
  49. // @EventHandler
  50. // public void onDeath(EntityDamageEvent e) {
  51. //
  52. // if (e.getEntity() instanceof Player) {
  53. //
  54. // Player p = (Player) e.getEntity();
  55. //
  56. // if (Toolkit.inArena(p)) {
  57. //
  58. // // FALL DAMAGE
  59. //
  60. // if (Config.getB("Other.PreventFallDamage")) {
  61. //
  62. // if (e.getCause() == DamageCause.FALL) {
  63. //
  64. // e.setCancelled(true);
  65. // e.setDamage(0.0);
  66. //
  67. // }
  68. //
  69. // }
  70. //
  71. // // orig (prolly woorks better imo) p.getHealth - e.getDamage() <= 0.0
  72. //// if ((p.getHealth() - e.getDamage()) <= 1.0 || p.getHealth() <= 1.0) {
  73. // if (p.getHealth() - e.getDamage() <= 0.0) {
  74. //
  75. // e.setCancelled(true);
  76. //
  77. // p.setHealth(20.0);
  78. //
  79. // respawnPlayer(p);
  80. // setDeathMessage(p, e);
  81. //
  82. // }
  83. //
  84. // // Spectator going in the void
  85. // if (p.getGameMode() == GameMode.SPECTATOR) {
  86. //
  87. // if (e.getCause() == DamageCause.VOID) {
  88. //
  89. // e.setDamage(0);
  90. // e.setCancelled(true);
  91. //
  92. // }
  93. //
  94. // }
  95. //
  96. // }
  97. //
  98. // }
  99. //
  100. // }
  101.  
  102. private void respawnPlayer(Player p) {
  103.  
  104. p.setGameMode(GameMode.SPECTATOR);
  105.  
  106. new BukkitRunnable() {
  107.  
  108. public int time = 5;
  109.  
  110. @Override
  111. public void run() {
  112.  
  113. if (time != 0) {
  114.  
  115. if (time == 5) {
  116.  
  117. // When they first die
  118.  
  119. if (!Config.getB("Other.PreventDeathDrops")) {
  120.  
  121. for (ItemStack items : p.getInventory().getContents()) {
  122.  
  123. if (items != null) {
  124.  
  125. p.getWorld().dropItemNaturally(p.getLocation(), items);
  126.  
  127. }
  128.  
  129. }
  130.  
  131. }
  132.  
  133. Game.getInstance().getArena().removePlayer(p, false);
  134. // p.setGameMode(GameMode.SPECTATOR);
  135.  
  136. }
  137.  
  138. title.sendTitle(p, Config.tr(Config.getS("Death.Title.Title")), Config.tr(Config.getS("Death.Title.Subtitle")).replace("%seconds%", String.valueOf(time)), 0, 20, 20);
  139.  
  140. p.playSound(p.getLocation(), Sounds.WOOD_CLICK.bukkitSound(), 1, 1);
  141.  
  142. time--;
  143.  
  144. } else {
  145.  
  146. if (Game.getInstance().getArena().getKits().hasKit(p.getName())) {
  147.  
  148. Game.getInstance().getArena().getKits().clearKit(p.getName());
  149.  
  150. }
  151.  
  152. p.sendMessage(Config.getS("Death.Title.Message"));
  153.  
  154. Game.getInstance().getArena().addPlayer(p);
  155.  
  156. p.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 30, 0));
  157. p.playSound(p.getLocation(), Sounds.ORB_PICKUP.bukkitSound(), 1, 1);
  158. p.setGameMode(GameMode.SURVIVAL);
  159.  
  160. if (Game.getInstance().getArena().getKillStreaks().getStreak(p.getName()) > 0) {
  161.  
  162. Game.getInstance().getArena().getKillStreaks().resetStreak(p);
  163.  
  164. }
  165.  
  166. if (Config.getB("Respawn.Commands.Enabled")) {
  167.  
  168. for (String list : Config.getC().getStringList("Respawn.Commands.Commands")) {
  169.  
  170. String[] command = list.split(":", 2);
  171. command[1] = command[1].trim();
  172.  
  173. if (command[0].equals("console")) {
  174.  
  175. if (hasPlaceholders) {
  176.  
  177. String withPlaceholders = PlaceholderAPI.setPlaceholders(p, command[1].replace("%player%", p.getName()));
  178. Bukkit.dispatchCommand(Bukkit.getConsoleSender(), withPlaceholders);
  179.  
  180. } else {
  181.  
  182. Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command[1].trim().replace("%player%", p.getName()));
  183.  
  184. }
  185.  
  186. } else if (command[0].equals("player")) {
  187.  
  188. if (hasPlaceholders) {
  189.  
  190. String withPlaceholders = PlaceholderAPI.setPlaceholders(p, command[1].trim().replace("%player%", p.getName()));
  191. p.performCommand(withPlaceholders);
  192.  
  193. } else {
  194.  
  195. p.performCommand(command[1].replace("%player%", p.getName()));
  196.  
  197. }
  198.  
  199. }
  200.  
  201. }
  202.  
  203. }
  204.  
  205. cancel();
  206.  
  207. }
  208.  
  209. }
  210.  
  211. }.runTaskTimer(Game.getInstance(), 0L, 20L);
  212.  
  213. }
  214.  
  215. private void setDeathMessage(Player p, EntityDamageEvent e) {
  216.  
  217. // UPDATE STATS
  218.  
  219. Game.getInstance().getArena().getStats().addDeath(p.getUniqueId());
  220. Game.getInstance().getArena().getLevels().removeExperience(p, resources.getLevels().getInt("Levels.General.Experience.Death"));
  221.  
  222. // DEATH SOUND
  223.  
  224. if (Config.getB("Death.Sound.Enabled")) {
  225.  
  226. for (Player local : p.getWorld().getPlayers()) {
  227.  
  228. local.playSound(local.getLocation(), Sounds.valueOf(Config.getS("Death.Sound.Sound")).bukkitSound(), 1, (float) Config.getI("Death.Sound.Pitch"));
  229.  
  230. }
  231.  
  232. }
  233.  
  234. // DEATH PARTICLE
  235.  
  236. p.getPlayer().getLocation().getWorld().playEffect(p.getLocation().add(0.0D, 1.0D, 0.0D), Effect.STEP_SOUND, 152);
  237.  
  238. // DEATH COMMANDS
  239.  
  240. if (Config.getB("Death.Commands.Enabled")) {
  241.  
  242. for (String list : Config.getC().getStringList("Death.Commands.Commands")) {
  243.  
  244. String[] command = list.split(":", 2);
  245. command[1] = command[1].trim();
  246.  
  247. if (command[0].equals("console")) {
  248.  
  249. if (hasPlaceholders) {
  250.  
  251. String withPlaceholders = PlaceholderAPI.setPlaceholders(p, command[1].replace("%victim%", p.getName()));
  252. Bukkit.dispatchCommand(Bukkit.getConsoleSender(), withPlaceholders);
  253.  
  254. } else {
  255.  
  256. Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command[1].trim().replace("%victim%", p.getName()));
  257.  
  258. }
  259.  
  260. } else if (command[0].equals("player")) {
  261.  
  262. if (hasPlaceholders) {
  263.  
  264. String withPlaceholders = PlaceholderAPI.setPlaceholders(p, command[1].trim().replace("%victim%", p.getName()));
  265. p.performCommand(withPlaceholders);
  266.  
  267. } else {
  268.  
  269. p.performCommand(command[1].replace("%victim%", p.getName()));
  270.  
  271. }
  272.  
  273. }
  274.  
  275. }
  276.  
  277. }
  278.  
  279. // START OF DEATH MESSAGES
  280.  
  281. DamageCause cause = e.getCause();
  282.  
  283. if (cause == DamageCause.FIRE || cause == DamageCause.FIRE_TICK) {
  284.  
  285. for (Player local : p.getWorld().getPlayers()) {
  286.  
  287. local.sendMessage(Config.getS("Death.Messages.Fire").replace("%victim%", p.getName()));
  288.  
  289. }
  290.  
  291. } else if (cause == DamageCause.FALL) {
  292.  
  293. for (Player local : p.getWorld().getPlayers()) {
  294.  
  295. local.sendMessage(Config.getS("Death.Messages.Fall").replace("%victim%", p.getName()));
  296.  
  297. }
  298.  
  299. } else if (cause == DamageCause.VOID) {
  300.  
  301. for (Player local : p.getWorld().getPlayers()) {
  302.  
  303. local.sendMessage(Config.getS("Death.Messages.Void").replace("%victim%", p.getName()));
  304.  
  305. }
  306.  
  307. } else if (cause == DamageCause.ENTITY_ATTACK) {
  308.  
  309. System.out.println("[Debug] Entity Attack Registered");
  310.  
  311. EntityDamageByEntityEvent entityEvent = (EntityDamageByEntityEvent) e;
  312.  
  313. if (p instanceof Player && entityEvent.getDamager().getType() == EntityType.PLAYER) {
  314.  
  315. Player damager = (Player) entityEvent.getDamager();
  316.  
  317. for (Player local : p.getWorld().getPlayers()) {
  318.  
  319. local.sendMessage(Config.getS("Death.Messages.Player").replace("%victim%", p.getName()).replace("%killer%", damager.getName()));
  320.  
  321. }
  322.  
  323. // UPDATE STATS
  324.  
  325. Game.getInstance().getArena().getStats().addKill(damager.getUniqueId());
  326. Game.getInstance().getArena().getLevels().addExperience(damager, resources.getLevels().getInt("Levels.General.Experience.Kill"));
  327.  
  328. // KILL COMMANDS
  329.  
  330. if (Config.getB("Kill.Commands.Enabled")) {
  331.  
  332. for (String list : Config.getC().getStringList("Kill.Commands.Commands")) {
  333.  
  334. String[] command = list.split(":", 2);
  335. command[1] = command[1].trim();
  336.  
  337. if (command[0].equals("console")) {
  338.  
  339. if (hasPlaceholders) {
  340.  
  341. // modified: apparently %killer% was set to p.getName()
  342. String withPlaceholders = PlaceholderAPI.setPlaceholders(p, command[1].replace("%killer%", damager.getName()));
  343. Bukkit.dispatchCommand(Bukkit.getConsoleSender(), withPlaceholders);
  344.  
  345. } else {
  346.  
  347. Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command[1].trim().replace("%killer%", damager.getName()));
  348.  
  349. }
  350.  
  351. } else if (command[0].equals("player")) {
  352.  
  353. if (hasPlaceholders) {
  354.  
  355. String withPlaceholders = PlaceholderAPI.setPlaceholders(p, command[1].trim().replace("%killer%", damager.getName()));
  356. p.performCommand(withPlaceholders);
  357.  
  358. } else {
  359.  
  360. p.performCommand(command[1].replace("%killer%", damager.getName()));
  361.  
  362. }
  363.  
  364. }
  365.  
  366. }
  367.  
  368. }
  369.  
  370. // SCOREBOARD REFRESH
  371.  
  372. if (resources.getScoreboard().getBoolean("Scoreboard.General.Enabled")) {
  373.  
  374. new BukkitRunnable() {
  375.  
  376. @Override
  377. public void run() {
  378.  
  379. Game.getInstance().getArena().updateScoreboards(damager, false);
  380. // The player who died has their scoreboard reset in the addPlayer method in Arena.java
  381. // so there is no need to do it here
  382.  
  383. }
  384.  
  385. }.runTaskLater(Game.getInstance(), 20L);
  386.  
  387. }
  388.  
  389. }
  390.  
  391. } else if (cause == DamageCause.ENTITY_EXPLOSION || cause == DamageCause.BLOCK_EXPLOSION) {
  392.  
  393. for (Player local : p.getWorld().getPlayers()) {
  394.  
  395. local.sendMessage(Config.getS("Death.Messages.Explosion").replace("%victim%", p.getName()));
  396.  
  397. }
  398.  
  399. } else if (cause == DamageCause.PROJECTILE) {
  400.  
  401. EntityDamageByEntityEvent entityEvent = (EntityDamageByEntityEvent) e;
  402.  
  403. Entity en = entityEvent.getEntity();
  404. Entity damager = entityEvent.getDamager();
  405.  
  406. if (damager instanceof Arrow & en instanceof Player) {
  407.  
  408. Arrow a = (Arrow) damager;
  409.  
  410. if (a.getShooter() != null) {
  411.  
  412. Player t = (Player) en;
  413. Player dam = (Player) a.getShooter();
  414.  
  415. double health2 = p.getHealth();
  416. double damage2 = e.getDamage();
  417. double result2 = health2 - damage2;
  418.  
  419. if (result2 <= 0) {
  420.  
  421. entityEvent.setCancelled(true);
  422.  
  423. for (Player local : p.getWorld().getPlayers()) {
  424.  
  425. local.sendMessage(Config.getS("Death.Messages.Shot").replace("%victim%", t.getName()).replace("%shooter%", dam.getName()));
  426.  
  427. }
  428.  
  429. Game.getInstance().getArena().getStats().addKill(dam.getUniqueId());
  430. Game.getInstance().getArena().getLevels().addExperience(dam, resources.getLevels().getInt("Levels.General.Experience.Kill"));
  431.  
  432. }
  433.  
  434. } else if (damager instanceof Snowball & en instanceof Player) {
  435.  
  436. Snowball snowball = (Snowball) damager;
  437. if (snowball.getShooter() != null) {
  438.  
  439. Player t = (Player) en;
  440. Player dam = (Player) snowball.getShooter();
  441.  
  442. double health2 = p.getHealth();
  443. double damage2 = e.getDamage();
  444. double result2 = health2 - damage2;
  445.  
  446. if (result2 <= 0) {
  447.  
  448. entityEvent.setCancelled(true);
  449.  
  450. for (Player local : p.getWorld().getPlayers()) {
  451.  
  452. local.sendMessage(Config.getS("Death.Messages.Shot").replace("%victim%", t.getName()).replace("%shooter%", dam.getName()));
  453.  
  454. }
  455.  
  456. Game.getInstance().getArena().getStats().addKill(dam.getUniqueId());
  457. Game.getInstance().getArena().getLevels().addExperience(dam, resources.getLevels().getInt("Levels.General.Experience.Kill"));
  458.  
  459. }
  460.  
  461. }
  462.  
  463. }
  464.  
  465. }
  466.  
  467. } else {
  468.  
  469. for (Player local : p.getWorld().getPlayers()) {
  470.  
  471. local.sendMessage(Config.getS("Death.Messages.Unknown").replace("%victim%", p.getName()));
  472.  
  473. }
  474.  
  475. }
  476.  
  477. }
  478.  
  479. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement