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

  • Автор темы Автор темы xDark
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

xDark

Активный участник
Пользователь
Баллы
96
Решил написать плагин, который позволяет оставить заявку на Хелпера, но этот AsyncPlayerChatEvent меня уже доканал.
При отправке сообщения в чат засчитываются сразу все ответы.
(Слабонервным не смотреть)
JavaScript:
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));
             
             
            }
    }
}
 
Последнее редактирование:
Это не решает мою проблему.
 
Ничерта не понял, ибо с телефона. Да ещё и код говнистый. Мой тебе совет - либо храни номер последнего ответа игрока (статус), либо сделай метод для определения последнего вопроса - последовательно проверяй ответы на null, например.
Ну и не сохраняй ответы сразу в конфиг, а то при отмене заявки мартышкин труд получается. Для заполняемых заявок сделай какой-нибудь HashMap<Player, HashMap<Integer, String>> или даже отдельный класс. И храни там всё до отключения сервера или отмены заполнения, при выключении уже сохраняй.
Это будет получше, чем каждый раз работать с файлом...
 
Вай мои глаза. Сколько быдлокода в 1м месте...
То чувство, когда в жабе удалили массивы хеммапы и тп.
А в ведре проигрался getconfig() :D.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх