22
33import com .evandev .fieldguide .Constants ;
44import com .evandev .fieldguide .FieldGuideLimits ;
5+ import com .evandev .fieldguide .api .EntryVariantData ;
6+ import com .evandev .fieldguide .api .GuideEntry ;
57import com .evandev .fieldguide .client .ClientFieldGuideManager ;
68import com .evandev .fieldguide .client .data .JournalPage ;
79import com .evandev .fieldguide .client .gui .toasts .FieldGuideToast ;
810import com .evandev .fieldguide .client .gui .util .IconCacheManager ;
11+ import com .evandev .fieldguide .client .manager .ClientTextManager ;
912import com .evandev .fieldguide .config .ClientConfig ;
1013import com .evandev .fieldguide .entry .EntryResolver ;
1114import com .evandev .fieldguide .network .MarkSeenPacket ;
@@ -465,8 +468,11 @@ public void exportToLang(String type) {
465468
466469 private @ NotNull JsonObject getLangJson (String type ) {
467470 JsonObject langJson = new JsonObject ();
471+ Map <String , String > sortedEntries = new TreeMap <>();
472+
468473 boolean exportNames = type .equals ("names" ) || type .equals ("all" );
469474 boolean exportDesc = type .equals ("descriptions" ) || type .equals ("all" );
475+ boolean exportMissing = type .equals ("missing" );
470476
471477 if (exportNames ) {
472478 for (Map .Entry <String , String > entry : customNames .entrySet ()) {
@@ -478,9 +484,9 @@ public void exportToLang(String type) {
478484
479485 if (parts .length > 1 ) { // variant
480486 String variantSuffix = parts [1 ].toLowerCase (Locale .ROOT );
481- langJson . addProperty ("fieldguide.name." + entryType + "." + path + "." + variantSuffix , entry .getValue ());
487+ sortedEntries . put ("fieldguide.name." + entryType + "." + path + "." + variantSuffix , entry .getValue ());
482488 } else { // base entity
483- langJson . addProperty ("fieldguide.name." + entryType + "." + path , entry .getValue ());
489+ sortedEntries . put ("fieldguide.name." + entryType + "." + path , entry .getValue ());
484490 }
485491 }
486492 }
@@ -493,9 +499,57 @@ public void exportToLang(String type) {
493499 String path = prefixedId .getPath ().replace ('/' , '.' );
494500
495501 String variantSuffix = parts .length > 1 ? "." + parts [1 ].toLowerCase (Locale .ROOT ) : "" ;
496- langJson .addProperty ("fieldguide." + entryType + "." + path + variantSuffix + ".description" , entry .getValue ());
502+ sortedEntries .put ("fieldguide." + entryType + "." + path + variantSuffix + ".description" , entry .getValue ());
503+ }
504+ }
505+ if (exportMissing ) {
506+ String missingDesc = I18n .get ("fieldguide.description.missing" );
507+ String missingName = I18n .get ("fieldguide.unknown" );
508+
509+ for (Object entry : ClientFieldGuideManager .getValidEntries ()) {
510+ ResourceLocation id = ClientFieldGuideManager .getEntryId (entry );
511+ if (id == null ) continue ;
512+
513+ ResourceLocation prefixedId = EntryResolver .getEntryId (entry , true );
514+ if (prefixedId == null ) prefixedId = id ;
515+
516+ String entryType = prefixedId .getNamespace ();
517+ String path = prefixedId .getPath ().replace ('/' , '.' );
518+
519+ String nameKey = "fieldguide.name." + entryType + "." + path ;
520+ String descKey = "fieldguide." + entryType + "." + path + ".description" ;
521+
522+ if (ClientTextManager .getInstance ().getDefaultNameComponent (entry ).getString ().equals (missingName )) {
523+ sortedEntries .put (nameKey , "" );
524+ }
525+
526+ if (ClientTextManager .getInstance ().getEntryDescription (entry ).equals (missingDesc )) {
527+ sortedEntries .put (descKey , "" );
528+ }
529+
530+ if (entry instanceof GuideEntry ge && ge .hasVisualVariants ()) {
531+ for (EntryVariantData variant : ge .visualVariants ()) {
532+ String varId = variant .variantId ();
533+ String varStr = varId .toLowerCase (Locale .ROOT );
534+
535+ String varNameKey = "fieldguide.name." + entryType + "." + path + "." + varStr ;
536+ String varDescKey = "fieldguide." + entryType + "." + path + "." + varStr + ".description" ;
537+
538+ if (ClientTextManager .getInstance ().getDefaultNameComponent (entry , varId ).getString ().equals (missingName )) {
539+ sortedEntries .put (varNameKey , "" );
540+ }
541+ if (ClientTextManager .getInstance ().getEntryDescription (entry , varId ).equals (missingDesc )) {
542+ sortedEntries .put (varDescKey , "" );
543+ }
544+ }
545+ }
497546 }
498547 }
548+
549+ for (Map .Entry <String , String > mapEntry : sortedEntries .entrySet ()) {
550+ langJson .addProperty (mapEntry .getKey (), mapEntry .getValue ());
551+ }
552+
499553 return langJson ;
500554 }
501555}
0 commit comments