2020-12-28 12:12:59 +01:00
|
|
|
package io.gitlab.jfronny.respackopts.integration;
|
2020-11-24 22:04:13 +01:00
|
|
|
|
2021-02-15 11:44:59 +01:00
|
|
|
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
|
|
|
|
import com.terraformersmc.modmenu.api.ModMenuApi;
|
2020-12-28 12:12:59 +01:00
|
|
|
import io.gitlab.jfronny.respackopts.Respackopts;
|
2020-11-24 22:04:13 +01:00
|
|
|
import me.shedaniel.clothconfig2.api.ConfigBuilder;
|
|
|
|
import me.shedaniel.clothconfig2.api.ConfigCategory;
|
|
|
|
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
|
2020-12-21 14:51:49 +01:00
|
|
|
import net.minecraft.client.MinecraftClient;
|
2020-11-24 22:04:13 +01:00
|
|
|
import net.minecraft.client.gui.screen.FatalErrorScreen;
|
2021-08-24 13:57:42 +02:00
|
|
|
import net.minecraft.server.integrated.IntegratedServer;
|
2020-11-24 22:04:13 +01:00
|
|
|
import net.minecraft.text.TranslatableText;
|
|
|
|
|
2021-04-05 21:33:16 +02:00
|
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
|
2020-12-28 12:12:59 +01:00
|
|
|
public class ModMenuCompat implements ModMenuApi {
|
2020-11-24 22:04:13 +01:00
|
|
|
@Override
|
|
|
|
public ConfigScreenFactory<?> getModConfigScreenFactory() {
|
|
|
|
return parent -> {
|
|
|
|
try {
|
|
|
|
ConfigBuilder builder;
|
|
|
|
builder = ConfigBuilder.create()
|
|
|
|
.setParentScreen(parent)
|
|
|
|
.setTitle(new TranslatableText("respackopts.mainconfig"));
|
|
|
|
ConfigEntryBuilder entryBuilder = builder.entryBuilder();
|
2020-12-21 14:51:49 +01:00
|
|
|
builder.setSavingRunnable(() -> {
|
|
|
|
Respackopts.save();
|
|
|
|
MinecraftClient.getInstance().reloadResources();
|
2021-08-24 13:57:42 +02:00
|
|
|
IntegratedServer is = MinecraftClient.getInstance().getServer();
|
|
|
|
if (is != null) {
|
|
|
|
is.getDataPackManager().scanPacks();
|
|
|
|
is.reloadResources(is.getDataPackManager().getEnabledNames());
|
|
|
|
}
|
2020-12-21 14:51:49 +01:00
|
|
|
});
|
2021-04-05 21:33:16 +02:00
|
|
|
AtomicBoolean categoryAdded = new AtomicBoolean(false);
|
2021-06-10 18:28:47 +02:00
|
|
|
Respackopts.CONFIG_BRANCH.forEach((id, conf) -> {
|
2021-04-05 21:33:16 +02:00
|
|
|
categoryAdded.set(true);
|
2021-06-10 18:28:47 +02:00
|
|
|
ConfigCategory config = builder.getOrCreateCategory(new TranslatableText("respackopts.title." + id));
|
2021-06-19 13:32:16 +02:00
|
|
|
Respackopts.factory.buildCategory(conf, id, config::addEntry, entryBuilder, "");
|
2020-11-24 22:04:13 +01:00
|
|
|
});
|
2021-04-05 21:33:16 +02:00
|
|
|
if (!categoryAdded.get()) {
|
|
|
|
builder.getOrCreateCategory(new TranslatableText("respackopts.mainconfig"))
|
|
|
|
.addEntry(entryBuilder.startTextDescription(new TranslatableText("respackopts.noPack")).build());
|
|
|
|
}
|
2020-11-24 22:04:13 +01:00
|
|
|
return builder.build();
|
|
|
|
}
|
|
|
|
catch (Throwable t) {
|
|
|
|
t.printStackTrace();
|
|
|
|
return new FatalErrorScreen(new TranslatableText("respackopts.loadFailed"), new TranslatableText("respackopts.loadError"));
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|