Skip to content

Commit 8ac0658

Browse files
committed
Open the mods folder even when it has been relocated.
- Open the right mods folder (resolves #937)
1 parent 5b47fac commit 8ac0658

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import com.terraformersmc.modmenu.util.mod.Mod;
1515
import com.terraformersmc.modmenu.util.mod.ModBadgeRenderer;
1616
import net.fabricmc.loader.api.FabricLoader;
17+
import net.fabricmc.loader.api.ModContainer;
18+
import net.fabricmc.loader.api.metadata.ModOrigin;
1719
import net.minecraft.SharedConstants;
1820
import net.minecraft.client.gl.RenderPipelines;
1921
import net.minecraft.client.gui.DrawContext;
@@ -246,7 +248,7 @@ protected void init() {
246248
this.descriptionListWidget.setX(this.rightPaneX);
247249

248250
// Mods folder button
249-
ClickableWidget modsFolderButton = ButtonWidget.builder(ModMenuScreenTexts.MODS_FOLDER, button -> Util.getOperatingSystem().open(FabricLoader.getInstance().getGameDir().resolve("mods").toUri())).position(this.width / 2 - 154, this.height - 28).size(150, 20).build();
251+
ClickableWidget modsFolderButton = ButtonWidget.builder(ModMenuScreenTexts.MODS_FOLDER, button -> Util.getOperatingSystem().open(getModsFolder().toUri())).position(this.width / 2 - 154, this.height - 28).size(150, 20).build();
250252

251253
// Done button
252254
ClickableWidget doneButton = ButtonWidget.builder(ScreenTexts.DONE, button -> client.setScreen(previousScreen)).position(this.width / 2 + 4, this.height - 28).size(150, 20).build();
@@ -624,6 +626,21 @@ private static boolean isValidMod(Path mod) {
624626
}
625627
}
626628

629+
private static Path getModsFolder() {
630+
ModContainer container = FabricLoader.getInstance().getModContainer(ModMenu.MOD_ID).orElseThrow();
631+
632+
while (container.getContainingMod().isPresent()) {
633+
container = container.getContainingMod().get();
634+
}
635+
636+
if (container.getOrigin().getKind() == ModOrigin.Kind.PATH) {
637+
return container.getOrigin().getPaths().getFirst().getParent();
638+
} else {
639+
// Fall back on the old behavior
640+
return FabricLoader.getInstance().getGameDir().resolve("mods");
641+
}
642+
}
643+
627644
public boolean getModHasConfigScreen(String modId) {
628645
if (this.modScreenErrors.containsKey(modId)) {
629646
return false;

0 commit comments

Comments
 (0)