1414import java .nio .file .StandardCopyOption ;
1515import java .nio .file .attribute .BasicFileAttributes ;
1616import java .util .ArrayList ;
17+ import java .util .Arrays ;
1718import java .util .Locale ;
19+ import java .util .Optional ;
1820import java .util .function .Consumer ;
1921
2022import pojlib .account .MinecraftAccount ;
2729import pojlib .util .FileUtil ;
2830import pojlib .util .VLoader ;
2931import pojlib .util .json .MinecraftInstances ;
32+ import pojlib .util .json .ModsJson ;
3033import pojlib .util .json .ProjectInfo ;
3134import pojlib .util .GsonUtils ;
3235import pojlib .util .JREUtils ;
@@ -38,6 +41,7 @@ public class InstanceHandler {
3841 public static final String DEV_MODS = "https://raw.githubusercontent.com/QuestCraftPlusPlus/Pojlib/refs/heads/QuestCraft-6.0.0/devmods.json" ;
3942
4043 public static MinecraftInstances .Instance create (Activity activity , MinecraftInstances instances , String instanceName , String userHome , String modLoader , String mrpackFilePath , String imageURL ) {
44+ API .finishedDownloading = false ;
4145 File mrpackJson = new File (Constants .USER_HOME + "/instances/" + instanceName .toLowerCase (Locale .ROOT ).replaceAll (" " , "_" ) + "/setup/modrinth.index.json" );
4246
4347 mrpackJson .getParentFile ().mkdirs ();
@@ -245,18 +249,25 @@ public static boolean hasExtraProject(MinecraftInstances.Instance instance, Stri
245249 }
246250
247251 public static boolean removeExtraProject (MinecraftInstances instances , MinecraftInstances .Instance instance , String name ) {
248- ProjectInfo oldInfo = null ;
249- for (ProjectInfo info : instance .extProjects ) {
250- if (info .slug .equalsIgnoreCase (name )) {
251- oldInfo = info ;
252- break ;
253- }
254- }
252+ ProjectInfo oldInfo = Arrays .stream (instance .extProjects ).filter (info -> info .slug .equalsIgnoreCase (name )).findFirst ().orElse (null );
255253
256254 if (oldInfo != null ) {
257255 boolean isMod = oldInfo .type .equals ("mod" );
258256 boolean legacyMod = oldInfo .fileName == null ;
259257
258+ // Check if its a coremod
259+ ModsJson oldMods = instance .parseModsJson (Constants .USER_HOME + "/mods.json" );
260+ if (oldMods != null ) {
261+ Optional <ModsJson .Version > ver = Arrays .stream (oldMods .versions ).filter ((v ) -> !v .name .equals (instance .versionName )).findFirst ();
262+ if (ver .isPresent ()) {
263+ ModsJson .Version version = ver .get ();
264+ Optional <ProjectInfo > info = Arrays .stream (version .coreMods ).filter ((mod ) -> !mod .slug .equals (oldInfo .slug )).findFirst ();
265+ if (info .isPresent ()) {
266+ return false ;
267+ }
268+ }
269+ }
270+
260271 // Delete the mod
261272 File modFile = new File (instance .gameDir + (isMod ? "/mods/" : "/resourcepacks/" ) + (legacyMod ? oldInfo .slug : oldInfo .fileName ) + (isMod ? ".jar" : ".zip" ));
262273 modFile .delete ();
@@ -265,9 +276,10 @@ public static boolean removeExtraProject(MinecraftInstances instances, Minecraft
265276 mods .remove (oldInfo );
266277 instance .extProjects = mods .toArray (mods .toArray (new ProjectInfo [0 ]));
267278 GsonUtils .objectToJsonFile (Constants .USER_HOME + "/instances.json" , instances );
279+ return true ;
268280 }
269281
270- return oldInfo != null ;
282+ return false ;
271283 }
272284
273285 // Return true if instance was deleted
0 commit comments