BCLib/src/main/java/ru/bclib/gui/screens/SyncFilesScreen.java
2021-08-25 14:11:48 +02:00

113 lines
3.5 KiB
Java

package ru.bclib.gui.screens;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
import ru.bclib.api.dataexchange.handler.autosync.HelloClient;
import ru.bclib.gui.gridlayout.GridCheckboxCell;
import ru.bclib.gui.gridlayout.GridLayout.Alignment;
import ru.bclib.gui.gridlayout.GridRow;
import ru.bclib.util.ModUtil;
@Environment(EnvType.CLIENT)
public class SyncFilesScreen extends BCLibScreen {
private final Component description;
private final SyncFilesScreen.Listener listener;
private final boolean hasConfigFiles;
private final boolean hasFiles;
private final boolean hasMods;
private final boolean shouldDelete;
private final HelloClient.IServerModMap serverInfo;
public SyncFilesScreen(int modFiles, int configFiles, int singleFiles, int folderFiles, int deleteFiles, HelloClient.IServerModMap serverInfo, Listener listener) {
super(new TranslatableComponent("title.bclib.syncfiles"));
this.serverInfo = serverInfo;
this.description = new TranslatableComponent("message.bclib.syncfiles");
this.listener = listener;
this.hasConfigFiles = configFiles>0;
this.hasFiles = singleFiles+folderFiles>0;
this.hasMods = modFiles>0;
this.shouldDelete = deleteFiles>0;
}
protected void initLayout() {
final int BUTTON_HEIGHT = 20;
grid.addRow()
.addMessage(this.description, this.font, Alignment.CENTER);
grid.addSpacerRow(10);
GridRow row;
final GridCheckboxCell mods;
row = grid.addRow();
mods = row.addCheckbox(new TranslatableComponent("message.bclib.syncfiles.mods"), hasMods, BUTTON_HEIGHT, this.font);
mods.setEnabled(hasMods);
if (hasMods) {
row.addSpacer();
row.addButton(new TranslatableComponent("title.bclib.more"), 20, font, (button)->{
ModListScreen scr = new ModListScreen(
this,
new TranslatableComponent("title.bclib.syncfiles.modlist"),
new TranslatableComponent("message.bclib.syncfiles.modlist"),
ModUtil.getMods(),
serverInfo
);
Minecraft.getInstance().setScreen(scr);
});
}
grid.addSpacerRow();
final GridCheckboxCell configs;
row = grid.addRow();
configs = row.addCheckbox(new TranslatableComponent("message.bclib.syncfiles.configs"), hasConfigFiles, BUTTON_HEIGHT, this.font);
configs.setEnabled(hasConfigFiles);
grid.addSpacerRow();
row = grid.addRow();
final GridCheckboxCell folder;
folder = row.addCheckbox(new TranslatableComponent("message.bclib.syncfiles.folders"), hasFiles, BUTTON_HEIGHT, this.font);
folder.setEnabled(hasFiles);
row.addSpacer();
GridCheckboxCell delete;
delete = row.addCheckbox(new TranslatableComponent("message.bclib.syncfiles.delete"), shouldDelete, BUTTON_HEIGHT, this.font);
delete.setEnabled(shouldDelete);
grid.addSpacerRow(30);
row = grid.addRow();
row.addFiller();
row.addButton(CommonComponents.GUI_NO, BUTTON_HEIGHT, this.font, (button) -> {
listener.proceed(false, false, false, false);
});
row.addSpacer();
row.addButton(CommonComponents.GUI_YES, BUTTON_HEIGHT, this.font, (button) -> {
listener.proceed(
mods.isChecked(),
configs.isChecked(),
folder.isChecked(),
delete.isChecked()
);
});
row.addFiller();
}
public boolean shouldCloseOnEsc() {
return false;
}
@Environment(EnvType.CLIENT)
public interface Listener {
void proceed(boolean downloadMods, boolean downloadConfigs, boolean downloadFiles, boolean removeFiles);
}
}