AlexPshkov

DurkaCommand

May 5th, 2021 (edited)
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.45 KB | None | 0 0
  1. package ru.alexpshkov.miningsimulator.game.control;
  2.  
  3. import net.md_5.bungee.api.chat.ClickEvent;
  4. import net.md_5.bungee.api.chat.ComponentBuilder;
  5. import net.md_5.bungee.api.chat.HoverEvent;
  6. import net.md_5.bungee.api.chat.TextComponent;
  7. import org.bukkit.Bukkit;
  8. import org.bukkit.command.Command;
  9. import org.bukkit.command.CommandExecutor;
  10. import org.bukkit.command.CommandSender;
  11. import org.bukkit.entity.Player;
  12. import org.bukkit.plugin.Plugin;
  13.  
  14. import java.util.ArrayList;
  15. import java.util.List;
  16.  
  17. public class DurkaCommand implements CommandExecutor {
  18.  
  19.     private final Plugin plugin;
  20.     private DurkaHandler durkaHandler = null;
  21.  
  22.     public DurkaCommand(Plugin plugin) {
  23.         this.plugin = plugin;
  24.     }
  25.  
  26.     @Override
  27.     public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
  28.         //Для тупых говорим че к чему и почему
  29.         if(args.length < 1) {
  30.             sender.sendMessage("§cИспользуй: §f/durka <ник> [причина]");
  31.             return true;
  32.         }
  33.         if(args[0].equalsIgnoreCase("agree")) {
  34.             if(durkaHandler == null) {
  35.                 sender.sendMessage("§cУпс§f Голосование не идет. Начать голосование - §7/durka <ник> [причина]");
  36.                 return true;
  37.             }
  38.             durkaHandler.voteAgree(sender);
  39.             return true;
  40.         } else if(args[0].equalsIgnoreCase("disagree")) {
  41.             if(durkaHandler == null) {
  42.                 sender.sendMessage("§cУпс§f Голосование не идет. Начать голосование - §7/durka <ник> [причина]");
  43.                 return true;
  44.             }
  45.             durkaHandler.voteDisAgree(sender);
  46.             return true;
  47.         }
  48.         if(durkaHandler != null) {
  49.             sender.sendMessage("§cУпс§f Голосование уже идет. Нельзя начинать еще одно");
  50.             return true;
  51.         }
  52.  
  53.         Player target = Bukkit.getPlayer(args[0]);
  54.  
  55.         /*
  56.  
  57.             Тут можно добавить проверки чтоб игроки слишком часто не голосовали
  58.             и не голосовали за тех, за кого не надо (за себя)
  59.  
  60.          */
  61.         if(target == null) {
  62.             sender.sendMessage("§cУпс§f На сервере нет игрока с ником §7" + args[0]);
  63.             return true;
  64.         }
  65.         String reason = null;
  66.         if(args.length > 1) {
  67.             StringBuilder reasonBuilder = new StringBuilder();
  68.             for (int i = 1; i < args.length; i++) reasonBuilder.append(args[i]);
  69.             reason = reasonBuilder.toString();
  70.         }
  71.  
  72.         //Создаем обработчик голосования
  73.         durkaHandler = new DurkaHandler(
  74.                 reason,
  75.                 () -> fuck(target.getName()),
  76.                 30,
  77.                 sender instanceof Player ? ((Player) sender).getDisplayName() : sender.getName(),
  78.                 target.getDisplayName(),
  79.                 plugin
  80.                 );
  81.  
  82.         return true;
  83.     }
  84.  
  85.     public void fuck(String playerName) {
  86.         Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "jail " + playerName + " durka 5m");
  87.         durkaHandler = null;
  88.     }
  89.  
  90. }
  91.  
  92. class DurkaHandler {
  93.  
  94.     private final String reason;
  95.     private final Runnable action;
  96.     private final Integer voteTime;
  97.     private final String voterName;
  98.     private final String targetName;
  99.     private final Plugin plugin;
  100.  
  101.     private final List<String> votesAgree = new ArrayList<>();
  102.     private final List<String> votesDisAgree = new ArrayList<>();
  103.  
  104.     public DurkaHandler(String reason, Runnable action, Integer voteTime, String voterName, String targetName, Plugin plugin) {
  105.         this.reason = reason;
  106.         this.action = action;
  107.         this.voteTime = voteTime;
  108.         this.voterName = voterName;
  109.         this.plugin = plugin;
  110.         this.targetName = targetName;
  111.  
  112.         startVote();
  113.     }
  114.  
  115.     //Голос за
  116.     public void voteAgree(CommandSender player) {
  117.         String playerName = player.getName();
  118.         if (votesAgree.contains(playerName)) {
  119.             player.sendMessage("§cУпс! §fВы §cуже§f проголосовали §aЗА");
  120.             return;
  121.         }
  122.         if (votesDisAgree.contains(playerName)) {
  123.             player.sendMessage("§eОкей §fВы §eизменили§f свой голос на §aЗА");
  124.             votesDisAgree.remove(playerName);
  125.             votesAgree.add(playerName);
  126.             return;
  127.         }
  128.         votesAgree.add(playerName);
  129.         player.sendMessage("§aУспешно! §fВы проголосовали §aЗА");
  130.     }
  131.  
  132.     //Голос против
  133.     public void voteDisAgree(CommandSender player) {
  134.         String playerName = player.getName();
  135.         if (votesDisAgree.contains(playerName)) {
  136.             player.sendMessage("§cУпс! §fВы §cуже§f проголосовали §cПРОТИВ");
  137.             return;
  138.         }
  139.         if (votesAgree.contains(playerName)) {
  140.             player.sendMessage("§aУспешно! §fВы §eизменили§f свой голос на §cПРОТИВ");
  141.             votesAgree.remove(playerName);
  142.             votesDisAgree.add(playerName);
  143.             return;
  144.         }
  145.         votesDisAgree.add(playerName);
  146.         player.sendMessage("§aУспешно! §fВы проголосовали §cПРОТИВ");
  147.     }
  148.  
  149.     //Начинаем
  150.     private void startVote() {
  151.         TextComponent buttons = getVoteButtons();
  152.         String[] message = getVoteMessage();
  153.  
  154.         Bukkit.getOnlinePlayers().forEach(player -> {
  155.             player.sendMessage(message);
  156.             player.sendMessage(buttons);
  157.         });
  158.  
  159.         Bukkit.getScheduler().runTaskLater(plugin, () -> {
  160.             String[] result = getResultMessage();
  161.             if (votesAgree.size() > votesDisAgree.size()) {
  162.                 result[1] = "§aДа! §fИгрок §e" + targetName + "§f будет посажен в дурку на §e5 минут";
  163.                 action.run();
  164.             } else if (votesAgree.size() < votesDisAgree.size())
  165.                 result[1] = "§cНет! §fИгрок §e" + targetName + "§f не будет посажен в дурку";
  166.             Bukkit.getOnlinePlayers().forEach(player -> player.sendMessage(result));
  167.         }, voteTime * 20);
  168.     }
  169.  
  170.     //Кнопки (чтоб облегчить код)
  171.     private TextComponent getVoteButtons() {
  172.         TextComponent zero = new TextComponent("         ");
  173.         TextComponent zero2 = new TextComponent("         ");
  174.  
  175.         TextComponent agree = new TextComponent("§7[§a§lЯ за§r§7]");
  176.         agree.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/durka agree"));
  177.         agree.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§fНажми чтобы §aсогласиться").create()));
  178.  
  179.         zero.addExtra(agree);
  180.  
  181.         TextComponent disagree = new TextComponent("§7[§c§lЯ против§r§7]");
  182.         disagree.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/durka disagree"));
  183.         disagree.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§fНажми чтобы §cне согласится").create()));
  184.  
  185.         zero2.addExtra(disagree);
  186.         zero.addExtra(zero2);
  187.         zero.addExtra("\n");
  188.         return zero;
  189.     }
  190.  
  191.     //Сообщение о начале
  192.     private String[] getVoteMessage() {
  193.         return new String[]{
  194.                 " ",
  195.                 "                    §aГолосование!",
  196.                 "§fИгрок §e" + voterName + "§f захотел §aпосадить",
  197.                 "§fв дурку§r §fигрока §e" + targetName + "§f Стоит?",
  198.                 reason != null ? " §6↪ §fПричина - §7§o" + reason : " "
  199.         };
  200.     }
  201.  
  202.     //Сообщение о конце
  203.     public String[] getResultMessage() {
  204.         return new String[] {
  205.                 "§r",
  206.                 "§eНичья! §fИгрок §e" + targetName + "§f останется нетронутым",
  207.                 "§r",
  208.                 "         §7[§a§l" + votesAgree.size() + "§r§7]         §7[§c§l" + votesDisAgree.size() + "§r§7]"
  209.         };
  210.     }
  211. }
Add Comment
Please, Sign In to add comment