@@ -44,8 +44,10 @@ public static enum DlcInfoStorageType {
44
44
45
45
@ Override
46
46
public List <GameDlc > loadDlcs (Path directory ) throws IOException {
47
- var dlcs = loadDlcsFromDirectory (getDlcPath (directory ));
48
- dlcs .addAll (loadDlcsFromDirectory (directory .resolve ("builtin_dlc" )));
47
+ // Prefer builtin_dlcs in case of duplicates
48
+ var dlcs = new ArrayList <GameDlc >();
49
+ loadDlcsFromDirectory (directory .resolve ("builtin_dlc" ), dlcs );
50
+ loadDlcsFromDirectory (getDlcPath (directory ), dlcs );
49
51
return dlcs ;
50
52
}
51
53
@@ -759,25 +761,29 @@ default Path getDlcPath(Path p) {
759
761
}
760
762
761
763
default List <GameDlc > loadDlcs (Path p ) throws IOException {
762
- return loadDlcsFromDirectory (getDlcPath (p ));
764
+ var dlcs = new ArrayList <GameDlc >();
765
+ loadDlcsFromDirectory (getDlcPath (p ), dlcs );
766
+ return dlcs ;
763
767
}
764
768
765
- default List <GameDlc > loadDlcsFromDirectory (Path directory ) throws IOException {
766
- var dlcs = new ArrayList <GameDlc >();
769
+ default void loadDlcsFromDirectory (Path directory , List <GameDlc > existing ) throws IOException {
767
770
if (!Files .isDirectory (directory )) {
768
- return dlcs ;
771
+ return ;
769
772
}
770
773
771
774
try (var s = Files .list (directory )) {
772
775
s .forEach (f -> {
773
776
try {
774
- GameDlc .fromDirectory (f ).ifPresent (dlcs ::add );
777
+ GameDlc .fromDirectory (f )
778
+ // Add duplicate check, in case DLC updates were messed up by Steam
779
+ .filter (gameDlc -> existing .stream ()
780
+ .noneMatch (other -> other .getName ().equals (gameDlc .getName ())))
781
+ .ifPresent (existing ::add );
775
782
} catch (Exception e ) {
776
783
ErrorHandler .handleException (e );
777
784
}
778
785
});
779
786
}
780
- return dlcs ;
781
787
}
782
788
783
789
default String getModLauncherId (GameInstallation installation , GameMod mod ) {
0 commit comments