Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Проблемы с AsyncPlayerChatEvent

Discussion in 'Разработка плагинов для новичков' started by xDark, Jul 19, 2016.

Thread Status:
Not open for further replies.
  1. Автор темы
    xDark

    xDark Активный участник Пользователь

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Решил написать плагин, который позволяет оставить заявку на Хелпера, но этот AsyncPlayerChatEvent меня уже доканал.
    При отправке сообщения в чат засчитываются сразу все ответы.
    (Слабонервным не смотреть)
    Code:
    package me.DarkenCake.StaffApply.MAIN;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintStream;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.command.ConsoleCommandSender;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.AsyncPlayerChatEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class XMAINCLASS extends JavaPlugin implements Listener {
        PluginManager pm = Bukkit.getServer().getPluginManager();
        File player = new File(this.getDataFolder().toString().concat(File.separator).concat("player_database".concat(".yml")));
        YamlConfiguration playerManager = YamlConfiguration.loadConfiguration(data);
        File config = new File(this.getDataFolder().toString().concat(File.separator).concat("config".concat(".yml")));
        YamlConfiguration configManager = YamlConfiguration.loadConfiguration(config);
        File folder = new File(this.getDataFolder().toString().concat(File.separator));
     
        String q1 = configManager.getString("Question.1");
        String q2 = configManager.getString("Question.2");
        String q3 = configManager.getString("Question.3");
        String q4 = configManager.getString("Question.4");
        String q5 = configManager.getString("Question.5");
        String q6 = configManager.getString("Question.6");
        String q7 = configManager.getString("Question.7");
        String q8 = configManager.getString("Question.8");
     
        PrintStream sys = System.out;
        @Override
        public void onEnable() {
            sys.println("[StaffApply] Plugin enabled!");
            pm.registerEvents(this, this);
            if (!folder.exists()) {
                folder.mkdirs();
            }
            if (!player.exists()) {
                try {
                    player.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (!config.exists()) {
                try {
                    config.createNewFile();
                    configManager.set("Question.1", "Как часто Вы играете на сервере?");
                    configManager.set("Question.2", "Каков Ващ возраст??");
                    configManager.set("Question.3", "Были ли Вы забанены на нашем сервере, если да, то почему?");
                    configManager.set("Question.4", "Печенье или шоколад?");
                    configManager.set("Question.5", "Вы когда ниубдь покупали донат на нашем сервере, если да, то какой?");
                    configManager.set("Question.6", "Играют ли Ваши друзья на нашем сервере, если да, то назовите их ники.");
                    configManager.set("Question.7", "Почему Вы хотите быть хелпером?");
                    configManager.set("Question.8", "Почему мы должны выбрать именно Вас?");
                    configManager.save(config);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }@Override
        public void onDisable() {
            sys.println("[StaffApply] Plugin disabled!");
        }
        public boolean onCommand(CommandSender s, Command cmd, String str, String args[]) {
            if (s instanceof ConsoleCommandSender) {
                s.sendMessage("This command can not be executed from console!");
                return false;
            }
            String prefix = ChatColor.DARK_GREEN + "[" + ChatColor.WHITE + "StaffApply" + ChatColor.DARK_GREEN + "]";
            if (str.equalsIgnoreCase("apply")) {
                if (args.length > 0) {
                    if (s.hasPermission("apply.mod")) {
                        if (args[0].equalsIgnoreCase("mod")) {
                            if (playerManager.getBoolean(s.getName().toString() + ".applied.mod") != true) {
                                s.sendMessage(prefix + ChatColor.WHITE + " Вы вошли в режим принятие заявок!");
                                s.sendMessage(prefix + ChatColor.WHITE + " В любом момент Вы можете отменить заявку, написав /apply cancel");
                                s.sendMessage(prefix + ChatColor.WHITE + " Если Вы готовы, давайте начнем. Первый вопрос:");
                                s.sendMessage(ChatColor.translateAlternateColorCodes('&', q1));
                                playerManager.set(s.getName().toString() + ".applying", true);
                                playerManager.set(s.getName().toString() + ".question.1", true);
                                try {
                                    playerManager.save(player);
                                } catch (IOException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }else{
                                s.sendMessage(prefix + ChatColor.RED + " Вы уже оставили заявку!!");
                            }
                        }
                    }
                    if (s.hasPermission("apply.cancel")) {
                        if (args[0].equalsIgnoreCase("cancel")) {
                            if (playerManager.getBoolean(s.getName().toString() + ".applying") == true) {
                                s.sendMessage(prefix + ChatColor.WHITE + " Вы вышли из режима принятия заявок!");
                                playerManager.set(s.getName().toString() + ".applying", false);
                                playerManager.set(s.getName().toString() + ".question.1", null);
                                playerManager.set(s.getName().toString() + ".question.2", null);
                                playerManager.set(s.getName().toString() + ".question.3", null);
                                playerManager.set(s.getName().toString() + ".question.4", null);
                                playerManager.set(s.getName().toString() + ".question.5", null);
                                playerManager.set(s.getName().toString() + ".question.6", null);
                                playerManager.set(s.getName().toString() + ".question.7", null);
                                playerManager.set(s.getName().toString() + ".question.8", null);
                                try {
                                    playerManager.save(player);
                                    } catch (IOException e) {
                                        e.printStackTrace();
                                    }
                            }else{
                                s.sendMessage(prefix + ChatColor.RED + " Вы не находитесь в режиме принятия заявок!");
                            }
                        }
                    }
                }
            }
            return true;
        }
        @EventHandler(ignoreCancelled = true)
        public void onAnswer(AsyncPlayerChatEvent event) {
            String prefix = ChatColor.DARK_GREEN + "[" + ChatColor.WHITE + "StaffApply" + ChatColor.DARK_GREEN + "]";
            Player p = event.getPlayer();
            // 1
            if (playerManager.getBoolean(p.getName().toString() + ".applying") == true)
                if (playerManager.getBoolean(p.getName().toString() + ".question.1") == true) {
                    event.setCancelled(true);
                    playerManager.set(p.getName().toString() + ".answer.1", event.getMessage());
             
                    playerManager.set(p.getName().toString() + ".question.1", false);
                    playerManager.set(p.getName().toString() + ".question.2", false);
                    playerManager.set(p.getName().toString() + ".question.2", true);
                    try {
                        playerManager.save(player);
                        } catch (IOException e) {
                            e.printStackTrace();
                            }
                    p.sendMessage(prefix + ChatColor.GOLD + "Ответ засчитан. Следующий вопрос:");
                    p.sendMessage(ChatColor.translateAlternateColorCodes('&', q2));
                                            }
            // 2
            if (playerManager.getBoolean(p.getName().toString() + ".applying") == true)
                if (playerManager.getBoolean(p.getName().toString() + ".question.2") == true) {
                    event.setCancelled(true);
                    playerManager.set(p.getName().toString() + ".answer.2", event.getMessage());
             
                    playerManager.set(p.getName().toString() + ".question.1", false);
                    playerManager.set(p.getName().toString() + ".question.2", false);
                    playerManager.set(p.getName().toString() + ".question.2", false);
                    playerManager.set(p.getName().toString() + ".question.3", false);
                    playerManager.set(p.getName().toString() + ".question.3", true);
                    try {
                        playerManager.save(player);
                        } catch (IOException e) {
                            e.printStackTrace();
                            }
                    p.sendMessage(prefix + ChatColor.GOLD + "Вопрос засчитан! Следующий вопрос:");
                    p.sendMessage(ChatColor.translateAlternateColorCodes('&', q3));
                 
                 
                }
        }
    }
     
    Last edited: Jul 19, 2016
  2. Хостинг MineCraft
    <
  3. Автор темы
    xDark

    xDark Активный участник Пользователь

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
  4. MrTrojan

    MrTrojan Активный участник Пользователь

    Trophy Points:
    98
    Skype:
    mrtrojan.ru
    Имя в Minecraft:
    MrTrojan
    Для кого придумали getLogger().info(...)?
     
  5. Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Trophy Points:
    123
    Для слабаков.
     
  6. Автор темы
    xDark

    xDark Активный участник Пользователь

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Это не решает мою проблему.
     
  7. Dymeth

    Dymeth Активный участник Пользователь

    Trophy Points:
    76
    Ничерта не понял, ибо с телефона. Да ещё и код говнистый. Мой тебе совет - либо храни номер последнего ответа игрока (статус), либо сделай метод для определения последнего вопроса - последовательно проверяй ответы на null, например.
    Ну и не сохраняй ответы сразу в конфиг, а то при отмене заявки мартышкин труд получается. Для заполняемых заявок сделай какой-нибудь HashMap<Player, HashMap<Integer, String>> или даже отдельный класс. И храни там всё до отключения сервера или отмены заполнения, при выключении уже сохраняй.
    Это будет получше, чем каждый раз работать с файлом...
     
  8. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Вай мои глаза. Сколько быдлокода в 1м месте...[DOUBLEPOST=1469034746,1469034626][/DOUBLEPOST]То чувство, когда в жабе удалили массивы хеммапы и тп.[DOUBLEPOST=1469034847][/DOUBLEPOST]А в ведре проигрался getconfig() :D.
     
Thread Status:
Not open for further replies.

Share This Page