1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем _MCMaster_, 23 ноя 2018.

  1. Автор темы
    _MCMaster_

    _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<
    Stringcheckpoints;
        public 
    FileConfiguration config;
        public 
    Map<PlayerLocationmap;
        public 
    Map<PlayerBooleanstarted;
        public 
    void onEnable() {
            
    saveDefaultConfig();
            
    config getConfig();
            
    config.options().copyDefaults(true);
            
    checkpoints config.getStringList("checkpoints");
            
    map = new HashMap<PlayerLocation>();
            
    started = new HashMap<PlayerBoolean>();
            
    ParkourListener listener = new ParkourListener(this);
            
    Commands commands = new Commands(this);
            
    Bukkit.getPluginManager().registerEvents(listenerthis);
            
    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(ploc);
                
    p.sendTitle(""ChatColor.GREEN "Checkpoint!"202020);
            }
            if(
    locToStr(e.getPlayer().getLocation()).equalsIgnoreCase(plugin.config.getString("start"))) {
                
    Player p e.getPlayer();
                if(
    plugin.started.get(p)) {
                    return;
                }
                
    mapSetStarted(ptrue);
                
    p.sendTitle(ChatColor.GREEN "Start!"ChatColor.GREEN "Вы начали проходить паркур"202020);
            }
            if(
    locToStr(e.getPlayer().getLocation()).equalsIgnoreCase(plugin.config.getString("finish"))) {
                
    Player p e.getPlayer();
                if(!
    plugin.started.get(p)) {
                    return;
                }
                
    mapSetStarted(pfalse);
                
    p.sendTitle(ChatColor.RED "Поздравляем!"ChatColor.GREEN "Вы прошли паркур, и получаете " plugin.config.getDouble("reward") + "$"202020);
                
    addMoney(pplugin.config.getDouble("reward"));
            }
        }
       
    public static 
    Economy e;
       
        public static 
    void init() {
            
    RegisteredServiceProvider<Economyreg Bukkit.getServicesManager().getRegistration(Economy.class);
            if(
    reg != nullreg.getProvider();
        }
       
        public static 
    boolean takeMoney(Player pdouble amount) {
            if(
    == null) return false;
            if(
    e.getBalance(p) < amount) return false;
            return 
    e.withdrawPlayer(pamount).transactionSuccess();
        }
       
        public static 
    boolean addMoney(Player pdouble amount) {
            if(
    == null) return false;
            return 
    e.depositPlayer(pamount).transactionSuccess();
        }

        public static 
    String locToStr(Location loc) {
            return 
    loc.getWorld().getName() + "_" loc.getBlockX() + "_" loc.getBlockY() + "_" loc.getBlockZ();
        }
       
        public 
    void mapSet(Player pLocation loc) {
            if(
    plugin.map.containsKey(p)) {
                
    plugin.map.remove(p);
                
    plugin.map.put(ploc);
            } else {
                
    plugin.map.put(ploc);
            }
        }
        public 
    void mapSetStarted(Player pboolean loc) {
            if(
    plugin.map.containsKey(p)) {
                
    plugin.started.remove(p);
                
    plugin.started.put(ptrue);
            } else {
                
    plugin.started.put(ptrue);
            }
    }
        @
    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 senderCommand cmdString labelString[] args) {
           
            if(
    cmd.getName().equalsIgnoreCase("parkour-checkpoint")) {
                
    Player p = (Player)sender;
                if(!
    p.hasPermission("parkour.manage")) {
                    
    p.sendMessage(ChatColor.RED "Недостаточно прав!");
                }
                List<
    Stringlst 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;
        }
    }
     
  2. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Сравнивать локации через строки... Когда лень пропарсить конфиг
     
  3. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Могу и пропарсить. Но не суть. В чем же проблема?
     
  4. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Сделай банальный дебаг. Добавь выводы сообщений на разных ключевых моментах событий и функций, и поймешь, что не дает коду работать так как нужно.
     
  5. Автор темы
    _MCMaster_

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

    Баллы:
    76
    Имя в Minecraft:
    DragOn4ik
    Ок. Попробую.
     

Поделиться этой страницей