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

Помогите Ошибки в коде

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

Статус темы:
Закрыта.
  1. Автор темы
    musel70

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

    Баллы:
    88
    Подскажите, где в этом коде допущены ошибки
    ArenaPVP.java
    Код:
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Fireball;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class ArenaPVP extends JavaPlugin implements Listener
    {
     
        @Override
        public void onEnable(){
            new ArenaManager(this);
            if (getConfig().contains("1"))
            {
            ArenaManager.getManager().loadGames();
            }
            saveDefaultConfig();
        }
       
    @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String args[]){
            if(!(sender instanceof Player)){
                sender.sendMessage("Только игроки могут использовать эту команду!");
                return true;
            }else{
           
            Player p = (Player) sender;
           
            if(cmd.getName().equalsIgnoreCase("create")){
                ArenaManager.getManager().createArena(p.getLocation());
                p.sendMessage("Арена создана в " + p.getLocation().toString());
               
                return true;
            }
            if(cmd.getName().equalsIgnoreCase("join")){
                if(args.length != 1){
                    p.sendMessage("Insuffcient arguments!");
                    return true;
                }
                int num = 0;
                try{
                    num = Integer.parseInt(args[0]);
                }catch(NumberFormatException e){
                    p.sendMessage("Неправильный арена ID");
                }
                ArenaManager.getManager().addPlayer(p, num);
               
                return true;
            }
            if(cmd.getName().equalsIgnoreCase("leave")){
                ArenaManager.getManager().removePlayer(p);
                p.sendMessage("Вы покинули арену!");
               
                return true;
            }
            if(cmd.getName().equalsIgnoreCase("remove")){
                if(args.length != 1){
                    p.sendMessage("Insuffcient arguments!");
                    return true;
                }
                int num = 0;
                try{
                    num = Integer.parseInt(args[0]);
                }catch(NumberFormatException e){
                    p.sendMessage("Неправильный арена ID");
                }
                ArenaManager.getManager().removeArena(num);
               
                return true;
            }
            }
           
            return false;
        }
    @EventHandler
        public void onRClick(PlayerInteractEvent e)
            {
            e.getAction();
            if (Action.RIGHT_CLICK_BLOCK == e.getAction() ||  Action.RIGHT_CLICK_AIR == e.getAction())
            {
                if (e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equals("Dragon's Wand"))
                {
                    Player player = e.getPlayer();
                    player.launchProjectile(Fireball.class);
                   
                }   
            }
            }   
     
    }
    ArenaManager.java
    Код:
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.entity.Player;
    import org.*********ventory.ItemStack;
     
    public class ArenaManager{
     
     
        public Map<String, Location> locs = new HashMap<String, Location>();
     
        public static ArenaManager a = new ArenaManager();
     
        Map<String, ItemStack[]> inv = new HashMap<String, ItemStack[]>();
        Map<String, ItemStack[]> armor = new HashMap<String, ItemStack[]>();
     
        List<Arena> arenas = new ArrayList<Arena>();
        int arenaSize = 0;
     
        ArenaPVP plugin;
        public ArenaManager(ArenaPVP arenaPVP) {
            this.plugin = arenaPVP;
        }
     
        public ArenaManager(){
     
        }
     
     
        public static ArenaManager getManager(){
            return a;
        }
     
     
        public Arena getArena(int i){
            for(Arena a : arenas){
                if(a.getId() == i){
                    return a;
                }
            }
            return null;
        }
     
     
        public void addPlayer(Player p, int i){
            Arena a = getArena(i);
            if(a == null){
                p.sendMessage("Invalid arena!");
                return;
            }
     
            a.getPlayers().add(p.getName());
            inv.put(p.getName(), p.getInventory().getContents());
            armor.put(p.getName(), p.getInventory().getArmorContents());
            p.teleport(a.spawn);
        }
     
     
        public void removePlayer(Player p){
            Arena a = null;
            for(Arena arena : arenas){
                if(arena.getPlayers().contains(p.getName())){
                    a = arena;
                }
             
            }
            if(a == null || !a.getPlayers().contains(p.getName())){
                p.sendMessage("Invalid operation!");
                return;
            }
     
          a.getPlayers().remove(p.getName());
          p.getInventory().setContents(inv.get(p.getName()));
          p.getInventory().setArmorContents(armor.get(p.getName()));
     
          inv.remove(p.getName());
          armor.remove(p.getName());
          p.teleport(locs.get(p.getName()));
          locs.remove(p.getName());   
        }
     
     
        public void createArena(Location l){
          int num = arenaSize + 1;
          arenaSize++;
     
          Arena a = new Arena(l, num);
          arenas.add(a);
     
          plugin.getConfig().set("Arenas" + num, serializeLoc(l));
          List<Integer> list = plugin.getConfig().getIntegerList("Arenas.Arenas");
          list.add(num);
          plugin.getConfig().set("Arenas.Arenas", list);
        }
     
        public void removeArena(int i){
            for(String s : getArena(i).getPlayers()){
                Player p = Bukkit.getPlayerExact(s);
                if(p != null){
                    p.teleport(locs.get(p.getName()));
                    locs.remove(p.getName());
                }
            }
            arenas.remove(getArena(i));
        }
     
        public void loadGames(){   
            for(int i : plugin.getConfig().getIntegerList("Arenas.Arenas")){
                Arena a = new Arena(deserializeLoc(plugin.getConfig().getString("Arenas" + i)), i);
                arenas.add(a);
            }
        }
        public String serializeLoc(Location l){
            return l.getWorld().getName()+","+l.getBlockX()+","+l.getBlockY()+","+l.getBlockZ();
        }
        public Location deserializeLoc(String s){
            String[] st = s.split(",");
            return new Location(Bukkit.getWorld(st[1]), Integer.parseInt(st[1]), Integer.parseInt(st[2]), Integer.parseInt(st[3]));
        }
    }    
    Arena.java
    Код:
    import java.util.ArrayList;
    import java.util.List;
     
    import org.bukkit.Location;
     
    public class Arena{
     
        //you want some info about the arena stored here
            int number = 0;//the arena id
            Location spawn = null;//spawn location for the arena
            List<String> players = new ArrayList<String>();//list of players
     
        //now let's make a few getters/setters, and a constructor
            public Arena(Location loc, int id){
                this.spawn = loc;
                this.number = id;
            }
     
            public int getId(){
                return this.number;
            }
     
            public List<String> getPlayers(){
                return this.players;
            }
        }
     
  2. ptnk

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

    Баллы:
    173
    Иди ищи экстрасенсов в другом месте, или мы сами должны догадаться какую ошибку ты ищешь.
     
    musel70 нравится это.
  3. Автор темы
    musel70

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

    Баллы:
    88
    OnRclick не работает и ошибку не выдает. Команды выдают ошибку. К сожалению лог выложу завтра
    Ошибка скорее всего очень простая
    Посмотрите Пожалуйста правильно ли задан арена менеджер
     
  4. ptnk

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

    Баллы:
    173
    А с чего он должен работать, если ты не зарегестрировал класс в качестве обработчика событий?
     
  5. Автор темы
    musel70

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

    Баллы:
    88
    ptnk Спасибо за помощь. Утром исправлю и проверю
    Вот лог файла
    issued server command: /create 1
    2013-08-20 14:20:58 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'create' in plugin Wizards v0.2
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:191)
    at org.bukkit.craftbukkit.v1_6_R2.CraftServer.dispatchCommand(CraftServer.java:523)
    at net.minecraft.server.v1_6_R2.PlayerConnection.handleCommand(PlayerConnection.java:962)
    at net.minecraft.server.v1_6_R2.PlayerConnection.chat(PlayerConnection.java:880)
    at net.minecraft.server.v1_6_R2.PlayerConnection.a(PlayerConnection.java:837)
    at net.minecraft.server.v1_6_R2.Packet3Chat.handle(SourceFile:49)
    at net.minecraft.server.v1_6_R2.NetworkManager.b(NetworkManager.java:296)
    at net.minecraft.server.v1_6_R2.PlayerConnection.e(PlayerConnection.java:116)
    at net.minecraft.server.v1_6_R2.ServerConnection.b(SourceFile:37)
    at net.minecraft.server.v1_6_R2.DedicatedServerConnection.b(SourceFile:30)
    at net.minecraft.server.v1_6_R2.MinecraftServer.t(MinecraftServer.java:590)
    at net.minecraft.server.v1_6_R2.DedicatedServer.t(DedicatedServer.java:226)
    at net.minecraft.server.v1_6_R2.MinecraftServer.s(MinecraftServer.java:486)
    at net.minecraft.server.v1_6_R2.MinecraftServer.run(MinecraftServer.java:419)
    at net.minecraft.server.v1_6_R2.ThreadServerApplication.run(SourceFile:582)
    Caused by: java.lang.NullPointerException
     
  6. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Не слушай команды и события в одном классе
     
    musel70 нравится это.
Статус темы:
Закрыта.

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