Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.alexpshkov.miningsimulator.game.control;
- import net.md_5.bungee.api.chat.ClickEvent;
- import net.md_5.bungee.api.chat.ComponentBuilder;
- import net.md_5.bungee.api.chat.HoverEvent;
- import net.md_5.bungee.api.chat.TextComponent;
- import org.bukkit.Bukkit;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandExecutor;
- import org.bukkit.command.CommandSender;
- import org.bukkit.entity.Player;
- import org.bukkit.plugin.Plugin;
- import java.util.ArrayList;
- import java.util.List;
- public class DurkaCommand implements CommandExecutor {
- private final Plugin plugin;
- private DurkaHandler durkaHandler = null;
- public DurkaCommand(Plugin plugin) {
- this.plugin = plugin;
- }
- @Override
- public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
- //Для тупых говорим че к чему и почему
- if(args.length < 1) {
- sender.sendMessage("§cИспользуй: §f/durka <ник> [причина]");
- return true;
- }
- if(args[0].equalsIgnoreCase("agree")) {
- if(durkaHandler == null) {
- sender.sendMessage("§cУпс§f Голосование не идет. Начать голосование - §7/durka <ник> [причина]");
- return true;
- }
- durkaHandler.voteAgree(sender);
- return true;
- } else if(args[0].equalsIgnoreCase("disagree")) {
- if(durkaHandler == null) {
- sender.sendMessage("§cУпс§f Голосование не идет. Начать голосование - §7/durka <ник> [причина]");
- return true;
- }
- durkaHandler.voteDisAgree(sender);
- return true;
- }
- if(durkaHandler != null) {
- sender.sendMessage("§cУпс§f Голосование уже идет. Нельзя начинать еще одно");
- return true;
- }
- Player target = Bukkit.getPlayer(args[0]);
- /*
- Тут можно добавить проверки чтоб игроки слишком часто не голосовали
- и не голосовали за тех, за кого не надо (за себя)
- */
- if(target == null) {
- sender.sendMessage("§cУпс§f На сервере нет игрока с ником §7" + args[0]);
- return true;
- }
- String reason = null;
- if(args.length > 1) {
- StringBuilder reasonBuilder = new StringBuilder();
- for (int i = 1; i < args.length; i++) reasonBuilder.append(args[i]);
- reason = reasonBuilder.toString();
- }
- //Создаем обработчик голосования
- durkaHandler = new DurkaHandler(
- reason,
- () -> fuck(target.getName()),
- 30,
- sender instanceof Player ? ((Player) sender).getDisplayName() : sender.getName(),
- target.getDisplayName(),
- plugin
- );
- return true;
- }
- public void fuck(String playerName) {
- Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "jail " + playerName + " durka 5m");
- durkaHandler = null;
- }
- }
- class DurkaHandler {
- private final String reason;
- private final Runnable action;
- private final Integer voteTime;
- private final String voterName;
- private final String targetName;
- private final Plugin plugin;
- private final List<String> votesAgree = new ArrayList<>();
- private final List<String> votesDisAgree = new ArrayList<>();
- public DurkaHandler(String reason, Runnable action, Integer voteTime, String voterName, String targetName, Plugin plugin) {
- this.reason = reason;
- this.action = action;
- this.voteTime = voteTime;
- this.voterName = voterName;
- this.plugin = plugin;
- this.targetName = targetName;
- startVote();
- }
- //Голос за
- public void voteAgree(CommandSender player) {
- String playerName = player.getName();
- if (votesAgree.contains(playerName)) {
- player.sendMessage("§cУпс! §fВы §cуже§f проголосовали §aЗА");
- return;
- }
- if (votesDisAgree.contains(playerName)) {
- player.sendMessage("§eОкей §fВы §eизменили§f свой голос на §aЗА");
- votesDisAgree.remove(playerName);
- votesAgree.add(playerName);
- return;
- }
- votesAgree.add(playerName);
- player.sendMessage("§aУспешно! §fВы проголосовали §aЗА");
- }
- //Голос против
- public void voteDisAgree(CommandSender player) {
- String playerName = player.getName();
- if (votesDisAgree.contains(playerName)) {
- player.sendMessage("§cУпс! §fВы §cуже§f проголосовали §cПРОТИВ");
- return;
- }
- if (votesAgree.contains(playerName)) {
- player.sendMessage("§aУспешно! §fВы §eизменили§f свой голос на §cПРОТИВ");
- votesAgree.remove(playerName);
- votesDisAgree.add(playerName);
- return;
- }
- votesDisAgree.add(playerName);
- player.sendMessage("§aУспешно! §fВы проголосовали §cПРОТИВ");
- }
- //Начинаем
- private void startVote() {
- TextComponent buttons = getVoteButtons();
- String[] message = getVoteMessage();
- Bukkit.getOnlinePlayers().forEach(player -> {
- player.sendMessage(message);
- player.sendMessage(buttons);
- });
- Bukkit.getScheduler().runTaskLater(plugin, () -> {
- String[] result = getResultMessage();
- if (votesAgree.size() > votesDisAgree.size()) {
- result[1] = "§aДа! §fИгрок §e" + targetName + "§f будет посажен в дурку на §e5 минут";
- action.run();
- } else if (votesAgree.size() < votesDisAgree.size())
- result[1] = "§cНет! §fИгрок §e" + targetName + "§f не будет посажен в дурку";
- Bukkit.getOnlinePlayers().forEach(player -> player.sendMessage(result));
- }, voteTime * 20);
- }
- //Кнопки (чтоб облегчить код)
- private TextComponent getVoteButtons() {
- TextComponent zero = new TextComponent(" ");
- TextComponent zero2 = new TextComponent(" ");
- TextComponent agree = new TextComponent("§7[§a§lЯ за§r§7]");
- agree.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/durka agree"));
- agree.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§fНажми чтобы §aсогласиться").create()));
- zero.addExtra(agree);
- TextComponent disagree = new TextComponent("§7[§c§lЯ против§r§7]");
- disagree.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/durka disagree"));
- disagree.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§fНажми чтобы §cне согласится").create()));
- zero2.addExtra(disagree);
- zero.addExtra(zero2);
- zero.addExtra("\n");
- return zero;
- }
- //Сообщение о начале
- private String[] getVoteMessage() {
- return new String[]{
- " ",
- " §aГолосование!",
- "§fИгрок §e" + voterName + "§f захотел §aпосадить",
- "§fв дурку§r §fигрока §e" + targetName + "§f Стоит?",
- reason != null ? " §6↪ §fПричина - §7§o" + reason : " "
- };
- }
- //Сообщение о конце
- public String[] getResultMessage() {
- return new String[] {
- "§r",
- "§eНичья! §fИгрок §e" + targetName + "§f останется нетронутым",
- "§r",
- " §7[§a§l" + votesAgree.size() + "§r§7] §7[§c§l" + votesDisAgree.size() + "§r§7]"
- };
- }
- }
Add Comment
Please, Sign In to add comment