Program: 10443
Project: 10443
Buggy source:
@EventHandler public void npcTags(ReplaceableTagEvent event){
  if (!event.matches("String_Node_Str"))   return;
  dNPC n=event.getNPC();
  String type=event.getType() != null ? event.getType().toUpperCase() : "String_Node_Str";
  String subType=event.getSubType() != null ? event.getSubType().toUpperCase() : "String_Node_Str";
  if (type.equals("String_Node_Str")) {
    event.setReplaced(n.getName());
    if (subType.equals("String_Node_Str")) {
      if (n.getCitizen().hasTrait(NicknameTrait.class))       event.setReplaced(n.getCitizen().getTrait(NicknameTrait.class).getNickname());
    }
  }
 else   if (type.equals("String_Node_Str")) {
    if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getHealthTrait().getMaxhealth()));
 else     event.setReplaced(String.valueOf(n.getHealthTrait().getHealth()));
  }
 else   if (type.equals("String_Node_Str")) {
    if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getEntityType().name().toLowerCase().replace('_',' ')));
 else     event.setReplaced(String.valueOf(n.getEntityType().name()));
  }
 else   if (type.equals("String_Node_Str")) {
    event.setReplaced(String.valueOf(n.getId()));
  }
 else   if (type.equals("String_Node_Str")) {
    event.setReplaced(String.valueOf(n.getOwner()));
  }
 else   if (type.equals("String_Node_Str")) {
    Location loc=n.getLocation();
    event.setReplaced(loc.getBlockX() + "String_Node_Str" + loc.getBlockY()+ "String_Node_Str"+ loc.getBlockZ()+ "String_Node_Str"+ n.getWorld().getName());
    if (subType.equals("String_Node_Str"))     event.setReplaced("String_Node_Str" + loc.getBlockX() + "String_Node_Str"+ loc.getBlockY()+ "String_Node_Str"+ loc.getBlockZ()+ "String_Node_Str"+ n.getWorld().getName()+ "String_Node_Str");
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getLocation().getBlockX()));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getLocation().getBlockY()));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getLocation().getBlockZ()));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(loc.add(0,-1,0).getBlock().getType().name());
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(n.getLocation().add(0,-1,0).getBlock().getType().name().toLowerCase().replace('_',' '));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(n.getWorld().getSpawnLocation().getBlockX() + "String_Node_Str" + n.getWorld().getSpawnLocation().getBlockY()+ "String_Node_Str"+ n.getWorld().getSpawnLocation().getBlockZ()+ "String_Node_Str"+ n.getWorld().getName());
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(n.getWorld().getName());
 else     if (subType.equals("String_Node_Str"))     if (previousLocations.containsKey(n.getId()))     event.setReplaced(previousLocations.get(n.getId()).dScriptArgValue());
  }
 else   if (type.equals("String_Node_Str")) {
    if (subType.equals("String_Node_Str"))     event.setReplaced(Boolean.toString(n.getNavigator().isNavigating()));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getNavigator().getLocalParameters().speedModifier()));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(Boolean.toString(n.getNavigator().getLocalParameters().avoidWater()));
 else     if (subType.equals("String_Node_Str")) {
      Location loc=new Location(n.getNavigator().getTargetAsLocation());
      if (loc != null)       event.setReplaced(loc.dScriptArgValue());
    }
 else     if (subType.equals("String_Node_Str")) {
      event.setReplaced(String.valueOf(event.getNPC().getNavigator().getEntityTarget().isAggressive()));
    }
 else     if (subType.equals("String_Node_Str")) {
      event.setReplaced(event.getNPC().getNavigator().getTargetType().toString());
    }
  }
}

Fixed version (ground truth):
@EventHandler public void npcTags(ReplaceableTagEvent event){
  if (!event.matches("String_Node_Str"))   return;
  dNPC n=event.getNPC();
  if (n == null)   return;
  String type=event.getType() != null ? event.getType().toUpperCase() : "String_Node_Str";
  String subType=event.getSubType() != null ? event.getSubType().toUpperCase() : "String_Node_Str";
  if (type.equals("String_Node_Str")) {
    event.setReplaced(n.getName());
    if (subType.equals("String_Node_Str")) {
      if (n.getCitizen().hasTrait(NicknameTrait.class))       event.setReplaced(n.getCitizen().getTrait(NicknameTrait.class).getNickname());
    }
  }
 else   if (type.equals("String_Node_Str")) {
    if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getHealthTrait().getMaxhealth()));
 else     event.setReplaced(String.valueOf(n.getHealthTrait().getHealth()));
  }
 else   if (type.equals("String_Node_Str")) {
    if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getEntityType().name().toLowerCase().replace('_',' ')));
 else     event.setReplaced(String.valueOf(n.getEntityType().name()));
  }
 else   if (type.equals("String_Node_Str")) {
    event.setReplaced(String.valueOf(n.getId()));
  }
 else   if (type.equals("String_Node_Str")) {
    event.setReplaced(String.valueOf(n.getOwner()));
  }
 else   if (type.equals("String_Node_Str")) {
    Location loc=n.getLocation();
    event.setReplaced(loc.getBlockX() + "String_Node_Str" + loc.getBlockY()+ "String_Node_Str"+ loc.getBlockZ()+ "String_Node_Str"+ n.getWorld().getName());
    if (subType.equals("String_Node_Str"))     event.setReplaced("String_Node_Str" + loc.getBlockX() + "String_Node_Str"+ loc.getBlockY()+ "String_Node_Str"+ loc.getBlockZ()+ "String_Node_Str"+ n.getWorld().getName()+ "String_Node_Str");
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getLocation().getBlockX()));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getLocation().getBlockY()));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getLocation().getBlockZ()));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(loc.add(0,-1,0).getBlock().getType().name());
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(n.getLocation().add(0,-1,0).getBlock().getType().name().toLowerCase().replace('_',' '));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(n.getWorld().getSpawnLocation().getBlockX() + "String_Node_Str" + n.getWorld().getSpawnLocation().getBlockY()+ "String_Node_Str"+ n.getWorld().getSpawnLocation().getBlockZ()+ "String_Node_Str"+ n.getWorld().getName());
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(n.getWorld().getName());
 else     if (subType.equals("String_Node_Str"))     if (previousLocations.containsKey(n.getId()))     event.setReplaced(previousLocations.get(n.getId()).dScriptArgValue());
  }
 else   if (type.equals("String_Node_Str")) {
    if (subType.equals("String_Node_Str"))     event.setReplaced(Boolean.toString(n.getNavigator().isNavigating()));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(String.valueOf(n.getNavigator().getLocalParameters().speedModifier()));
 else     if (subType.equals("String_Node_Str"))     event.setReplaced(Boolean.toString(n.getNavigator().getLocalParameters().avoidWater()));
 else     if (subType.equals("String_Node_Str")) {
      Location loc=new Location(n.getNavigator().getTargetAsLocation());
      if (loc != null)       event.setReplaced(loc.dScriptArgValue());
    }
 else     if (subType.equals("String_Node_Str")) {
      event.setReplaced(String.valueOf(event.getNPC().getNavigator().getEntityTarget().isAggressive()));
    }
 else     if (subType.equals("String_Node_Str")) {
      event.setReplaced(event.getNPC().getNavigator().getTargetType().toString());
    }
  }
}