Skip to content

Commit d9a23ce

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

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;
@@ -233,7 +235,7 @@ protected void init() {
233235
this.descriptionListWidget.setX(this.rightPaneX);
234236

235237
// Mods folder button
236-
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();
238+
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();
237239

238240
// Done button
239241
ClickableWidget doneButton = ButtonWidget.builder(ScreenTexts.DONE, button -> client.setScreen(previousScreen)).position(this.width / 2 + 4, this.height - 28).size(150, 20).build();
@@ -611,6 +613,21 @@ private static boolean isValidMod(Path mod) {
611613
}
612614
}
613615

616+
private static Path getModsFolder() {
617+
ModContainer container = FabricLoader.getInstance().getModContainer(ModMenu.MOD_ID).orElseThrow();
618+
619+
while (container.getContainingMod().isPresent()) {
620+
container = container.getContainingMod().get();
621+
}
622+
623+
if (container.getOrigin().getKind() == ModOrigin.Kind.PATH) {
624+
return container.getOrigin().getPaths().getFirst().getParent();
625+
} else {
626+
// Fall back on the old behavior
627+
return FabricLoader.getInstance().getGameDir().resolve("mods");
628+
}
629+
}
630+
614631
public boolean getModHasConfigScreen(String modId) {
615632
if (this.modScreenErrors.containsKey(modId)) {
616633
return false;

0 commit comments

Comments
 (0)