Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Статус
Закрыто для дальнейших ответов.

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;
        }
    }
 
Иди ищи экстрасенсов в другом месте, или мы сами должны догадаться какую ошибку ты ищешь.
 
OnRclick не работает и ошибку не выдает. Команды выдают ошибку. К сожалению лог выложу завтра
Ошибка скорее всего очень простая
Посмотрите Пожалуйста правильно ли задан арена менеджер
 
OnRclick не работает и ошибку не выдает. Команды выдают ошибку. К сожалению лог выложу завтра
Ошибка скорее всего очень простая
Посмотрите Пожалуйста правильно ли задан арена менеджер

А с чего он должен работать, если ты не зарегестрировал класс в качестве обработчика событий?
 
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
 
Не слушай команды и события в одном классе
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх