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 | 41 | static final int PANEL_HEIGHT = 32; |
42 | 42 | static final int PANEL_SPACING = 3; |
43 | 43 | |
44 | - private ModListEntry owner; | |
44 | + protected ModListEntry owner; | |
45 | 45 | |
46 | 46 | /** |
47 | 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 | 58 | * True if the mouse was over this mod on the last render |
... | ... | @@ -65,11 +65,11 @@ public class GuiModListPanel extends Gui |
65 | 65 | |
66 | 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 | 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 | 74 | for (ModInfoDecorator decorator : this.decorators) |
75 | 75 | { |
... | ... | @@ -122,7 +122,7 @@ public class GuiModListPanel extends Gui |
122 | 122 | this.fontRenderer.drawString(versionText, xPosition + 5, yPosition + 12, GuiModListPanel.VERSION_TEXT_COLOUR); |
123 | 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 | 126 | int hangerColour = this.mouseOver ? GuiModListPanel.HANGER_COLOUR_MOUSEOVER : GuiModListPanel.HANGER_COLOUR; |
127 | 127 | drawRect(xPosition, yPosition, xPosition + 1, yPosition + PANEL_HEIGHT, hangerColour); |
128 | 128 | |
... | ... | @@ -131,6 +131,18 @@ public class GuiModListPanel extends Gui |
131 | 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 | 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 | 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 | 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 | 71 | ModListEntry modListEntry = new ModListEntry(this, mods, environment, minecraft.fontRendererObj, brandColour, decorators, disabledMod); |
72 | 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 | 85 | // Injected tweaks |
76 | 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 | 37 | */ |
38 | 38 | private boolean isActive; |
39 | 39 | |
40 | + private boolean isValid; | |
41 | + | |
40 | 42 | private boolean isMissingDependencies; |
41 | 43 | |
42 | 44 | private boolean isMissingAPIs; |
... | ... | @@ -90,12 +92,13 @@ public class ModListEntry |
90 | 92 | this.modInfo = modInfo; |
91 | 93 | |
92 | 94 | this.isActive = modInfo.isActive(); |
95 | + this.isValid = modInfo.isValid(); | |
93 | 96 | this.canBeToggled = modInfo.isToggleable() && mods.getEnabledModsList().saveAllowed(); |
94 | 97 | this.willBeEnabled = mods.isModEnabled(this.modInfo.getIdentifier());; |
95 | 98 | this.isExternal = modInfo.getContainer().isExternalJar(); |
96 | 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 | 103 | this.isActive = modInfo.getContainer().isEnabled(environment); |
101 | 104 | |
... | ... | @@ -123,7 +126,15 @@ public class ModListEntry |
123 | 126 | protected void initPanels(FontRenderer fontRenderer, int brandColour, List<ModInfoDecorator> decorators, ModInfo<?> modInfo) |
124 | 127 | { |
125 | 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 | 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 | 94 | * Mapping of identifiers to mod containers |
95 | 95 | */ |
96 | 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 | 104 | * Containers which have already been checked for potential mod candidates |
... | ... | @@ -259,6 +264,14 @@ public class LiteLoaderEnumerator implements LoaderEnumerator |
259 | 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 | 276 | * Get the list of injected tweak containers |
264 | 277 | */ |
... | ... | @@ -446,7 +459,7 @@ public class LiteLoaderEnumerator implements LoaderEnumerator |
446 | 459 | } |
447 | 460 | |
448 | 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 | 464 | @Override |
452 | 465 | public final boolean registerModContainer(LoadableMod<?> container) |
... | ... | @@ -478,6 +491,15 @@ public class LiteLoaderEnumerator implements LoaderEnumerator |
478 | 491 | |
479 | 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 | 505 | * @param container | ... | ... |
java/common/com/mumfrey/liteloader/core/LiteLoaderMods.java
... | ... | @@ -2,6 +2,7 @@ package com.mumfrey.liteloader.core; |
2 | 2 | |
3 | 3 | import java.io.File; |
4 | 4 | import java.util.Collections; |
5 | +import java.util.Deque; | |
5 | 6 | import java.util.HashMap; |
6 | 7 | import java.util.LinkedList; |
7 | 8 | import java.util.List; |
... | ... | @@ -79,22 +80,32 @@ public class LiteLoaderMods |
79 | 80 | /** |
80 | 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 | 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 | 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 | 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 | 110 | private int startupErrorCount, criticalErrorCount; |
100 | 111 | |
... | ... | @@ -112,6 +123,7 @@ public class LiteLoaderMods |
112 | 123 | { |
113 | 124 | this.observers.addAll(observers); |
114 | 125 | this.disabledMods.addAll(this.enumerator.getDisabledContainers()); |
126 | + this.badContainers.addAll(this.enumerator.getBadContainers()); | |
115 | 127 | } |
116 | 128 | |
117 | 129 | void onPostInit() |
... | ... | @@ -156,6 +168,14 @@ public class LiteLoaderMods |
156 | 168 | { |
157 | 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 | 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 | 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 | 71 | * Get whether this mod can be toggled |
64 | 72 | */ |
65 | 73 | public boolean isToggleable() | ... | ... |
java/common/com/mumfrey/liteloader/core/api/EnumeratorModuleFolder.java
... | ... | @@ -117,6 +117,7 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule |
117 | 117 | if (fileName.endsWith(".litemod.zip")) |
118 | 118 | { |
119 | 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 | 123 | return fileName.endsWith(".litemod") || fileName.endsWith(".jar"); |
... | ... | @@ -164,7 +165,7 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule |
164 | 165 | */ |
165 | 166 | protected void inspectFile(ModularEnumerator enumerator, LoadableFile candidateFile) |
166 | 167 | { |
167 | - if (this.isValidFile(candidateFile)) | |
168 | + if (this.isValidFile(enumerator, candidateFile)) | |
168 | 169 | { |
169 | 170 | String metaData = candidateFile.getFileContents(LoadableMod.METADATA_FILENAME, Charsets.UTF_8); |
170 | 171 | if (metaData != null) |
... | ... | @@ -182,19 +183,30 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule |
182 | 183 | else |
183 | 184 | { |
184 | 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 | 196 | * Check whether the specified file is a valid mod container |
191 | 197 | * |
198 | + * @param enumerator | |
192 | 199 | * @param candidateFile |
193 | 200 | */ |
194 | - protected boolean isValidFile(LoadableFile candidateFile) | |
201 | + protected boolean isValidFile(ModularEnumerator enumerator, LoadableFile candidateFile) | |
195 | 202 | { |
196 | 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 | 211 | return true; |
200 | 212 | } |
... | ... | @@ -281,6 +293,7 @@ public class EnumeratorModuleFolder implements FilenameFilter, EnumeratorModule |
281 | 293 | else |
282 | 294 | { |
283 | 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 | 173 | try |
174 | 174 | { |
175 | 175 | this.modName = this.getMetaValue("name", this.getDefaultName()); |
176 | - this.displayName = this.getMetaValue("displayName", null); | |
176 | + this.displayName = this.getMetaValue("displayName", this.modName); | |
177 | 177 | this.version = this.getMetaValue("version", "Unknown"); |
178 | 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 | 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 | 93 | * @param modClass |
89 | 94 | * @param metaDataKey |
90 | 95 | * @param defaultValue | ... | ... |
java/common/com/mumfrey/liteloader/interfaces/ModularEnumerator.java
... | ... | @@ -23,6 +23,12 @@ public interface ModularEnumerator |
23 | 23 | * @param container |
24 | 24 | */ |
25 | 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 | 34 | * @param container | ... | ... |