More options for ModSyncing and Screen to display missmatching mods

This commit is contained in:
Frank 2021-08-25 15:10:51 +02:00
parent b959e17c18
commit 4692831007
9 changed files with 206 additions and 111 deletions

View file

@ -70,6 +70,11 @@ public abstract class GridScreen extends Screen {
public Font getFont(){
return this.font;
}
@Override
public boolean isPauseScreen() {
return true;
}
@Override
public <T extends GuiEventListener & Widget & NarratableEntry> T addRenderableWidget(T guiEventListener) {

View file

@ -22,6 +22,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;
@Environment(EnvType.CLIENT)
public class ModListScreen extends BCLibScreen {
@ -47,12 +48,29 @@ public class ModListScreen extends BCLibScreen {
this.description = description;
}
public static List<String> localMissing(HelloClient.IServerModMap serverInfo){
return serverInfo.keySet()
.stream()
.filter(modid -> !ModUtil.getMods().keySet().stream().filter(mod -> mod.equals(modid)).findFirst().isPresent()).collect(Collectors.toList());
}
public static List<String> serverMissing(HelloClient.IServerModMap serverInfo){
return ModUtil.getMods().entrySet()
.stream()
.filter(entry -> entry.getValue().metadata.getEnvironment() != ModEnvironment.CLIENT)
.map(entry -> entry.getKey())
.filter(modid -> !serverInfo.keySet().stream().filter(mod -> mod.equals(modid)).findFirst().isPresent()).collect(Collectors.toList());
}
public static void addModDesc(GridColumn grid, java.util.List<ModUtil.ModInfo> mods, HelloClient.IServerModMap serverInfo, GridScreen parent) {
final int STATE_OK = 0;
final int STATE_MISSING = 1;
final int STATE_SERVER_MISSING = 2;
final int STATE_VERSION = 3;
final int STATE_SERVER_MISSING_CLIENT_MOD = 4;
final int STATE_VERSION_NOT_OFFERED = 5;
final int STATE_MISSING_NOT_OFFERED = 6;
List<Triple<String, Integer, String>> items = new LinkedList<>();
if (serverInfo!=null) {
@ -60,13 +78,16 @@ public class ModListScreen extends BCLibScreen {
.stream()
.filter(modid -> !mods.stream().filter(mod -> mod.metadata.getId().equals(modid)).findFirst().isPresent())
.forEach(modid -> {
int size = serverInfo.get(modid).second;
String stateString = serverInfo.get(modid).first;
if (size>0) {
stateString = "Version: " + stateString + ", Size: " + PathUtil.humanReadableFileSize(size);
HelloClient.OfferedModInfo nfo = serverInfo.get(modid);
String stateString = nfo.version();
if (nfo.size()>0) {
stateString = "Version: " + stateString + ", Size: " + PathUtil.humanReadableFileSize(nfo.size());
}
if (nfo.canDownload()) {
stateString += ", offered by server";
}
items.add(new Triple<>(modid, STATE_MISSING, stateString));
items.add(new Triple<>(modid, nfo.canDownload()?STATE_MISSING:STATE_MISSING_NOT_OFFERED, stateString));
});
}
@ -78,12 +99,12 @@ public class ModListScreen extends BCLibScreen {
final String modID = mod.metadata.getId();
Pair<String, Integer> data = serverInfo.get(modID);
HelloClient.OfferedModInfo data = serverInfo.get(modID);
if (data!=null) {
final String modVer = data.first;
final int size = data.second;
final String modVer = data.version();
final int size = data.size();
if (!modVer.equals(mod.getVersion())) {
state = STATE_VERSION;
state = data.canDownload()?STATE_VERSION:STATE_VERSION_NOT_OFFERED;
serverVersion = modVer;
serverSize = size;
}
@ -119,10 +140,16 @@ public class ModListScreen extends BCLibScreen {
int color = GridLayout.COLOR_RED;
final String typeText;
if (state==STATE_VERSION) {
if (state==STATE_VERSION || state==STATE_VERSION_NOT_OFFERED) {
typeText = "[VERSION]";
} else if (state==STATE_MISSING) {
if (state == STATE_VERSION_NOT_OFFERED) {
color = GridLayout.COLOR_YELLOW;
}
} else if (state==STATE_MISSING || state==STATE_MISSING_NOT_OFFERED) {
typeText = "[MISSING]";
if (state == STATE_MISSING_NOT_OFFERED) {
color = GridLayout.COLOR_YELLOW;
}
} else if (state==STATE_SERVER_MISSING || state == STATE_SERVER_MISSING_CLIENT_MOD) {
typeText = "[NOT ON SERVER]";
if (state == STATE_SERVER_MISSING_CLIENT_MOD) {

View file

@ -49,9 +49,9 @@ public class SyncFilesScreen extends BCLibScreen {
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)->{
row.addButton(new TranslatableComponent("title.bclib.syncfiles.modInfo"), 20, font, (button)->{
ModListScreen scr = new ModListScreen(
this,
new TranslatableComponent("title.bclib.syncfiles.modlist"),
@ -61,7 +61,7 @@ public class SyncFilesScreen extends BCLibScreen {
);
Minecraft.getInstance().setScreen(scr);
});
}
grid.addSpacerRow();