Advertisement
Cool_boy21

Untitled

May 31st, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.39 KB | None | 0 0
  1. package com.Coolboy.BetterTeleport;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.LinkedHashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Map.Entry;
  8. import net.md_5.bungee.api.ChatColor;
  9. import net.md_5.bungee.api.chat.ClickEvent;
  10. import net.md_5.bungee.api.chat.TextComponent;
  11. import org.bukkit.Bukkit;
  12. import org.bukkit.Location;
  13. import org.bukkit.Material;
  14. import org.bukkit.command.Command;
  15. import org.bukkit.command.CommandSender;
  16. import org.bukkit.entity.Entity;
  17. import org.bukkit.entity.Player;
  18. import org.bukkit.metadata.FixedMetadataValue;
  19. import org.bukkit.plugin.java.JavaPlugin;
  20.  
  21. public class Main extends JavaPlugin {
  22.  
  23.     @Override
  24.     public void onEnable() {
  25.         getLogger().info("BetterTeleport was started!");
  26.     }
  27.  
  28.     @Override
  29.     public void onDisable() {
  30.         getLogger().info("LobbyPvP was stoped!");
  31.     }
  32.  
  33.     @Override
  34.     public boolean onCommand(CommandSender sender, Command cmd, String commandlabel, String[] args) {
  35.  
  36.         if (!(sender instanceof Player)) {
  37.             Bukkit.getLogger().info("Use this command in game");
  38.             return false;
  39.         }
  40.         //tpdeny
  41.         if (cmd.getName().equals("tpdeny") && sender.hasPermission("essentials.tpdeny")) {
  42.             Player tpTo = (Player) sender;
  43.             Entry<String, Long> player = null;
  44.             //has requests
  45.             if (tpTo.hasMetadata("request")) {
  46.                 //requests hashmap
  47.                 LinkedHashMap<String, Long> requests = (LinkedHashMap<String, Long>) tpTo.getMetadata("requests").get(0).value();
  48.                 if (requests.isEmpty()) {
  49.                     tpTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cУ вас відсутні запити"));
  50.                     return false;
  51.                 }
  52.                 //get last added element
  53.                 if (args.length == 0) {
  54.                     List<Entry<String, Long>> entryList
  55.                             = new ArrayList<Map.Entry<String, Long>>(requests.entrySet());
  56.                     player = entryList.get(entryList.size() - 1);
  57.                     requests = removePlayer(requests, player.getKey());
  58.                 } else if ("all".equals(args[0])) {
  59.                     requests.clear();
  60.                 } else {
  61.                     String name = args[0];
  62.                     player = getPlayer(requests, name);
  63.                     if (player == null) {
  64.                         tpTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4Гравець" + name + "&4не давав запит"));
  65.                     } else {
  66.                         requests = removePlayer(requests, player.getKey());
  67.                     }
  68.                 }
  69.                 //check is player online
  70.                 if (Bukkit.getServer().getPlayer(player.getKey()) != null) {
  71.                     Bukkit.getServer().getPlayer(player.getKey()).sendMessage(ChatColor.translateAlternateColorCodes('&', "&5Запит відхилено"));
  72.                     tpTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&5Запит відхилено"));
  73.                 }
  74.                 tpTo.setMetadata("requests", new FixedMetadataValue(this, requests));
  75.             } else {
  76.                 return false;
  77.             }
  78.         }
  79.         //tpaccept
  80.         if (cmd.getName().equals("tpaccept") && sender.hasPermission("essentials.tpaccept")) {
  81.             Player tpTo = (Player) sender;
  82.             Entry<String, Long> player = null;
  83.             if (tpTo.hasMetadata("requests")) {
  84.                 LinkedHashMap<String, Long> requests = (LinkedHashMap<String, Long>) tpTo.getMetadata("requests").get(0).value();
  85.                 if (requests.isEmpty()) {
  86.                     tpTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4У вас відсутні запити"));
  87.                     return false;
  88.                 }
  89.                 //get last element added
  90.                 if (args.length == 0) {
  91.                     List<Entry<String, Long>> entryList
  92.                             = new ArrayList<Map.Entry<String, Long>>(requests.entrySet());
  93.                     player = entryList.get(entryList.size() - 1);
  94.                     requests = removePlayer(requests, player.getKey());
  95.                     return true;
  96.                 //tp all
  97.                 } else if ("all".equals(args[0])) {
  98.                     if (safeLocation(tpTo) == null) {
  99.                         requests.clear();
  100.                         tpTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4Небезпечне телепортування!"));
  101.                         return true;
  102.                     } else {
  103.                         for (Map.Entry<String, Long> entry : requests.entrySet()) {
  104.                             if(entry !=null) {
  105.                             tryTp(entry, tpTo);
  106.                             }
  107.                         }
  108.                         requests.clear();
  109.                         tpTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Телепортовано усіх з черги!"));
  110.                         return true;
  111.                     }
  112.                 } else {
  113.                     String name = args[0];
  114.                     player = getPlayer(requests, name);
  115.  
  116.                     if (player == null) {
  117.                         tpTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4Гравець " + name + " &4не давав запит"));
  118.                         return false;
  119.                     } else {
  120.                         tryTp(player, tpTo);
  121.                         requests = removePlayer(requests, name);
  122.                         return true;
  123.                     }
  124.                 }
  125.                 tpTo.setMetadata("requests", new FixedMetadataValue(this, requests));
  126.             } else {
  127.                 return false;
  128.             }
  129.         }
  130.  
  131.         if (cmd.getName().equals("call") && sender.hasPermission("essentials.tpa")) {
  132.             Player teleportFrom = (Player) sender;
  133.             LinkedHashMap<String, Long> requests = new LinkedHashMap();
  134.             if (args.length != 1) {
  135.                 teleportFrom.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6/call &c<Player>"));
  136.                 return true;
  137.             }
  138.             String teleportTo = args[0];
  139.             if (teleportFrom.getName().equalsIgnoreCase(teleportTo)) {
  140.                 teleportFrom.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4Неможливо телепортуватись до самого себе"));
  141.                 return false;
  142.             }
  143.             //getting player
  144.             if (Bukkit.getServer().getPlayer(teleportTo) != null) {
  145.                
  146.                 Player destination = Bukkit.getServer().getPlayer(teleportTo);
  147.                 //Message creating
  148.                 teleportFrom.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Запит надіслано гравцю ") + destination.getDisplayName());
  149.                 TextComponent message = new TextComponent(teleportFrom.getDisplayName());
  150.                 TextComponent msg1 = new TextComponent(" просить дозволу телепортуватись до вас \n");
  151.                 msg1.setColor(ChatColor.GOLD);
  152.                 message.addExtra(msg1);
  153.                 TextComponent msg2 = new TextComponent("Щоб телепортуватись, використайте ");
  154.                 msg2.setColor(ChatColor.GOLD);
  155.                 message.addExtra(msg2);
  156.                 TextComponent accept = new TextComponent("/tpaccept \n");
  157.                 accept.setColor(ChatColor.RED);
  158.                 accept.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tpaccept"));
  159.                 message.addExtra(accept);
  160.                 TextComponent msg3 = new TextComponent("Щоб відхилити, використайте ");
  161.                 msg3.setColor(ChatColor.GOLD);
  162.                 message.addExtra(msg3);
  163.                 TextComponent decline = new TextComponent("/tpdeny \n");
  164.                 decline.setColor(ChatColor.RED);
  165.                 decline.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/tpdeny"));
  166.                 message.addExtra(decline);
  167.                 TextComponent msg4 = new TextComponent("Заявка буде автоматично скасована через ");
  168.                 msg4.setColor(ChatColor.GOLD);
  169.                 message.addExtra(msg4);
  170.                 TextComponent msg5 = new TextComponent("90 секунд");
  171.                 msg5.setColor(ChatColor.RED);
  172.                 message.addExtra(msg5);
  173.                 destination.spigot().sendMessage(message);
  174.                 //saving hashmap
  175.                 if (destination.hasMetadata("requests")) {
  176.                     requests = (LinkedHashMap<String, Long>) destination.getMetadata("requests").get(0).value();
  177.                 }
  178.                 if (requests.isEmpty() || !requests.containsKey(teleportFrom.getName())) {
  179.                     requests.put(teleportFrom.getName(), System.currentTimeMillis());
  180.                 } else {
  181.                     requests.replace(teleportFrom.getName(), System.currentTimeMillis());
  182.                 }
  183.                 destination.setMetadata("requests", new FixedMetadataValue(this, requests));
  184.             }
  185.         }
  186.         return true;
  187.     }
  188.     //check is location safe for teleport
  189.     private Location safeLocation(Entity dest) {
  190.         Location tpLoc = dest.getLocation();
  191.         while (!tpLoc.getBlock().getType().isSolid()) {
  192.             tpLoc.setY(tpLoc.getBlockY());
  193.             tpLoc = tpLoc.subtract(0, 1, 0);
  194.             if (tpLoc.getBlockY() == 0) {
  195.                 return null;
  196.             }
  197.             if (tpLoc.getBlock().getType().equals(Material.LAVA)
  198.                     || tpLoc.getBlock().getType().equals(Material.STATIONARY_LAVA)
  199.                     || tpLoc.getBlock().getType().equals(Material.MAGMA)
  200.                     || tpLoc.getBlock().getType().equals(Material.CACTUS)) {
  201.                 return null;
  202.             }
  203.             if (tpLoc.getBlock().isLiquid()) {
  204.                 break;
  205.             }
  206.         }
  207.         tpLoc.add(0, 1, 0);
  208.         return tpLoc;
  209.     }
  210.     //get entry with player
  211.     private Entry<String, Long> getPlayer(LinkedHashMap<String, Long> map, String name) {
  212.         Entry<String, Long> player = null;
  213.         for (Entry<String, Long> entry : map.entrySet()) {
  214.             if (entry.getKey().equals(name)) {
  215.                 player = entry;
  216.                 break;
  217.             }
  218.         }
  219.         return player;
  220.     }
  221.  
  222.     private LinkedHashMap<String, Long> removePlayer(LinkedHashMap<String, Long> map, String name) {
  223.         for (Entry<String, Long> entry : map.entrySet()) {
  224.             if (entry.getKey().equals(name)) {
  225.                 map.remove(entry.getKey());
  226.                 break;
  227.             }
  228.         }
  229.         return map;
  230.     }
  231.    
  232.     private void tryTp(Entry<String,Long> player, Player tpTo) {
  233.                 long timestamp = player.getValue();
  234.                 long diff = System.currentTimeMillis() - timestamp;
  235.                 //timeout for teleport
  236.                 if (diff / 1000 > 90) {
  237.                     tpTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4Час очікування вичерпано"));
  238.                 } else if (Bukkit.getPlayer(player.getKey()) != null) {
  239.                     Player tpFrom = Bukkit.getServer().getPlayer(player.getKey());
  240.                     tpFrom.sendMessage(ChatColor.translateAlternateColorCodes('&', tpTo.getDisplayName() + "&6 прийняв ваш запит на телепортацію"));
  241.                     tpFrom.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Телепортування до гравця " + tpTo.getDisplayName()));
  242.                     if (safeLocation(tpTo) != null) {
  243.                         tpFrom.teleport(safeLocation(tpTo));
  244.                     } else {
  245.                         tpFrom.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4Небезпечне телепортування!"));
  246.                         tpTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4Небезпечне телепортування!"));
  247.                     }
  248.                 } else {
  249.                     tpTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4Гравця не знайдено!"));
  250.                 }
  251.     }
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement