Need help trouble shooting code.

Discussion in 'Plugin Development' started by nrs23, Jan 21, 2014.

Thread Status:
Not open for further replies.
  1. Offline

    nrs23

    Im trying to write a piece of code that forces a player to break a beacon 10 times be fore it finally drops, iv tried integers but has maps seem to make more sense. I get Null pointer errors when ever someone trys to break a beacon. the line in question is
    Code:
                int i = map.get(loc);
    
    Can anyone help with it?

    The Method is
    Code:
        @EventHandler
        public void onBeaconBreak(BlockBreakEvent event) {
            Player p = event.getPlayer();
            Location loc = event.getBlock().getLocation();
            World tworld = Bukkit.getServer().getWorld("world");
            Location red1 = new Location(tworld, 16, 95, -112);
            Location red2 = new Location(tworld, 3, 88, -109);
            Location red3 = new Location(tworld, 5, 94, -115);
    //        Location blue1 = new Location(tworld, 16.5, 95, -112.5);
    //        Location blue2 = new Location(tworld, 16.5, 95, -112.5);
    //        Location blue3 = new Location(tworld, 16.5, 95, -112.5);
            if (event.getBlock().getType() == (Material.BEACON)) {
                loc.getWorld().playEffect(loc, Effect.MOBSPAWNER_FLAMES, 0);
                  loc.getWorld().playEffect(loc, Effect.SMOKE, 0);
                  loc.getWorld().playSound(loc, Sound.EXPLODE, 10, 1);
                  loc.getWorld().playEffect(loc, Effect.ENDER_SIGNAL, 10);
                if (map.containsKey(loc))
                    ;
                int i = map.get(loc);
                int o = 10 - i;
            if (i < 10) {
                event.setCancelled(true);
                map.put(loc, i + 1);
                if (loc == red1) {
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 1 is under attack!", 10);
                      }
                    for (String b : Team.getBlueTeam()) {
                          Player blues = Bukkit.getPlayer(b);
                          BarAPI.setMessage(blues, p + " is attacking reds Life Support System 1!", 10);
                      }
                } else if (loc == red2) {
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 2 is under attack!", 10);
                    }
                    for (String b : Team.getBlueTeam()) {
                          Player blues = Bukkit.getPlayer(b);
                          BarAPI.setMessage(blues, p + " is attacking reds Life Support System 2!", 10);
                      }
                } else if (loc == red3) {
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 3 is under attack!", 10);
                    }
                    for (String b : Team.getBlueTeam()) {
                          Player blues = Bukkit.getPlayer(b);
                          BarAPI.setMessage(blues, p + " is attacking reds Life Support System 3!", 10);
                      }
                }
                p.sendMessage(ChatColor.RED + "" + o
                        + " More breaks to go before it is destroyed!");
     
            } else {
                map.put(loc, 0);
                if (loc == red1) {
                    red1down = true;
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 1 is Destroyed!", (float)(redlife - damage));
                      }
                    red1.getBlock().setType(Material.GLASS);
                } else if (loc == red2) {
                    red2down = true;
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 2 is Destroyed!", (float)(redlife - damage));
                      }
                    red2.getBlock().setType(Material.GLASS);
     
                } else if (loc == red3) {
                    red3down = true;
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 3 is Destroyed!", (float)(redlife - damage));
                      }
                    red3.getBlock().setType(Material.GLASS);
                }
    /            p.sendMessage("You have destroyed the stone!");
            }
            } else {
                event.setCancelled(true);
            }
           
            if (red1down == true && red2down == true && red3down == true) {
                  Redmortal = true;
                  for (String r : Team.getRedTeam()) {
                      Player reds = Bukkit.getPlayer(r);
                      BarAPI.setMessage(reds, "All Life Support Systems are destroyed, respawn is now IMPOSSIBLE!!");
                  }
              }
        }
     
  2. Offline

    zDylann

    Have you tried using a map? With any kind of counting system, I tend to either use a map or save to a config.

    You are probably getting a NPE from that line because its trying to get an object that doesn't exist on the map.

    EDIT: Can you show me your whole class?
     
  3. Offline

    nrs23

    @zDylann
    Code:
    package nrs.ethereal.facingworlds;
     
    import java.util.HashMap;
     
    import me.confuser.barapi.BarAPI;
     
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Effect;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.Sound;
    import org.bukkit.World;
     
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.block.BlockPlaceEvent;
    import org.bukkit.event.entity.EntityDamageByEntityEvent;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
     
     
    public class EventListener
    implements Listener
     
    {
    Main main;
    boolean Redmortal = false;
    boolean red1down = false;
    boolean red2down = false;
    boolean red3down = false;
    int red1health = 0;
    int red2health = 0;
    int red3health = 0;
    int redlife = 100;
     
    int damage = 33;
    HashMap<Location, Integer> map = new HashMap<Location, Integer>();
    boolean Bluemortal = false;
    boolean blue1down = false;
    boolean blue2down = false;
    boolean blue3down = false;
    int blue1health = 0;
    int blue2health = 0;
    int blue3health = 0;
    int bluelife = 100;
     
     
    public EventListener(Main passedMain)
    {
      this.main = passedMain;
    }   
     
        @EventHandler
        public void onBeaconBreak(BlockBreakEvent event) {
            Player p = event.getPlayer();
            Location loc = event.getBlock().getLocation();
            World tworld = Bukkit.getServer().getWorld("world");
            Location red1 = new Location(tworld, 16, 95, -112);
            Location red2 = new Location(tworld, 3, 88, -109);
            Location red3 = new Location(tworld, 5, 94, -115);
    //        Location blue1 = new Location(tworld, 16.5, 95, -112.5);
    //        Location blue2 = new Location(tworld, 16.5, 95, -112.5);
    //        Location blue3 = new Location(tworld, 16.5, 95, -112.5);
            if (event.getBlock().getType() == (Material.BEACON)) {
                loc.getWorld().playEffect(loc, Effect.MOBSPAWNER_FLAMES, 0);
                  loc.getWorld().playEffect(loc, Effect.SMOKE, 0);
                  loc.getWorld().playSound(loc, Sound.EXPLODE, 10, 1);
                  loc.getWorld().playEffect(loc, Effect.ENDER_SIGNAL, 10);
                if (map.containsKey(loc))
                    ;
                int i = map.get(loc);
                int o = 10 - i;
            if (i < 10) {
                event.setCancelled(true);
                map.put(loc, i + 1);
                if (loc == red1) {
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 1 is under attack!", 10);
                      }
                    for (String b : Team.getBlueTeam()) {
                          Player blues = Bukkit.getPlayer(b);
                          BarAPI.setMessage(blues, p + " is attacking reds Life Support System 1!", 10);
                      }
                } else if (loc == red2) {
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 2 is under attack!", 10);
                    }
                    for (String b : Team.getBlueTeam()) {
                          Player blues = Bukkit.getPlayer(b);
                          BarAPI.setMessage(blues, p + " is attacking reds Life Support System 2!", 10);
                      }
                } else if (loc == red3) {
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 3 is under attack!", 10);
                    }
                    for (String b : Team.getBlueTeam()) {
                          Player blues = Bukkit.getPlayer(b);
                          BarAPI.setMessage(blues, p + " is attacking reds Life Support System 3!", 10);
                      }
                }
                p.sendMessage(ChatColor.RED + "" + o
                        + " More breaks to go before it is destroyed!");
     
            } else {
                map.put(loc, 0);
                if (loc == red1) {
                    red1down = true;
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 1 is Destroyed!", (float)(redlife - damage));
                      }
                    red1.getBlock().setType(Material.GLASS);
                } else if (loc == red2) {
                    red2down = true;
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 2 is Destroyed!", (float)(redlife - damage));
                      }
                    red2.getBlock().setType(Material.GLASS);
     
                } else if (loc == red3) {
                    red3down = true;
                    for (String r : Team.getRedTeam()) {
                          Player reds = Bukkit.getPlayer(r);
                          BarAPI.setMessage(reds, "Life Support System 3 is Destroyed!", (float)(redlife - damage));
                      }
                    red3.getBlock().setType(Material.GLASS);
                }
    //            p.sendMessage("You have destroyed the stone!");
            }
            } else {
                map.put(loc, 1);
                event.setCancelled(true);
            }
           
            if (red1down == true && red2down == true && red3down == true) {
                  Redmortal = true;
                  for (String r : Team.getRedTeam()) {
                      Player reds = Bukkit.getPlayer(r);
                      BarAPI.setMessage(reds, "All Life Support Systems are destroyed, respawn is now IMPOSSIBLE!!");
                  }
              }
        }
       
        @EventHandler
        public void onDeath(PlayerDeathEvent event) {
            Player player = event.getEntity();
            if (event instanceof Player) {
                if (Team.isInTeam(player)){
                    if (Team.getBlueTeam().contains(player) && Bluemortal == true) {
                        player.sendMessage("Your Teams life support is destroyed and you are out of the game.");
                        player.teleport(player.getWorld().getSpawnLocation());
                    }
                }
                return;
            }
        }
     
        @EventHandler
        public void onBlockPlace(BlockPlaceEvent event)   
        {
            Player player = event.getPlayer();
        }
       
        @EventHandler
        public void onJoin(PlayerJoinEvent event) {
            event.setJoinMessage(null);
        }
       
        @EventHandler
        public void onPlayerAttack(EntityDamageByEntityEvent event)
        {
          if ((event.getDamager() instanceof Player))
          {   
            if (Team.getRedTeam().contains(event) && (Team.getRedTeam().contains(event.getDamager()))) {
                event.setCancelled(true);
            }
            if (Team.getBlueTeam().contains(event) && (Team.getBlueTeam().contains(event.getDamager()))) {
                event.setCancelled(true);
            }
          }
        }
    }
     
Thread Status:
Not open for further replies.

Share This Page