Помогите Не работает listener, или...

_MCMaster_

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
DragOn4ik
Hi.
Накодил я тут плагин на паркур. Вроде бы загружается без ошибок, команды работают. Но сам паркур не работает. Т.е. я встаю на старт, ничего не происходит. Встаю на чекпоинт - тоже ничего не происходит.
Исходинки:
PHP:
package com.dragon4ik.parkours;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {
   
    public List<String> checkpoints;
    public FileConfiguration config;
    public Map<Player, Location> map;
    public Map<Player, Boolean> started;
    public void onEnable() {
        saveDefaultConfig();
        config = getConfig();
        config.options().copyDefaults(true);
        checkpoints = config.getStringList("checkpoints");
        map = new HashMap<Player, Location>();
        started = new HashMap<Player, Boolean>();
        ParkourListener listener = new ParkourListener(this);
        Commands commands = new Commands(this);
        Bukkit.getPluginManager().registerEvents(listener, this);
        getCommand("parkour-checkpoint").setExecutor(commands);
        getCommand("parkour-start").setExecutor(commands);
        getCommand("parkour-finish").setExecutor(commands);
        getCommand("parkour-reload").setExecutor(commands);
    }

}
PHP:
package com.dragon4ik.parkours;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.plugin.RegisteredServiceProvider;

import net.md_5.bungee.api.ChatColor;
import net.milkbowl.vault.economy.Economy;

public class ParkourListener implements Listener{
   
    Main plugin;
    public ParkourListener(Main plugin) {
        this.plugin = plugin;
    }
   
    @EventHandler
    public void onPlayerMove(PlayerMoveEvent e) {
        if(plugin.checkpoints.contains(locToStr(e.getPlayer().getLocation()))) {
            Player p = e.getPlayer();
            Location loc = p.getLocation();
            if(!plugin.started.get(p)) {
                return;
            }
            if(locToStr(plugin.map.get(p)).equalsIgnoreCase(locToStr(loc))) {
                return;
            }
            mapSet(p, loc);
            p.sendTitle("", ChatColor.GREEN + "Checkpoint!", 20, 20, 20);
        }
        if(locToStr(e.getPlayer().getLocation()).equalsIgnoreCase(plugin.config.getString("start"))) {
            Player p = e.getPlayer();
            if(plugin.started.get(p)) {
                return;
            }
            mapSetStarted(p, true);
            p.sendTitle(ChatColor.GREEN + "Start!", ChatColor.GREEN + "Вы начали проходить паркур", 20, 20, 20);
        }
        if(locToStr(e.getPlayer().getLocation()).equalsIgnoreCase(plugin.config.getString("finish"))) {
            Player p = e.getPlayer();
            if(!plugin.started.get(p)) {
                return;
            }
            mapSetStarted(p, false);
            p.sendTitle(ChatColor.RED + "Поздравляем!", ChatColor.GREEN + "Вы прошли паркур, и получаете " + plugin.config.getDouble("reward") + "$", 20, 20, 20);
            addMoney(p, plugin.config.getDouble("reward"));
        }
    }
   
public static Economy e;
   
    public static void init() {
        RegisteredServiceProvider<Economy> reg = Bukkit.getServicesManager().getRegistration(Economy.class);
        if(reg != null) e = reg.getProvider();
    }
   
    public static boolean takeMoney(Player p, double amount) {
        if(e == null) return false;
        if(e.getBalance(p) < amount) return false;
        return e.withdrawPlayer(p, amount).transactionSuccess();
    }
   
    public static boolean addMoney(Player p, double amount) {
        if(e == null) return false;
        return e.depositPlayer(p, amount).transactionSuccess();
    }

    public static String locToStr(Location loc) {
        return loc.getWorld().getName() + "_" + loc.getBlockX() + "_" + loc.getBlockY() + "_" + loc.getBlockZ();
    }
   
    public void mapSet(Player p, Location loc) {
        if(plugin.map.containsKey(p)) {
            plugin.map.remove(p);
            plugin.map.put(p, loc);
        } else {
            plugin.map.put(p, loc);
        }
    }
    public void mapSetStarted(Player p, boolean loc) {
        if(plugin.map.containsKey(p)) {
            plugin.started.remove(p);
            plugin.started.put(p, true);
        } else {
            plugin.started.put(p, true);
        }
}
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e) {
        mapSetStarted(e.getPlayer(), false);
    }
}
PHP:
package com.dragon4ik.parkours;

import java.util.List;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

import net.md_5.bungee.api.ChatColor;

public class Commands implements CommandExecutor {
   
    Main plugin;
    public Commands(Main plugin) {
        this.plugin = plugin;
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
       
        if(cmd.getName().equalsIgnoreCase("parkour-checkpoint")) {
            Player p = (Player)sender;
            if(!p.hasPermission("parkour.manage")) {
                p.sendMessage(ChatColor.RED + "Недостаточно прав!");
            }
            List<String> lst = plugin.checkpoints;
            lst.add(ParkourListener.locToStr(p.getLocation()));
            plugin.checkpoints = lst;
            plugin.config.set("checkpoints", plugin.checkpoints);
            plugin.saveConfig();
            plugin.reloadConfig();
            plugin.config = plugin.getConfig();
            p.sendMessage("Чекопоинт добавлен! " + ParkourListener.locToStr(p.getLocation()));
            return true;
        }
        if(cmd.getName().equalsIgnoreCase("parkour-start")) {
            Player p = (Player)sender;
            if(!p.hasPermission("parkour.manage")) {
                p.sendMessage(ChatColor.RED + "Недостаточно прав!");
            }
            plugin.config.set("start", ParkourListener.locToStr(p.getLocation()));
            plugin.saveConfig();
            plugin.reloadConfig();
            plugin.config = plugin.getConfig();
            p.sendMessage("Точка старта установлена! " + ParkourListener.locToStr(p.getLocation()));
            return true;
        }
        if(cmd.getName().equalsIgnoreCase("parkour-finish")) {
            Player p = (Player)sender;
            if(!p.hasPermission("parkour.manage")) {
                p.sendMessage(ChatColor.RED + "Недостаточно прав!");
            }
            plugin.config.set("finish", ParkourListener.locToStr(p.getLocation()));
            plugin.saveConfig();
            plugin.reloadConfig();
            plugin.config = plugin.getConfig();
            p.sendMessage("Точка финиша установлена! " + ParkourListener.locToStr(p.getLocation()));
            return true;
        }
        if(cmd.getName().equalsIgnoreCase("parkour-reload")) {
            if(!sender.hasPermission("parkour.reload")) {
                sender.sendMessage("Not enough permissions!");
                return true;
            }
            plugin.reloadConfig();
            plugin.config = plugin.getConfig();
            sender.sendMessage("Plugin reloaded!");
            return true;
        }
       
       
        return false;
    }
}
 
Могу и пропарсить. Но не суть. В чем же проблема?
Сделай банальный дебаг. Добавь выводы сообщений на разных ключевых моментах событий и функций, и поймешь, что не дает коду работать так как нужно.
 
Сделай банальный дебаг. Добавь выводы сообщений на разных ключевых моментах событий и функций, и поймешь, что не дает коду работать так как нужно.
Ок. Попробую.
 
Назад
Верх