Faits :
A.
Par jugement du 24 août 2012, le Tribunal criminel du Littoral et du Val-de-Travers a condamné X._ pour crimes, délits et contraventions à la LStup, à une peine privative de liberté de 20 mois et a révoqué les sursis accordés le 21 novembre 2005 par le Verhöramt Nidwalden et le 20 novembre 2008 par le Bezirksgericht Zürich. Deux coprévenus, soit A._ et B._, ont également été condamnés, dans le cadre de la même affaire, pour des infractions à la LStup.
Les faits à l'origine de cette condamnation sont en substance les suivants.
Il est reproché à X._ d'avoir, avec B._, cultivé, dans une halle à Bülach, du chanvre, produisant 18 kilos de marijuana et d'en avoir vendu 13 kilos, réalisant un chiffre d'affaires de 77'800 fr. et un bénéfice de 20'000 francs. Il lui est également reproché d'avoir consommé une quantité indéterminée de marijuana.
Le 19 décembre 2011, X._ a été appréhendé à la Rehaklinik de Bellikon et conduit à Neuchâtel où il a été entendu par la police, sans la présence d'un avocat. Lors de son interrogatoire, il a reconnu les faits qui lui sont reprochés. En revanche, lors de l'audience de jugement du 24 août 2012, il a modifié ses premières déclarations et a contesté intégralement les faits reprochés, sous réserve de sa consommation de marijuana.
B.
En date du 8 juillet 2013, la Cour pénale du Tribunal cantonal neuchâtelois a rejeté l'appel formé par X._ contre ce jugement.
C.
Par arrêt 6B_883/2013 du 17 février 2014, le Tribunal fédéral a admis le recours formé par X._ contre le jugement de la Cour pénale, qu'il a annulé, renvoyant la cause à cette autorité pour qu'elle statue à nouveau.
D.
A la suite de ce renvoi, la Cour pénale du Tribunal cantonal neuchâtelois a rendu un nouveau jugement en date du 10 juin 2014, par lequel elle rejette l'appel de X._ et confirme le dispositif du jugement du Tribunal criminel du Littoral et du Val-de-Travers du 24 août 2012.
E.
X._ forme un recours en matière pénale au Tribunal fédéral contre ce jugement. Il conclut, avec suite de frais et dépens, à l'annulation du jugement attaqué et au renvoi de la cause à l'autorité cantonale pour qu'elle statue à nouveau. Il sollicite en outre l'assistance judiciaire.
F.
La cour cantonale a renoncé à présenter des observations. Pour sa part, le Ministère public a conclu au rejet du recours. Enfin, le recourant a confirmé les conclusions de son recours.
Considérant en droit :
1.
1.1. En vertu de l'art. 42 al. 1 LTF, les mémoires de recours doivent être motivés. Conformément à l'art. 42 al. 2 LTF, les motifs doivent exposer succinctement en quoi l'acte attaqué viole le droit. Pour satisfaire à cette exigence, il appartient au recourant de discuter au moins brièvement les considérants de la décision litigieuse (ATF 139 I 306 consid. 1.2 p. 308 s. et l'arrêt cité).
1.2. Conformément à l'art. 54 al. 1 LTF, le présent arrêt sera rendu en français, langue de la décision attaquée, même si le recours a été libellé en allemand, comme l'autorise l'art. 42 al. 1 LTF.
2.
Le recourant reproche à la cour cantonale d'avoir violé les art. 131 et 147 CPP. Il allègue que sa condamnation repose de manière déterminante sur les déclarations de B._, A._ et C._, déclarations recueillies lors d'auditions auxquelles ni lui ni son conseil n'ont assisté.
2.1. Aux termes de l'art. 131 CPP, en cas de défense obligatoire, la direction de la procédure pourvoit à ce que le prévenu soit assisté aussitôt d'un défenseur (al. 1). Si les conditions requises pour la défense obligatoire sont remplies lors de l'ouverture de la procédure préliminaire, la défense doit être mise en oeuvre après la première audition par le ministère public et, en tout état de cause, avant l'ouverture de l'instruction (al. 2). Les preuves administrées avant qu'un défenseur ait été désigné, alors même que la nécessité d'une défense aurait dû être reconnue, ne sont exploitables qu'à condition que le prévenu renonce à en répéter l'administration (al. 3).
Dans son arrêt du 17 février 2014, le Tribunal fédéral a jugé que le recourant remplissait les conditions d'une défense obligatoire au sens de l'art. 130 let. b CPP, de sorte qu'en application de l'art. 131 al. 1 et 2 CPP il appartenait au ministère public de pourvoir à ce qu'il soit assisté d'un défenseur à tout le moins au moment de rendre l'ordonnance d'ouverture d'instruction. C'est la raison pour laquelle il a été admis que l'audition du recourant du 19 décembre 2011 était inexploitable, l'autorité de jugement devant écarter ces déclarations et ne pas les utiliser comme moyen de preuve pour le condamner.
2.2. Conformément à l'art. 147 al. 1 CPP, les parties ont le droit d'assister à l'administration des preuves par le ministère public et les tribunaux et de poser des questions aux comparants.
La partie ou son conseil juridique peut renoncer à participer à l'administration d'une preuve. La preuve qui n'a pas été administrée en présence de la partie ou de son conseil juridique pourra être utilisée à son encontre lorsqu'aucune requête tendant à une confrontation n'a été déposée en temps utile ( OLIVIER THORMANN, in Commentaire romand, Code de procédure pénale suisse, n° 14 s. ad art. 147 CPP). Le prévenu doit requérir la confrontation et son silence à cet égard permet d'en inférer qu'il y a renoncé (voir arrêt 6B_1080/2013 du 22 octobre 2014 consid. 2.2 et la référence citée).
Il ne ressort pas du jugement attaqué que le recourant aurait à un quelconque moment de la procédure requis une confrontation avec C._. Lui-même ne prétend au demeurant pas que tel serait le cas. Dans ces circonstances, il y a lieu d'admettre qu'il a renoncé à une telle confrontation, ce qui rend exploitables les auditions en question (voir DORRIT SCHLEIMINGER METTLER, in Basler Kommentar, Schweizerische Strafprozessordnung, 2e éd., 2014, n° 11 ad art. 147 CPP). La violation, constatée dans l'arrêt du Tribunal fédéral du 17 février 2014, de l'art. 131 CPP n'y change rien puisque même après qu'un défenseur lui a été désigné ni ce dernier ni le recourant n'a requis de confrontation alors qu'ils auraient largement eu la possibilité de le faire au cours de la suite de la procédure.
Pour le surplus, le recourant, accompagné de son avocat qui a d'ailleurs posé des questions aux deux intéressés, a assisté aux interrogatoires de ses coprévenus B._ et A._ lors des débats de première instance (cf. p.-v. d'audition du 24 août 2012, dossier cantonal p. 1359 s. respectivement 1355 ss ). Il a donc bénéficié d'une confrontation. Son mémoire ne contient aucun développement expliquant en quoi cette confrontation consacrerait des divergences avec les auditions initiales devant la police et sur quels points celles-ci seraient par conséquent inexploitables. L'argumentation qu'il présente est insuffisante au regard des exigences minimales de motivation posées par l'art. 42 al. 2 respectivement 106 al. 2 LTF. En particulier, B._ a confirmé lors des débats les déclarations faites à la police (cf. dossier cantonal p. 1359). La cour cantonale s'est largement fondée sur ces dernières déclarations (cf. jugement attaqué p. 9 et 10). Les déclarations en question avaient déjà été évoquées dans le jugement de la cour cantonale du 8 juillet 2013 (dossier cantonal, pièce 1480 p. 9 s.). Le recourant ne pouvait ainsi en ignorer la portée. A défaut de toute explication du recourant dans son mémoire de recours, on ne voit pas pourquoi de telles déclarations n'auraient pas été exploitables à la suite des débats de première instance. Le grief doit être rejeté dans la mesure où il est recevable.
3.
Mal fondé, le recours doit être rejeté dans la mesure où il est recevable. Il n'apparaissait toutefois pas d'emblée voué à l'échec. Il convient dès lors de mettre le recourant au bénéfice de l'assistance judiciaire, sa situation économique le justifiant (art. 64 al. 1 LTF), de désigner Me Eric Stern comme avocat d'office et d'allouer à celui-ci une indemnité à titre d'honoraires, qui sera supportée par la caisse du Tribunal fédéral (art. 64 al. 2 LTF). Il est statué sans frais (art. 66 al. 1 LTF).
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est admise.
3.
Il n'est pas perçu de frais judiciaires.
4.
Me Eric Stern est désigné comme avocat d'office du recourant et une indemnité de 3'000 fr. lui est allouée à titre d'honoraires, supportée par la caisse du Tribunal fédéral.
5.
Le présent arrêt est communiqué aux parties et à la Cour pénale du Tribunal cantonal du canton de Neuchâtel.
Lausanne, le 23 novembre 2015
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
La Greffière : Paquier-Boinay