Commit 1bc2d41a37eb71e134d515ec76e45048828e26c6
1 parent
12a6cba5
show a list of invalid containers if no valid containers are found
Showing
12 changed files
with
245 additions
and
22 deletions
java/client/com/mumfrey/liteloader/client/gui/modlist/GuiModListPanel.java
@@ -41,18 +41,18 @@ public class GuiModListPanel extends Gui | @@ -41,18 +41,18 @@ public class GuiModListPanel extends Gui | ||
41 | static final int PANEL_HEIGHT = 32; | 41 | static final int PANEL_HEIGHT = 32; |
42 | static final int PANEL_SPACING = 3; | 42 | static final int PANEL_SPACING = 3; |
43 | 43 | ||
44 | - private ModListEntry owner; | 44 | + protected ModListEntry owner; |
45 | 45 | ||
46 | /** | 46 | /** |
47 | * For text display | 47 | * For text display |
48 | */ | 48 | */ |
49 | - private final FontRenderer fontRenderer; | 49 | + protected final FontRenderer fontRenderer; |
50 | 50 | ||
51 | - private final int brandColour; | 51 | + protected final int brandColour; |
52 | 52 | ||
53 | - private final List<ModInfoDecorator> decorators; | 53 | + protected final List<ModInfoDecorator> decorators; |
54 | 54 | ||
55 | - private final ModInfo<?> modInfo; | 55 | + protected final ModInfo<?> modInfo; |
56 | 56 | ||
57 | /** | 57 | /** |
58 | * True if the mouse was over this mod on the last render | 58 | * True if the mouse was over this mod on the last render |
@@ -65,11 +65,11 @@ public class GuiModListPanel extends Gui | @@ -65,11 +65,11 @@ public class GuiModListPanel extends Gui | ||
65 | 65 | ||
66 | public GuiModListPanel(ModListEntry owner, FontRenderer fontRenderer, int brandColour, ModInfo<?> modInfo, List<ModInfoDecorator> decorators) | 66 | public GuiModListPanel(ModListEntry owner, FontRenderer fontRenderer, int brandColour, ModInfo<?> modInfo, List<ModInfoDecorator> decorators) |
67 | { | 67 | { |
68 | - this.owner = owner; | 68 | + this.owner = owner; |
69 | this.fontRenderer = fontRenderer; | 69 | this.fontRenderer = fontRenderer; |
70 | - this.brandColour = brandColour; | ||
71 | - this.modInfo = modInfo; | ||
72 | - this.decorators = decorators; | 70 | + this.brandColour = brandColour; |
71 | + this.modInfo = modInfo; | ||
72 | + this.decorators = decorators; | ||
73 | 73 | ||
74 | for (ModInfoDecorator decorator : this.decorators) | 74 | for (ModInfoDecorator decorator : this.decorators) |
75 | { | 75 | { |
@@ -122,7 +122,7 @@ public class GuiModListPanel extends Gui | @@ -122,7 +122,7 @@ public class GuiModListPanel extends Gui | ||
122 | this.fontRenderer.drawString(versionText, xPosition + 5, yPosition + 12, GuiModListPanel.VERSION_TEXT_COLOUR); | 122 | this.fontRenderer.drawString(versionText, xPosition + 5, yPosition + 12, GuiModListPanel.VERSION_TEXT_COLOUR); |
123 | this.fontRenderer.drawString(statusText, xPosition + 5, yPosition + 22, statusColour); | 123 | this.fontRenderer.drawString(statusText, xPosition + 5, yPosition + 22, statusColour); |
124 | 124 | ||
125 | - this.mouseOver = this.isMouseOver(mouseX, mouseY, xPosition, yPosition, width, PANEL_HEIGHT); | 125 | + this.updateMouseOver(mouseX, mouseY, xPosition, yPosition, width); |
126 | int hangerColour = this.mouseOver ? GuiModListPanel.HANGER_COLOUR_MOUSEOVER : GuiModListPanel.HANGER_COLOUR; | 126 | int hangerColour = this.mouseOver ? GuiModListPanel.HANGER_COLOUR_MOUSEOVER : GuiModListPanel.HANGER_COLOUR; |
127 | drawRect(xPosition, yPosition, xPosition + 1, yPosition + PANEL_HEIGHT, hangerColour); | 127 | drawRect(xPosition, yPosition, xPosition + 1, yPosition + PANEL_HEIGHT, hangerColour); |
128 | 128 | ||
@@ -131,6 +131,18 @@ public class GuiModListPanel extends Gui | @@ -131,6 +131,18 @@ public class GuiModListPanel extends Gui | ||
131 | decorator.onDrawListEntry(mouseX, mouseY, partialTicks, xPosition, yPosition, width, GuiModListPanel.PANEL_HEIGHT, selected, this.modInfo, gradientColour, titleColour, statusColour); | 131 | decorator.onDrawListEntry(mouseX, mouseY, partialTicks, xPosition, yPosition, width, GuiModListPanel.PANEL_HEIGHT, selected, this.modInfo, gradientColour, titleColour, statusColour); |
132 | } | 132 | } |
133 | } | 133 | } |
134 | + | ||
135 | + /** | ||
136 | + * @param mouseX | ||
137 | + * @param mouseY | ||
138 | + * @param xPosition | ||
139 | + * @param yPosition | ||
140 | + * @param width | ||
141 | + */ | ||
142 | + protected void updateMouseOver(int mouseX, int mouseY, int xPosition, int yPosition, int width) | ||
143 | + { | ||
144 | + this.mouseOver = this.isMouseOver(mouseX, mouseY, xPosition, yPosition, width, PANEL_HEIGHT); | ||
145 | + } | ||
134 | 146 | ||
135 | protected void postRender(int mouseX, int mouseY, float partialTicks, int xPosition, int yPosition, int width, boolean selected) | 147 | protected void postRender(int mouseX, int mouseY, float partialTicks, int xPosition, int yPosition, int width, boolean selected) |
136 | { | 148 | { |
@@ -218,7 +230,7 @@ public class GuiModListPanel extends Gui | @@ -218,7 +230,7 @@ public class GuiModListPanel extends Gui | ||
218 | return GuiModListPanel.PANEL_HEIGHT + GuiModListPanel.PANEL_SPACING; | 230 | return GuiModListPanel.PANEL_HEIGHT + GuiModListPanel.PANEL_SPACING; |
219 | } | 231 | } |
220 | 232 | ||
221 | - private boolean isMouseOver(int mouseX, int mouseY, int x, int y, int width, int height) | 233 | + protected boolean isMouseOver(int mouseX, int mouseY, int x, int y, int width, int height) |
222 | { | 234 | { |
223 | return mouseX > x && mouseX < x + width && mouseY > y && mouseY < y + height; | 235 | return mouseX > x && mouseX < x + width && mouseY > y && mouseY < y + height; |
224 | } | 236 | } |
java/client/com/mumfrey/liteloader/client/gui/modlist/GuiModListPanelInvalid.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client.gui.modlist; | ||
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import net.minecraft.client.gui.FontRenderer; | ||
6 | + | ||
7 | +import com.mumfrey.liteloader.api.ModInfoDecorator; | ||
8 | +import com.mumfrey.liteloader.core.ModInfo; | ||
9 | + | ||
10 | +public class GuiModListPanelInvalid extends GuiModListPanel | ||
11 | +{ | ||
12 | + private static final int BAD_PANEL_HEIGHT = 22; | ||
13 | + | ||
14 | + public GuiModListPanelInvalid(ModListEntry owner, FontRenderer fontRenderer, int brandColour, ModInfo<?> modInfo, List<ModInfoDecorator> decorators) | ||
15 | + { | ||
16 | + super(owner, fontRenderer, brandColour, modInfo, decorators); | ||
17 | + } | ||
18 | + | ||
19 | + @Override | ||
20 | + protected void render(int mouseX, int mouseY, float partialTicks, int xPosition, int yPosition, int width, boolean selected) | ||
21 | + { | ||
22 | + int gradientColour = selected ? ERROR_GRADIENT_COLOUR : ERROR_GRADIENT_COLOUR2; | ||
23 | + | ||
24 | + this.drawGradientRect(xPosition, yPosition, xPosition + width, yPosition + 22, gradientColour, GuiModListPanel.GRADIENT_COLOUR2); | ||
25 | + | ||
26 | + String titleText = this.owner.getTitleText(); | ||
27 | + String reasonText = this.modInfo.getDescription(); | ||
28 | + | ||
29 | + this.fontRenderer.drawString(titleText, xPosition + 5, yPosition + 2, 0xFF8888); | ||
30 | + this.fontRenderer.drawString(reasonText, xPosition + 5, yPosition + 12, GuiModListPanel.ERROR_GRADIENT_COLOUR); | ||
31 | + | ||
32 | + this.updateMouseOver(mouseX, mouseY, xPosition, yPosition, width); | ||
33 | + drawRect(xPosition, yPosition, xPosition + 1, yPosition + 22, ERROR_COLOUR); | ||
34 | + } | ||
35 | + | ||
36 | + @Override | ||
37 | + protected void postRender(int mouseX, int mouseY, float partialTicks, int xPosition, int yPosition, int width, boolean selected) | ||
38 | + { | ||
39 | + } | ||
40 | + | ||
41 | + @Override | ||
42 | + public int getHeight() | ||
43 | + { | ||
44 | + return GuiModListPanelInvalid.BAD_PANEL_HEIGHT; | ||
45 | + } | ||
46 | + | ||
47 | + @Override | ||
48 | + public int getTotalHeight() | ||
49 | + { | ||
50 | + return GuiModListPanelInvalid.BAD_PANEL_HEIGHT + GuiModListPanel.PANEL_SPACING; | ||
51 | + } | ||
52 | +} |
java/client/com/mumfrey/liteloader/client/gui/modlist/ModList.java
@@ -71,6 +71,16 @@ public class ModList | @@ -71,6 +71,16 @@ public class ModList | ||
71 | ModListEntry modListEntry = new ModListEntry(this, mods, environment, minecraft.fontRendererObj, brandColour, decorators, disabledMod); | 71 | ModListEntry modListEntry = new ModListEntry(this, mods, environment, minecraft.fontRendererObj, brandColour, decorators, disabledMod); |
72 | sortedMods.put(modListEntry.getKey(), modListEntry); | 72 | sortedMods.put(modListEntry.getKey(), modListEntry); |
73 | } | 73 | } |
74 | + | ||
75 | + // Show bad containers if no other containers are found, should help users realise they have the wrong mod version! | ||
76 | + if (sortedMods.size() == 0) | ||
77 | + { | ||
78 | + for (ModInfo<?> badMod : mods.getBadContainers()) | ||
79 | + { | ||
80 | + ModListEntry modListEntry = new ModListEntry(this, mods, environment, minecraft.fontRendererObj, brandColour, decorators, badMod); | ||
81 | + sortedMods.put(modListEntry.getKey(), modListEntry); | ||
82 | + } | ||
83 | + } | ||
74 | 84 | ||
75 | // Injected tweaks | 85 | // Injected tweaks |
76 | for (ModInfo<Loadable<?>> injectedTweak : mods.getInjectedTweaks()) | 86 | for (ModInfo<Loadable<?>> injectedTweak : mods.getInjectedTweaks()) |
java/client/com/mumfrey/liteloader/client/gui/modlist/ModListEntry.java
@@ -37,6 +37,8 @@ public class ModListEntry | @@ -37,6 +37,8 @@ public class ModListEntry | ||
37 | */ | 37 | */ |
38 | private boolean isActive; | 38 | private boolean isActive; |
39 | 39 | ||
40 | + private boolean isValid; | ||
41 | + | ||
40 | private boolean isMissingDependencies; | 42 | private boolean isMissingDependencies; |
41 | 43 | ||
42 | private boolean isMissingAPIs; | 44 | private boolean isMissingAPIs; |
@@ -90,12 +92,13 @@ public class ModListEntry | @@ -90,12 +92,13 @@ public class ModListEntry | ||
90 | this.modInfo = modInfo; | 92 | this.modInfo = modInfo; |
91 | 93 | ||
92 | this.isActive = modInfo.isActive(); | 94 | this.isActive = modInfo.isActive(); |
95 | + this.isValid = modInfo.isValid(); | ||
93 | this.canBeToggled = modInfo.isToggleable() && mods.getEnabledModsList().saveAllowed(); | 96 | this.canBeToggled = modInfo.isToggleable() && mods.getEnabledModsList().saveAllowed(); |
94 | this.willBeEnabled = mods.isModEnabled(this.modInfo.getIdentifier());; | 97 | this.willBeEnabled = mods.isModEnabled(this.modInfo.getIdentifier());; |
95 | this.isExternal = modInfo.getContainer().isExternalJar(); | 98 | this.isExternal = modInfo.getContainer().isExternalJar(); |
96 | this.isErrored = modInfo.getStartupErrors() != null && modInfo.getStartupErrors().size() > 0; | 99 | this.isErrored = modInfo.getStartupErrors() != null && modInfo.getStartupErrors().size() > 0; |
97 | 100 | ||
98 | - if (!modInfo.isActive()) | 101 | + if (!modInfo.isActive() && this.isValid) |
99 | { | 102 | { |
100 | this.isActive = modInfo.getContainer().isEnabled(environment); | 103 | this.isActive = modInfo.getContainer().isEnabled(environment); |
101 | 104 | ||
@@ -123,7 +126,15 @@ public class ModListEntry | @@ -123,7 +126,15 @@ public class ModListEntry | ||
123 | protected void initPanels(FontRenderer fontRenderer, int brandColour, List<ModInfoDecorator> decorators, ModInfo<?> modInfo) | 126 | protected void initPanels(FontRenderer fontRenderer, int brandColour, List<ModInfoDecorator> decorators, ModInfo<?> modInfo) |
124 | { | 127 | { |
125 | this.infoPanel = new GuiModInfoPanel(this, fontRenderer, brandColour, modInfo); | 128 | this.infoPanel = new GuiModInfoPanel(this, fontRenderer, brandColour, modInfo); |
126 | - this.listPanel = new GuiModListPanel(this, fontRenderer, brandColour, modInfo, decorators); | 129 | + |
130 | + if (this.isValid) | ||
131 | + { | ||
132 | + this.listPanel = new GuiModListPanel(this, fontRenderer, brandColour, modInfo, decorators); | ||
133 | + } | ||
134 | + else | ||
135 | + { | ||
136 | + this.listPanel = new GuiModListPanelInvalid(this, fontRenderer, brandColour, modInfo, decorators); | ||
137 | + } | ||
127 | } | 138 | } |
128 | 139 | ||
129 | public void onTick() | 140 | public void onTick() |
java/common/com/mumfrey/liteloader/core/BadContainerInfo.java
0 โ 100644
1 | +package com.mumfrey.liteloader.core; | ||
2 | + | ||
3 | +import com.mumfrey.liteloader.core.api.LoadableModFile; | ||
4 | +import com.mumfrey.liteloader.interfaces.Loadable; | ||
5 | + | ||
6 | +/** | ||
7 | + * ModInfo for invalid containers | ||
8 | + * | ||
9 | + * @author Adam Mummery-Smith | ||
10 | + */ | ||
11 | +public class BadContainerInfo extends NonMod | ||
12 | +{ | ||
13 | + /** | ||
14 | + * Reason the container could not be loaded | ||
15 | + */ | ||
16 | + private final String reason; | ||
17 | + | ||
18 | + public BadContainerInfo(Loadable<?> container, String reason) | ||
19 | + { | ||
20 | + super(container, false); | ||
21 | + this.reason = reason; | ||
22 | + } | ||
23 | + | ||
24 | + /* (non-Javadoc) | ||
25 | + * @see com.mumfrey.liteloader.core.ModInfo#isToggleable() | ||
26 | + */ | ||
27 | + @Override | ||
28 | + public boolean isToggleable() | ||
29 | + { | ||
30 | + return false; | ||
31 | + } | ||
32 | + | ||
33 | + /* (non-Javadoc) | ||
34 | + * @see com.mumfrey.liteloader.core.ModInfo#isValid() | ||
35 | + */ | ||
36 | + @Override | ||
37 | + public boolean isValid() | ||
38 | + { | ||
39 | + return false; | ||
40 | + } | ||
41 | + | ||
42 | + /* (non-Javadoc) | ||
43 | + * @see com.mumfrey.liteloader.core.ModInfo#getDescription() | ||
44 | + */ | ||
45 | + @Override | ||
46 | + public String getDescription() | ||
47 | + { | ||
48 | + return "\247c" + this.reason; | ||
49 | + } | ||
50 | + | ||
51 | + /* (non-Javadoc) | ||
52 | + * @see com.mumfrey.liteloader.core.ModInfo#getVersion() | ||
53 | + */ | ||
54 | + @Override | ||
55 | + public String getVersion() | ||
56 | + { | ||
57 | + if (this.container instanceof LoadableModFile) | ||
58 | + { | ||
59 | + return "supported: \247c" + ((LoadableModFile)this.container).getTargetVersion() + "\247r"; | ||
60 | + } | ||
61 | + | ||
62 | + return "supported: \247cUnknown"; | ||
63 | + } | ||
64 | +} |
java/common/com/mumfrey/liteloader/core/LiteLoaderEnumerator.java
@@ -94,6 +94,11 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | @@ -94,6 +94,11 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | ||
94 | * Mapping of identifiers to mod containers | 94 | * Mapping of identifiers to mod containers |
95 | */ | 95 | */ |
96 | private final Map<String, LoadableMod<?>> enabledContainers = new HashMap<String, LoadableMod<?>>(); | 96 | private final Map<String, LoadableMod<?>> enabledContainers = new HashMap<String, LoadableMod<?>>(); |
97 | + | ||
98 | + /** | ||
99 | + * Map of containers which cannot be loaded to reasons | ||
100 | + */ | ||
101 | + private final Set<ModInfo<Loadable<?>>> badContainers = new HashSet<ModInfo<Loadable<?>>>(); | ||
97 | 102 | ||
98 | /** | 103 | /** |
99 | * Containers which have already been checked for potential mod candidates | 104 | * Containers which have already been checked for potential mod candidates |
@@ -259,6 +264,14 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | @@ -259,6 +264,14 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | ||
259 | return this.disabledContainers.values(); | 264 | return this.disabledContainers.values(); |
260 | } | 265 | } |
261 | 266 | ||
267 | + @Override | ||
268 | + public Collection<? extends ModInfo<Loadable<?>>> getBadContainers() | ||
269 | + { | ||
270 | + this.checkState(EnumeratorState.FINALISED, "getBadContainers"); | ||
271 | + | ||
272 | + return this.badContainers; | ||
273 | + } | ||
274 | + | ||
262 | /** | 275 | /** |
263 | * Get the list of injected tweak containers | 276 | * Get the list of injected tweak containers |
264 | */ | 277 | */ |
@@ -446,7 +459,7 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | @@ -446,7 +459,7 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | ||
446 | } | 459 | } |
447 | 460 | ||
448 | /* (non-Javadoc) | 461 | /* (non-Javadoc) |
449 | - * @see com.mumfrey.liteloader.interfaces.PluggableEnumerator#registerModContainer(com.mumfrey.liteloader.interfaces.LoadableMod) | 462 | + * @see com.mumfrey.liteloader.interfaces.ModularEnumerator#registerModContainer(com.mumfrey.liteloader.interfaces.LoadableMod) |
450 | */ | 463 | */ |
451 | @Override | 464 | @Override |
452 | public final boolean registerModContainer(LoadableMod<?> container) | 465 | public final boolean registerModContainer(LoadableMod<?> container) |
@@ -478,6 +491,15 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | @@ -478,6 +491,15 @@ public class LiteLoaderEnumerator implements LoaderEnumerator | ||
478 | 491 | ||
479 | return true; | 492 | return true; |
480 | } | 493 | } |
494 | + | ||
495 | + @Override | ||
496 | + public void registerBadContainer(Loadable<?> container, String reason) | ||
497 | + { | ||
498 | + this.checkState(EnumeratorState.DISCOVER, "registerBadContainer"); | ||
499 | + | ||
500 | + BadContainerInfo badMod = new BadContainerInfo(container, reason); | ||
501 | + this.badContainers.add(badMod); | ||
502 | + } | ||
481 | 503 | ||
482 | /** | 504 | /** |
483 | * @param container | 505 | * @param container |
java/common/com/mumfrey/liteloader/core/LiteLoaderMods.java
@@ -2,6 +2,7 @@ package com.mumfrey.liteloader.core; | @@ -2,6 +2,7 @@ package com.mumfrey.liteloader.core; | ||
2 | 2 | ||
3 | import java.io.File; | 3 | import java.io.File; |
4 | import java.util.Collections; | 4 | import java.util.Collections; |
5 | +import java.util.Deque; | ||
5 | import java.util.HashMap; | 6 | import java.util.HashMap; |
6 | import java.util.LinkedList; | 7 | import java.util.LinkedList; |
7 | import java.util.List; | 8 | import java.util.List; |
@@ -79,22 +80,32 @@ public class LiteLoaderMods | @@ -79,22 +80,32 @@ public class LiteLoaderMods | ||
79 | /** | 80 | /** |
80 | * Global list of mods which we can load | 81 | * Global list of mods which we can load |
81 | */ | 82 | */ |
82 | - protected final LinkedList<Mod> allMods = new LinkedList<Mod>(); | 83 | + protected final List<Mod> allMods = new LinkedList<Mod>(); |
83 | 84 | ||
84 | /** | 85 | /** |
85 | * Global list of mods which are still waiting for initialisiation | 86 | * Global list of mods which are still waiting for initialisiation |
86 | */ | 87 | */ |
87 | - protected final LinkedList<Mod> initMods = new LinkedList<Mod>(); | 88 | + protected final Deque<Mod> initMods = new LinkedList<Mod>(); |
88 | 89 | ||
89 | /** | 90 | /** |
90 | * Global list of mods which we have loaded | 91 | * Global list of mods which we have loaded |
91 | */ | 92 | */ |
92 | - protected final LinkedList<Mod> loadedMods = new LinkedList<Mod>(); | 93 | + protected final List<Mod> loadedMods = new LinkedList<Mod>(); |
94 | + | ||
95 | + /** | ||
96 | + * Global list of mods which we found but ignored (eg. outdated, invalid) | ||
97 | + */ | ||
98 | + protected final List<Mod> badMods = new LinkedList<Mod>(); | ||
93 | 99 | ||
94 | /** | 100 | /** |
95 | * Mods which are loaded but disabled | 101 | * Mods which are loaded but disabled |
96 | */ | 102 | */ |
97 | - protected final LinkedList<ModInfo<?>> disabledMods = new LinkedList<ModInfo<?>>(); | 103 | + protected final List<ModInfo<?>> disabledMods = new LinkedList<ModInfo<?>>(); |
104 | + | ||
105 | + /** | ||
106 | + * Bad containers | ||
107 | + */ | ||
108 | + protected final List<ModInfo<?>> badContainers = new LinkedList<ModInfo<?>>(); | ||
98 | 109 | ||
99 | private int startupErrorCount, criticalErrorCount; | 110 | private int startupErrorCount, criticalErrorCount; |
100 | 111 | ||
@@ -112,6 +123,7 @@ public class LiteLoaderMods | @@ -112,6 +123,7 @@ public class LiteLoaderMods | ||
112 | { | 123 | { |
113 | this.observers.addAll(observers); | 124 | this.observers.addAll(observers); |
114 | this.disabledMods.addAll(this.enumerator.getDisabledContainers()); | 125 | this.disabledMods.addAll(this.enumerator.getDisabledContainers()); |
126 | + this.badContainers.addAll(this.enumerator.getBadContainers()); | ||
115 | } | 127 | } |
116 | 128 | ||
117 | void onPostInit() | 129 | void onPostInit() |
@@ -156,6 +168,14 @@ public class LiteLoaderMods | @@ -156,6 +168,14 @@ public class LiteLoaderMods | ||
156 | { | 168 | { |
157 | return this.disabledMods; | 169 | return this.disabledMods; |
158 | } | 170 | } |
171 | + | ||
172 | + /** | ||
173 | + * Get a list of all bad containers | ||
174 | + */ | ||
175 | + public List<? extends ModInfo<?>> getBadContainers() | ||
176 | + { | ||
177 | + return this.badContainers; | ||
178 | + } | ||
159 | 179 | ||
160 | /** | 180 | /** |
161 | * Get the list of injected tweak containers | 181 | * Get the list of injected tweak containers |
java/common/com/mumfrey/liteloader/core/ModInfo.java
@@ -60,6 +60,14 @@ public abstract class ModInfo<TContainer extends Loadable<?>> | @@ -60,6 +60,14 @@ public abstract class ModInfo<TContainer extends Loadable<?>> | ||
60 | } | 60 | } |
61 | 61 | ||
62 | /** | 62 | /** |
63 | + * Get whether this mod is valid | ||
64 | + */ | ||
65 | + public boolean isValid() | ||
66 | + { | ||
67 | + return true; | ||
68 | + } | ||
69 | + | ||
70 | + /** | ||
63 | * Get whether this mod can be toggled | 71 | * Get whether this mod can be toggled |
64 | */ | 72 | */ |
65 | public boolean isToggleable() | 73 | public boolean isToggleable() |
java/common/com/mumfrey/liteloader/core/api/EnumeratorModuleFolder.java
@@ -117,6 +117,7 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule | @@ -117,6 +117,7 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule | ||
117 | if (fileName.endsWith(".litemod.zip")) | 117 | if (fileName.endsWith(".litemod.zip")) |
118 | { | 118 | { |
119 | LiteLoaderLogger.warning("Found %s with unsupported extension .litemod.zip. Please change file extension to .litemod to allow this file to be loaded!", fileName); | 119 | LiteLoaderLogger.warning("Found %s with unsupported extension .litemod.zip. Please change file extension to .litemod to allow this file to be loaded!", fileName); |
120 | + return true; | ||
120 | } | 121 | } |
121 | 122 | ||
122 | return fileName.endsWith(".litemod") || fileName.endsWith(".jar"); | 123 | return fileName.endsWith(".litemod") || fileName.endsWith(".jar"); |
@@ -164,7 +165,7 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule | @@ -164,7 +165,7 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule | ||
164 | */ | 165 | */ |
165 | protected void inspectFile(ModularEnumerator enumerator, LoadableFile candidateFile) | 166 | protected void inspectFile(ModularEnumerator enumerator, LoadableFile candidateFile) |
166 | { | 167 | { |
167 | - if (this.isValidFile(candidateFile)) | 168 | + if (this.isValidFile(enumerator, candidateFile)) |
168 | { | 169 | { |
169 | String metaData = candidateFile.getFileContents(LoadableMod.METADATA_FILENAME, Charsets.UTF_8); | 170 | String metaData = candidateFile.getFileContents(LoadableMod.METADATA_FILENAME, Charsets.UTF_8); |
170 | if (metaData != null) | 171 | if (metaData != null) |
@@ -182,19 +183,30 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule | @@ -182,19 +183,30 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule | ||
182 | else | 183 | else |
183 | { | 184 | { |
184 | LiteLoaderLogger.info("Ignoring %s", candidateFile); | 185 | LiteLoaderLogger.info("Ignoring %s", candidateFile); |
186 | +// enumerator.registerBadContainer(candidateFile, "No metadata"); | ||
185 | } | 187 | } |
186 | } | 188 | } |
189 | +// else | ||
190 | +// { | ||
191 | +// enumerator.registerBadContainer(candidateFile, "Not a valid file"); | ||
192 | +// } | ||
187 | } | 193 | } |
188 | 194 | ||
189 | /** | 195 | /** |
190 | * Check whether the specified file is a valid mod container | 196 | * Check whether the specified file is a valid mod container |
191 | * | 197 | * |
198 | + * @param enumerator | ||
192 | * @param candidateFile | 199 | * @param candidateFile |
193 | */ | 200 | */ |
194 | - protected boolean isValidFile(LoadableFile candidateFile) | 201 | + protected boolean isValidFile(ModularEnumerator enumerator, LoadableFile candidateFile) |
195 | { | 202 | { |
196 | String filename = candidateFile.getName().toLowerCase(); | 203 | String filename = candidateFile.getName().toLowerCase(); |
197 | - if (filename.endsWith(".litemod")) | 204 | + if (filename.endsWith(".litemod.zip")) |
205 | + { | ||
206 | + enumerator.registerBadContainer(candidateFile, "Invalid file extension .litemod.zip"); | ||
207 | + return false; | ||
208 | + } | ||
209 | + else if (filename.endsWith(".litemod")) | ||
198 | { | 210 | { |
199 | return true; | 211 | return true; |
200 | } | 212 | } |
@@ -281,6 +293,7 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule | @@ -281,6 +293,7 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule | ||
281 | else | 293 | else |
282 | { | 294 | { |
283 | LiteLoaderLogger.info("Not adding invalid or version-mismatched mod file: %s", modFile); | 295 | LiteLoaderLogger.info("Not adding invalid or version-mismatched mod file: %s", modFile); |
296 | + enumerator.registerBadContainer(modFile, "Version not supported"); | ||
284 | } | 297 | } |
285 | } | 298 | } |
286 | } | 299 | } |
java/common/com/mumfrey/liteloader/core/api/LoadableModFile.java
@@ -173,7 +173,7 @@ public class LoadableModFile extends LoadableFile implements LoadableMod<File> | @@ -173,7 +173,7 @@ public class LoadableModFile extends LoadableFile implements LoadableMod<File> | ||
173 | try | 173 | try |
174 | { | 174 | { |
175 | this.modName = this.getMetaValue("name", this.getDefaultName()); | 175 | this.modName = this.getMetaValue("name", this.getDefaultName()); |
176 | - this.displayName = this.getMetaValue("displayName", null); | 176 | + this.displayName = this.getMetaValue("displayName", this.modName); |
177 | this.version = this.getMetaValue("version", "Unknown"); | 177 | this.version = this.getMetaValue("version", "Unknown"); |
178 | this.author = this.getMetaValue("author", "Unknown"); | 178 | this.author = this.getMetaValue("author", "Unknown"); |
179 | 179 |
java/common/com/mumfrey/liteloader/interfaces/LoaderEnumerator.java
@@ -85,6 +85,11 @@ public interface LoaderEnumerator extends ModularEnumerator | @@ -85,6 +85,11 @@ public interface LoaderEnumerator extends ModularEnumerator | ||
85 | public abstract Collection<? extends ModInfo<Loadable<?>>> getDisabledContainers(); | 85 | public abstract Collection<? extends ModInfo<Loadable<?>>> getDisabledContainers(); |
86 | 86 | ||
87 | /** | 87 | /** |
88 | + * Get all bad containers | ||
89 | + */ | ||
90 | + public abstract Collection<? extends ModInfo<Loadable<?>>> getBadContainers(); | ||
91 | + | ||
92 | + /** | ||
88 | * @param modClass | 93 | * @param modClass |
89 | * @param metaDataKey | 94 | * @param metaDataKey |
90 | * @param defaultValue | 95 | * @param defaultValue |
java/common/com/mumfrey/liteloader/interfaces/ModularEnumerator.java
@@ -23,6 +23,12 @@ public interface ModularEnumerator | @@ -23,6 +23,12 @@ public interface ModularEnumerator | ||
23 | * @param container | 23 | * @param container |
24 | */ | 24 | */ |
25 | public abstract boolean registerModContainer(LoadableMod<?> container); | 25 | public abstract boolean registerModContainer(LoadableMod<?> container); |
26 | + | ||
27 | + /** | ||
28 | + * @param container | ||
29 | + * @param reason | ||
30 | + */ | ||
31 | + public abstract void registerBadContainer(Loadable<?> container, String reason); | ||
26 | 32 | ||
27 | /** | 33 | /** |
28 | * @param container | 34 | * @param container |