Skip to content

Commit

Permalink
Initial blind port of the mod error screens
Browse files Browse the repository at this point in the history
  • Loading branch information
mezz committed Sep 9, 2018
1 parent dde7dcc commit f851b37
Show file tree
Hide file tree
Showing 19 changed files with 633 additions and 154 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,5 @@ changelog.txt
*.py
*.7z
/logs/

/.project
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public ForgeModContainer()
} catch (MalformedURLException e) {}
config = null;
File cfgFile = new File(Loader.instance().getConfigDir(), "forge.cfg");
File cfgFile = new File(FMLPaths.FMLCONFIG.get().toFile(), "forge.cfg");
config = new Configuration(cfgFile);
syncConfig(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import net.minecraftforge.common.config.Config.LangKey;
import net.minecraftforge.common.config.Config.Name;
import net.minecraftforge.fml.common.FMLLog;
import net.minecraftforge.fml.common.FMLPaths;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.LoaderException;
import net.minecraftforge.fml.loading.moddiscovery.ModAnnotation.EnumHolder;
Expand Down Expand Up @@ -144,7 +145,7 @@ public static void sync(String modid, Config.Type type)
{
FMLLog.log.debug("Attempting to inject @Config classes into {} for type {}", modid, type);
ClassLoader mcl = Loader.instance().getModClassLoader();
File configDir = Loader.instance().getConfigDir();
File configDir = FMLPaths.FMLCONFIG.get().toFile();
Multimap<Config.Type, ASMData> map = asm_data.get(modid);

if (map == null)
Expand Down Expand Up @@ -207,7 +208,7 @@ public static boolean hasConfigForMod(String modid)
static Configuration getConfiguration(String modid, String name) {
if (Strings.isNullOrEmpty(name))
name = modid;
File configDir = Loader.instance().getConfigDir();
File configDir = FMLPaths.FMLCONFIG.get().toFile();
File configFile = new File(configDir, name + ".cfg");
return CONFIGS.get(configFile.getAbsolutePath());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import net.minecraftforge.fml.client.config.GuiConfigEntries.IConfigEntry;
import net.minecraftforge.fml.client.config.IConfigElement;
import net.minecraftforge.fml.common.FMLLog;
import net.minecraftforge.fml.common.FMLPaths;
import net.minecraftforge.fml.common.Loader;
import org.apache.commons.io.IOUtils;

Expand Down Expand Up @@ -1287,7 +1288,7 @@ private void setChild(String name, Configuration child)

public static void enableGlobalConfig()
{
PARENT = new Configuration(new File(Loader.instance().getConfigDir(), "global.cfg"));
PARENT = new Configuration(new File(FMLPaths.FMLCONFIG.get().toFile(), "global.cfg"));
PARENT.load();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,26 @@

package net.minecraftforge.fml.client.gui;

import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

@OnlyIn(Dist.CLIENT)
public class GuiCustomModLoadingErrorScreen extends GuiErrorBase
{
private CustomModLoadingErrorDisplayException customException;

public GuiCustomModLoadingErrorScreen(CustomModLoadingErrorDisplayException customException)
{
this.customException = customException;
}

@Override
public void initGui()
{
super.initGui();
this.customException.initGui(this, fontRenderer);
}

@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks)
{
Expand Down
18 changes: 10 additions & 8 deletions src/main/java/net/minecraftforge/fml/client/gui/GuiDupesFound.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,17 @@

package net.minecraftforge.fml.client.gui;

import net.minecraftforge.fml.common.DuplicateModsFoundException;
import net.minecraftforge.fml.ModContainer;

import java.io.File;
import java.util.Map.Entry;

import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.common.DuplicateModsFoundException;

@OnlyIn(Dist.CLIENT)
public class GuiDupesFound extends GuiErrorBase
{

private DuplicateModsFoundException dupes;

public GuiDupesFound(DuplicateModsFoundException dupes)
Expand All @@ -41,14 +43,14 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks)
this.drawDefaultBackground();
int offset = Math.max(85 - dupes.dupes.size() * 10, 10);
this.drawCenteredString(this.fontRenderer, "Forge Mod Loader has found a problem with your minecraft installation", this.width / 2, offset, 0xFFFFFF);
offset+=10;
offset += 10;
this.drawCenteredString(this.fontRenderer, "You have mod sources that are duplicate within your system", this.width / 2, offset, 0xFFFFFF);
offset+=10;
offset += 10;
this.drawCenteredString(this.fontRenderer, "Mod Id : File name", this.width / 2, offset, 0xFFFFFF);
offset+=5;
offset += 5;
for (Entry<ModContainer, File> mc : dupes.dupes.entries())
{
offset+=10;
offset += 10;
this.drawCenteredString(this.fontRenderer, String.format("%s : %s", mc.getKey().getModId(), mc.getValue().getName()), this.width / 2, offset, 0xEEEEEE);
}
super.drawScreen(mouseX, mouseY, partialTicks);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,25 @@

package net.minecraftforge.fml.client.gui;

import java.awt.Desktop;
import java.io.File;

import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiErrorScreen;
import net.minecraft.client.resources.I18n;

import java.awt.*;
import java.io.File;

import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.common.FMLPaths;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

@OnlyIn(Dist.CLIENT)
public class GuiErrorBase extends GuiErrorScreen
{
private static final Logger LOGGER = LogManager.getLogger();
static final File minecraftDir = new File(Loader.instance().getConfigDir().getParent());
static final File minecraftDir = new File(FMLPaths.FMLCONFIG.get().toFile().getParent());
static final File logFile = new File(minecraftDir, "logs/latest.log");

public GuiErrorBase()
{
super(null, null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,19 @@
package net.minecraftforge.fml.client.gui;

import java.util.List;
import java.util.Optional;

import net.minecraft.client.resources.I18n;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.common.MissingModsException;
import net.minecraftforge.fml.common.ModContainer;
import net.minecraftforge.fml.common.versioning.ArtifactVersion;
import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion;

@OnlyIn(Dist.CLIENT)
public class GuiModsMissing extends GuiErrorBase
{
private MissingModsException modsMissing;
Expand All @@ -46,7 +50,7 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks)
int offset = Math.max(85 - missingModsVersions.size() * 10, 10);
String modMissingDependenciesText = I18n.format("fml.messages.mod.missing.dependencies.compatibility", TextFormatting.BOLD + modsMissing.getModName() + TextFormatting.RESET);
this.drawCenteredString(this.fontRenderer, modMissingDependenciesText, this.width / 2, offset, 0xFFFFFF);
offset+=5;
offset += 5;
for (MissingModsException.MissingModInfo versionInfo : missingModsVersions)
{
ArtifactVersion acceptedVersion = versionInfo.getAcceptedVersion();
Expand All @@ -64,14 +68,14 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks)
String acceptedModVersionString = acceptedVersion.getRangeString();
if (acceptedVersion instanceof DefaultArtifactVersion)
{
DefaultArtifactVersion dav = (DefaultArtifactVersion)acceptedVersion;
DefaultArtifactVersion dav = (DefaultArtifactVersion) acceptedVersion;
if (dav.getRange() != null)
{
acceptedModVersionString = dav.getRange().toStringFriendly();
}
}
ModContainer acceptedMod = Loader.instance().getIndexedModList().get(acceptedModId);
String acceptedModName = acceptedMod != null ? acceptedMod.getName() : acceptedModId;
Optional<? extends ModContainer> acceptedMod = ModList.get().getModContainerById(acceptedModId);
String acceptedModName = acceptedMod.map((mod) -> mod.getModInfo().getDisplayName()).orElse(acceptedModId);
String versionInfoText = String.format(TextFormatting.BOLD + "%s " + TextFormatting.RESET + "%s (%s)", acceptedModName, acceptedModVersionString, missingReason);
String message;
if (versionInfo.isRequired())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.resources.I18n;
import net.minecraftforge.fml.common.MissingModsException;
import net.minecraftforge.fml.common.versioning.ArtifactVersion;

public class GuiModsMissingForServer extends GuiScreen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,84 +19,73 @@

package net.minecraftforge.fml.client.gui;

import java.util.List;
import java.util.Optional;

import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.resources.I18n;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.common.MissingModsException;
import net.minecraftforge.fml.common.ModContainer;
import net.minecraftforge.fml.common.MultipleModsErrored;
import net.minecraftforge.fml.common.WrongMinecraftVersionException;
import net.minecraftforge.fml.common.versioning.ArtifactVersion;
import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion;
import org.lwjgl.input.Mouse;

import java.io.IOException;
import java.util.List;

@OnlyIn(Dist.CLIENT)
public class GuiMultipleModsErrored extends GuiErrorBase
{
private final List<WrongMinecraftVersionException> wrongMinecraftExceptions;
private final List<MissingModsException> missingModsExceptions;
private GuiList list;

public GuiMultipleModsErrored(MultipleModsErrored exception)
{
wrongMinecraftExceptions = exception.wrongMinecraftExceptions;
missingModsExceptions = exception.missingModsExceptions;
}

@Override
public void initGui()
{
super.initGui();
int additionalSize = missingModsExceptions.isEmpty() || wrongMinecraftExceptions.isEmpty() ? 20 : 55;
int additionalSize = missingModsExceptions.isEmpty() ? 20 : 55;
for (MissingModsException exception : missingModsExceptions)
{
additionalSize += exception.getMissingModInfos().size() * 10;
}
list = new GuiList(wrongMinecraftExceptions.size() * 10 + missingModsExceptions.size() * 15 + additionalSize);
list = new GuiList(missingModsExceptions.size() * 15 + additionalSize);
}

@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks)
{
this.drawDefaultBackground();
this.list.drawScreen(mouseX, mouseY, partialTicks);
this.drawCenteredString(this.fontRenderer, I18n.format("fml.messages.mod.missing.multiple", missingModsExceptions.size() + wrongMinecraftExceptions.size()), this.width/2, 10, 0xFFFFFF);
String missingMultipleModsText = I18n.format("fml.messages.mod.missing.multiple", missingModsExceptions.size());
this.drawCenteredString(this.fontRenderer, missingMultipleModsText, this.width / 2, 10, 0xFFFFFF);
super.drawScreen(mouseX, mouseY, partialTicks);
}

@Override
public void actionPerformed(GuiButton button)
{
this.list.actionPerformed(button);
super.actionPerformed(button);
}

@Override
public void handleMouseInput() throws IOException
public boolean mouseScrolled(double scroll)
{
super.handleMouseInput();
int mouseX = Mouse.getEventX() * this.width / this.mc.displayWidth;
int mouseY = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1;
this.list.handleMouseInput(mouseX, mouseY);
return this.list.mouseScrolled(scroll);
}

private class GuiList extends GuiScrollingList
{
public GuiList(int entryHeight)
{
super(GuiMultipleModsErrored.this.mc,
GuiMultipleModsErrored.this.width-20,
GuiMultipleModsErrored.this.height -30,
30, GuiMultipleModsErrored.this.height-50,
10,
entryHeight,
GuiMultipleModsErrored.this.width,
GuiMultipleModsErrored.this.height);
GuiMultipleModsErrored.this.width - 20,
GuiMultipleModsErrored.this.height - 30,
30, GuiMultipleModsErrored.this.height - 50,
10,
entryHeight,
GuiMultipleModsErrored.this.width,
GuiMultipleModsErrored.this.height);
}

@Override
Expand All @@ -106,7 +95,9 @@ protected int getSize()
}

@Override
protected void elementClicked(int index, boolean doubleClick) {}
protected void elementClicked(int index, boolean doubleClick)
{
}

@Override
protected boolean isSelected(int index)
Expand All @@ -125,26 +116,13 @@ protected void drawSlot(int slotIdx, int entryRight, int slotTop, int slotBuffer
{
int offset = slotTop;
FontRenderer renderer = GuiMultipleModsErrored.this.fontRenderer;
if (!wrongMinecraftExceptions.isEmpty())
{
renderer.drawString(TextFormatting.UNDERLINE + I18n.format("fml.messages.mod.wrongminecraft", Loader.instance().getMinecraftModContainer().getVersion()), this.left, offset, 0xFFFFFF);
offset+=15;
for(WrongMinecraftVersionException exception : wrongMinecraftExceptions)
{
renderer.drawString(I18n.format("fml.messages.mod.wrongminecraft.requirement", TextFormatting.BOLD + exception.mod.getName() + TextFormatting.RESET, exception.mod.getModId(), exception.mod.acceptableMinecraftVersionRange().toStringFriendly()), this.left, offset, 0xFFFFFF);
offset += 10;
}
offset+=5;
renderer.drawString(I18n.format("fml.messages.mod.wrongminecraft.fix.multiple"), this.left, offset, 0xFFFFFF);
offset+=20;
}
if (!missingModsExceptions.isEmpty())
{
renderer.drawString(I18n.format("fml.messages.mod.missing.dependencies.multiple.issues"), this.left, offset, 0xFFFFFF);
offset+=15;
renderer.func_211126_b(I18n.format("fml.messages.mod.missing.dependencies.multiple.issues"), this.left, offset, 0xFFFFFF);
offset += 15;
for (MissingModsException exception : missingModsExceptions)
{
renderer.drawString(exception.getModName() + ":", this.left, offset, 0xFFFFFF);
renderer.func_211126_b(exception.getModName() + ":", this.left, offset, 0xFFFFFF);
for (MissingModsException.MissingModInfo versionInfo : exception.getMissingModInfos())
{
ArtifactVersion acceptedVersion = versionInfo.getAcceptedVersion();
Expand All @@ -162,14 +140,14 @@ protected void drawSlot(int slotIdx, int entryRight, int slotTop, int slotBuffer
String acceptedModVersionString = acceptedVersion.getRangeString();
if (acceptedVersion instanceof DefaultArtifactVersion)
{
DefaultArtifactVersion dav = (DefaultArtifactVersion)acceptedVersion;
DefaultArtifactVersion dav = (DefaultArtifactVersion) acceptedVersion;
if (dav.getRange() != null)
{
acceptedModVersionString = dav.getRange().toStringFriendly();
}
}
ModContainer acceptedMod = Loader.instance().getIndexedModList().get(acceptedModId);
String acceptedModName = acceptedMod != null ? acceptedMod.getName() : acceptedModId;
Optional<? extends ModContainer> acceptedMod = ModList.get().getModContainerById(acceptedModId);
String acceptedModName = acceptedMod.map((mod) -> mod.getModInfo().getDisplayName()).orElse(acceptedModId);
String versionInfoText = String.format(TextFormatting.BOLD + "%s " + TextFormatting.RESET + "%s (%s)", acceptedModName, acceptedModVersionString, missingReason);
String message;
if (versionInfo.isRequired())
Expand All @@ -181,7 +159,7 @@ protected void drawSlot(int slotIdx, int entryRight, int slotTop, int slotBuffer
message = I18n.format("fml.messages.mod.missing.dependencies.compatible.with", versionInfoText);
}
offset += 10;
renderer.drawString(message, this.left, offset, 0xEEEEEE);
renderer.func_211126_b(message, this.left, offset, 0xEEEEEE);
}

offset += 15;
Expand Down
Loading

0 comments on commit f851b37

Please sign in to comment.