Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.45 KB | None | 0 0
  1. package ru.whitebeef.antirelog;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.logging.Logger;
  10.  
  11. import org.bukkit.Bukkit;
  12. import org.bukkit.ChatColor;
  13. import org.bukkit.GameMode;
  14. import org.bukkit.Location;
  15. import org.bukkit.Material;
  16. import org.bukkit.World;
  17. import org.bukkit.configuration.file.FileConfiguration;
  18. import org.bukkit.configuration.file.YamlConfiguration;
  19. import org.bukkit.entity.AreaEffectCloud;
  20. import org.bukkit.entity.Entity;
  21. import org.bukkit.entity.EntityType;
  22. import org.bukkit.entity.LivingEntity;
  23. import org.bukkit.entity.Player;
  24. import org.bukkit.entity.Projectile;
  25. import org.bukkit.entity.TNTPrimed;
  26. import org.bukkit.entity.Zombie;
  27. import org.bukkit.event.EventHandler;
  28. import org.bukkit.event.Listener;
  29. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  30. import org.bukkit.event.entity.EntityDeathEvent;
  31. import org.bukkit.event.entity.PlayerDeathEvent;
  32. import org.bukkit.event.player.PlayerJoinEvent;
  33. import org.bukkit.event.player.PlayerQuitEvent;
  34. import org.bukkit.inventory.Inventory;
  35. import org.bukkit.inventory.ItemStack;
  36. import org.bukkit.inventory.meta.SkullMeta;
  37. import org.bukkit.plugin.PluginBase;
  38. import org.bukkit.plugin.java.JavaPlugin;
  39.  
  40. import net.md_5.bungee.api.ChatMessageType;
  41. import net.md_5.bungee.api.chat.TextComponent;
  42.  
  43. public class Main extends JavaPlugin implements Listener, Runnable {
  44. Logger log = Logger.getLogger("Minecraft");
  45.  
  46. public long seconds = 30;
  47. boolean hideQuit = false;
  48. boolean PlayerDeath = false;
  49. public static Main plugin;
  50.  
  51. ArrayList<String> livingPlayers = new ArrayList<String>();
  52. Map<String, String> mobs = new HashMap<String, String>();
  53. Map<String, Inventory> inv = new HashMap<String, Inventory>();
  54.  
  55. public static PluginBase getInstance() {
  56. return plugin;
  57. }
  58.  
  59. public void onEnable() {
  60. File players = new File(getDataFolder() + File.separator + "players.yml");
  61. FileConfiguration users = YamlConfiguration.loadConfiguration(players);
  62. Bukkit.getPluginManager().registerEvents(this, this);
  63. Bukkit.getScheduler().scheduleSyncRepeatingTask(this, this, 0, 20);
  64. if (!players.exists()) {
  65. try {
  66. players.createNewFile();
  67. users.createSection("allusers");
  68. users.createSection("users");
  69. log.info("[AntiRelog]: Creating new players.yml");
  70. } catch (IOException e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. try {
  75. users.save(players);
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. }
  79. log.info("[AntiRelog]: Successful load!");
  80. }
  81.  
  82. public void onDisable() {
  83. File players = new File(getDataFolder() + File.separator + "players.yml");
  84. FileConfiguration users = YamlConfiguration.loadConfiguration(players);
  85. List<String> list = users.getStringList("allusers");
  86. for (int i = 0; i < list.size(); i++) {
  87. users.set("users." + list.get(i) + ".startpvp", 0);
  88. }
  89. try {
  90. users.save(players);
  91. } catch (IOException e) {
  92. e.printStackTrace();
  93. }
  94. log.info("[AntiRelog]: Successful unload!");
  95. }
  96.  
  97. @EventHandler
  98. public void onPlayerJoin(PlayerJoinEvent p) {
  99. boolean playerIsKicked = false;
  100. p.getPlayer().setCanPickupItems(false);
  101. File players = new File(getDataFolder() + File.separator + "players.yml");
  102. FileConfiguration users = YamlConfiguration.loadConfiguration(players);
  103. List<String> list = users.getStringList("allusers");
  104. if (!list.contains(p.getPlayer().getName())) {
  105. list.add(p.getPlayer().getName());
  106. users.set("allusers", list);
  107. users.createSection("users." + p.getPlayer().getName());
  108. users.createSection("users." + p.getPlayer().getName() + ".quit");
  109. users.createSection("users." + p.getPlayer().getName() + ".startpvp");
  110. users.createSection("users." + p.getPlayer().getName() + ".spawnZombie");
  111. users.set("users." + p.getPlayer().getName() + ".join", seconds);
  112. users.set("users." + p.getPlayer().getName() + ".spawnZombie", false);
  113. } else {
  114. users.set("users." + p.getPlayer().getName() + ".join", seconds);
  115. if ((users.getLong("users." + p.getPlayer().getName() + ".join")
  116. - users.getLong("users." + p.getPlayer().getName() + ".quit")) < 10
  117. && (users.getLong("users." + p.getPlayer().getName() + ".join")
  118. - users.getLong("users." + p.getPlayer().getName() + ".quit")) >= 1) {
  119. if (!p.getPlayer().hasPermission("arp.admin")) {
  120. hideQuit = true;
  121.  
  122. p.getPlayer()
  123. .kickPlayer("&cАнтирелог кикнул вас! Заходите через ".replace('&', '§')
  124. + (10 - (users.getLong("users." + p.getPlayer().getName() + ".join")
  125. - users.getLong("users." + p.getPlayer().getName() + ".quit")))
  126. + " секунд(ы).");
  127. playerIsKicked = true;
  128. if (p.getPlayer().isDead())
  129. hideQuit = false;
  130. }
  131. }
  132. }
  133. try {
  134. users.save(players);
  135. } catch (IOException e) {
  136. e.printStackTrace();
  137. }
  138. boolean find = false;
  139. if (!playerIsKicked)
  140. if (livingPlayers.size() > 0)
  141. if (livingPlayers.contains(p.getPlayer().getName())) {
  142. for (World world : Bukkit.getWorlds()) {
  143. for (Entity e : world.getEntities()) {
  144. if (e.getUniqueId().toString().equals(mobs.get(p.getPlayer().getName()))) {
  145. if (e.getType() == EntityType.ZOMBIE) {
  146. Zombie zombie = (Zombie) e;
  147. Player player = p.getPlayer();
  148. player.setHealth(zombie.getHealth());
  149. player.teleport(zombie);
  150. zombie.remove();
  151. find = true;
  152. }
  153. }
  154.  
  155. }
  156. }
  157. if (!find) {
  158. Player player = p.getPlayer();
  159. PlayerDeath = true;
  160. player.setHealth(0);
  161. }
  162. }
  163. if (!playerIsKicked) {
  164. users.set("users." + p.getPlayer().getName() + ".spawnZombie", false);
  165. livingPlayers.remove(p.getPlayer().getName());
  166. }
  167.  
  168. try {
  169. users.save(players);
  170. } catch (IOException e) {
  171. e.printStackTrace();
  172. }
  173. p.getPlayer().setCanPickupItems(true);
  174. ;
  175. }
  176.  
  177. @EventHandler
  178. public void onPlayerDeath(PlayerDeathEvent e) {
  179. if (PlayerDeath) {
  180. e.setDeathMessage("");
  181. e.getDrops().clear();
  182. }
  183. PlayerDeath = false;
  184. }
  185.  
  186. @EventHandler
  187. public void onPlayerQuit(PlayerQuitEvent e) {
  188. File players = new File(getDataFolder() + File.separator + "players.yml");
  189. FileConfiguration users = YamlConfiguration.loadConfiguration(players);
  190. users.set("users." + e.getPlayer().getName() + ".quit", seconds);
  191. try {
  192. users.save(players);
  193. } catch (IOException ex) {
  194. ex.printStackTrace();
  195. }
  196. if (hideQuit) {
  197. e.setQuitMessage("");
  198. }
  199.  
  200. Player p = e.getPlayer();
  201. if (!(boolean) users.get("users." + p.getPlayer().getName() + ".spawnZombie") && isInPvP(p)
  202. && p.getGameMode() != GameMode.SPECTATOR && !p.isDead()) {
  203. Location loc = p.getLocation();
  204. World world = p.getWorld();
  205. Zombie zombie = (Zombie) world.spawnEntity(loc, EntityType.ZOMBIE);
  206. zombie.setAI(false);
  207. zombie.setGravity(true);
  208. zombie.setCanPickupItems(false);
  209. zombie.setGliding(true);
  210. zombie.setHealth(p.getHealth());
  211. zombie.setCustomName(p.getName());
  212. zombie.getEquipment().setItemInOffHand(new ItemStack(p.getEquipment().getItemInOffHand()));
  213. zombie.getEquipment().setItemInMainHand(new ItemStack(p.getEquipment().getItemInMainHand()));
  214. zombie.getEquipment().setArmorContents(p.getEquipment().getArmorContents());
  215. zombie.getEquipment().setItemInMainHandDropChance(0f);
  216. zombie.getEquipment().setItemInOffHandDropChance(0f);
  217. inv.put(p.getName() + "", p.getInventory());
  218. log.info("Игрок " + p.getName() + " вышел из игры во время пвп! Создание зомби с уникальным id "
  219. + zombie.getUniqueId());
  220. for (int i = 0; i < 36; i++) {
  221. p.getInventory().getItem(i);
  222.  
  223. }
  224. zombie.setBaby(false);
  225. mobs.put(p.getName(), zombie.getUniqueId() + "");
  226. users.set("users." + p.getPlayer().getName() + ".spawnZombie", true);
  227. livingPlayers.add(p.getName());
  228. }
  229. hideQuit = false;
  230. try {
  231. users.save(players);
  232. } catch (IOException e1) {
  233. e1.printStackTrace();
  234. }
  235. }
  236.  
  237. @Override
  238. public void run() {
  239. seconds++;
  240. for (Player player : Bukkit.getOnlinePlayers()) {
  241. if (isInPvP(player))
  242. sendAction(player, "&cВы в пвп! Время выхода: " + getTimeRemainingInPvP(player));
  243. if (getTimeRemainingInPvP(player) == 0) {
  244. pvpStopped(player);
  245. }
  246. }
  247.  
  248. }
  249.  
  250. @SuppressWarnings("deprecation")
  251. @EventHandler
  252. public void mobDeath(EntityDeathEvent e) {
  253. File players = new File(getDataFolder() + File.separator + "players.yml");
  254. FileConfiguration users = YamlConfiguration.loadConfiguration(players);
  255. if (e.getEntityType().equals(EntityType.ZOMBIE)) {
  256. if (!mobs.containsValue(e.getEntity().getUniqueId() + ""))
  257. return;
  258. e.getDrops().clear();
  259. e.setDroppedExp(0);
  260. LivingEntity entity = e.getEntity();
  261. Zombie zombie = (Zombie) entity;
  262. for (int i = 0; i < 41; i++) {
  263. if (inv.get(entity.getCustomName().toString()).getItem(i) != null)
  264. entity.getLocation().getWorld().dropItem(entity.getLocation(),
  265. new ItemStack((ItemStack) inv.get(entity.getCustomName().toString()).getItem(i)));
  266. }
  267. SkullMeta skull = (SkullMeta) Bukkit.getItemFactory().getItemMeta(Material.PLAYER_HEAD);
  268. skull.setOwner(entity.getName());
  269. ItemStack sk = new ItemStack(Material.PLAYER_HEAD, 1);
  270. sk.setItemMeta(skull);
  271. entity.getLocation().getWorld().dropItem(entity.getLocation(), sk);
  272. Player damager = getDamager(entity.getKiller());
  273. for (Player p : Bukkit.getOnlinePlayers()) {
  274. if (damager != null) {
  275. p.sendMessage(ChatColor.RED + "Игрок " + ChatColor.DARK_RED + zombie.getCustomName() + ChatColor.RED
  276. + " умер во время лива от игрока " + ChatColor.DARK_RED + damager.getName() + ChatColor.RED
  277. + "!");
  278. } else {
  279. p.sendMessage(ChatColor.RED + "Игрок " + ChatColor.DARK_RED + zombie.getCustomName() + ChatColor.RED
  280. + " умер во время лива!");
  281. }
  282. users.set("users." + zombie.getCustomName() + ".startpvp", 0);
  283. try {
  284. users.save(players);
  285. } catch (IOException ex) {
  286. ex.printStackTrace();
  287. }
  288. }
  289. }
  290. }
  291.  
  292. @EventHandler
  293. public void onDamageByEntity(EntityDamageByEntityEvent e) {
  294. File players = new File(getDataFolder() + File.separator + "players.yml");
  295. FileConfiguration users = YamlConfiguration.loadConfiguration(players);
  296. if (!e.getEntity().getType().equals(EntityType.PLAYER) || !e.getDamager().getType().equals(EntityType.PLAYER)) {
  297. if (getDamager(e.getDamager()) == null || e.getEntityType() != EntityType.PLAYER)
  298. return;
  299. Player target = (Player) e.getEntity();
  300. Player damager = getDamager(e.getDamager());
  301. tryStartPvP(target);
  302. tryStartPvP(damager);
  303. users.set("users." + damager.getName() + ".startpvp", seconds);
  304. users.set("users." + target.getName() + ".startpvp", seconds);
  305. try {
  306. users.save(players);
  307. } catch (IOException ex) {
  308. ex.printStackTrace();
  309. }
  310. return;
  311. }
  312. Player target = (Player) e.getEntity();
  313. Player damager = getDamager(e.getDamager());
  314. users.set("users." + damager.getName() + ".startpvp", seconds);
  315. users.set("users." + target.getName() + ".startpvp", seconds);
  316. tryStartPvP(target);
  317. tryStartPvP(damager);
  318. try {
  319. users.save(players);
  320. } catch (IOException ex) {
  321. ex.printStackTrace();
  322. }
  323. }
  324.  
  325. private Player getDamager(Entity damager) {
  326. if (damager instanceof Player)
  327. return (Player) damager;
  328. if (damager instanceof Projectile) {
  329. Projectile proj = (Projectile) damager;
  330. if (proj.getShooter() instanceof Player)
  331. return (Player) proj.getShooter();
  332. } else {
  333. if (damager instanceof TNTPrimed) {
  334. TNTPrimed tntPrimed = (TNTPrimed) damager;
  335. try {
  336. if (tntPrimed.getSource().getType() != EntityType.PLAYER)
  337. return null;
  338. } catch (NullPointerException e) {
  339. return null;
  340. }
  341. return getDamager(tntPrimed.getSource());
  342. }
  343. if (damager instanceof AreaEffectCloud) {
  344. AreaEffectCloud aec = (AreaEffectCloud) damager;
  345. if (aec.getSource() instanceof Player)
  346. return (Player) aec.getSource();
  347. }
  348. }
  349. return null;
  350. }
  351.  
  352. public boolean isInPvP(Player player) {
  353. File players = new File(getDataFolder() + File.separator + "players.yml");
  354. FileConfiguration users = YamlConfiguration.loadConfiguration(players);
  355. if (seconds - users.getLong("users." + player.getName() + ".startpvp") <= 30 && seconds > 30
  356. && seconds - users.getLong("users." + player.getName() + ".startpvp") > 0)
  357. return true;
  358. return false;
  359. }
  360.  
  361. public long getTimeRemainingInPvP(Player player) {
  362. File players = new File(getDataFolder() + File.separator + "players.yml");
  363. FileConfiguration users = YamlConfiguration.loadConfiguration(players);
  364. if (isInPvP(player))
  365. return 30 - (seconds - users.getLong("users." + player.getName() + ".startpvp"));
  366. return -1L;
  367. }
  368.  
  369. private void tryStartPvP(Player player) {
  370. File players = new File(getDataFolder() + File.separator + "players.yml");
  371. FileConfiguration users = YamlConfiguration.loadConfiguration(players);
  372. if (seconds < 30) {
  373. player.sendMessage(ChatColor.GREEN + "Временное перемирие " + (31 - seconds) + " секунд");
  374. return;
  375. }
  376. if (!isInPvP(player)) {
  377. String message = "&cВы начали ПВП! Если вы выйдете, то ваш игрок останется в сети!".replace('&', '§');
  378. if (!message.isEmpty())
  379. player.sendMessage(message);
  380. sendTitles(player, true);
  381. users.set("users." + player.getName() + ".startpvp", seconds);
  382. try {
  383. users.save(players);
  384. } catch (IOException e) {
  385. e.printStackTrace();
  386. }
  387. }
  388. }
  389.  
  390. public void pvpStopped(Player player) {
  391. String message = "&aВы вышли из режима ПВП! Вы снова можете выйти!".replace('&', '§');
  392. if (!message.isEmpty())
  393. player.sendMessage(message);
  394. sendAction(player, "&aВы вышли из режима PvP!");
  395. }
  396.  
  397. private void sendTitles(Player player, boolean isPvpStarted) {
  398. String title = isPvpStarted ? "&c&lPvP".replace('&', '§') : "".replace('&', '§');
  399. String subtitle = isPvpStarted ? "".replace('&', '§') : "".replace('&', '§');
  400. if (title == null && subtitle == null)
  401. return;
  402. player.sendTitle(title, subtitle, 10, 30, 10);
  403. }
  404.  
  405. public void sendAction(Player player, String msg) {
  406. player.spigot().sendMessage(ChatMessageType.ACTION_BAR,
  407. TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', msg)));
  408. }
  409.  
  410. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement