Commit 2bf580ed3572c4e820f511bcfaf15ca09889b71c
1 parent
a1377b8d
LiteLoader 1.6.2 - register mod files as resource packs
Showing
5 changed files
with
161 additions
and
21 deletions
.classpath
... | ... | @@ -5,7 +5,8 @@ |
5 | 5 | <classpathentry combineaccessrules="false" kind="src" path="/Client"/> |
6 | 6 | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> |
7 | 7 | <classpathentry kind="lib" path="/Client/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar"/> |
8 | - <classpathentry kind="lib" path="/Client/jars/versions/1.6.2/1.6.2.jar"/> | |
9 | 8 | <classpathentry kind="lib" path="/Client/jars/libraries/com/google/code/gson/gson/2.2.2/gson-2.2.2.jar"/> |
9 | + <classpathentry kind="lib" path="/Client/jars/libraries/com/google/guava/guava/14.0/guava-14.0.jar"/> | |
10 | + <classpathentry kind="lib" path="/Client/jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar"/> | |
10 | 11 | <classpathentry kind="output" path="bin"/> |
11 | 12 | </classpath> | ... | ... |
java/com/mumfrey/liteloader/core/LiteLoader.java
... | ... | @@ -38,20 +38,7 @@ import java.util.zip.ZipInputStream; |
38 | 38 | |
39 | 39 | import javax.activity.InvalidActivityException; |
40 | 40 | |
41 | -import net.minecraft.src.ChatMessageComponent; | |
42 | -import net.minecraft.src.Minecraft; | |
43 | -import net.minecraft.src.GuiControls; | |
44 | -import net.minecraft.src.GuiNewChat; | |
45 | -import net.minecraft.src.GuiScreen; | |
46 | -import net.minecraft.src.ILogAgent; | |
47 | -import net.minecraft.src.IPlayerUsage; | |
48 | -import net.minecraft.src.NetHandler; | |
49 | -import net.minecraft.src.Packet1Login; | |
50 | -import net.minecraft.src.Packet3Chat; | |
51 | -import net.minecraft.src.PlayerUsageSnooper; | |
52 | -import net.minecraft.src.Profiler; | |
53 | -import net.minecraft.src.ScaledResolution; | |
54 | -import net.minecraft.src.Timer; | |
41 | +import net.minecraft.src.*; | |
55 | 42 | |
56 | 43 | import com.mumfrey.liteloader.ChatFilter; |
57 | 44 | import com.mumfrey.liteloader.ChatListener; |
... | ... | @@ -68,6 +55,7 @@ import com.mumfrey.liteloader.RenderListener; |
68 | 55 | import com.mumfrey.liteloader.Tickable; |
69 | 56 | import com.mumfrey.liteloader.gui.GuiControlsPaginated; |
70 | 57 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; |
58 | +import com.mumfrey.liteloader.resources.ModResourcePack; | |
71 | 59 | import com.mumfrey.liteloader.util.ModUtilities; |
72 | 60 | import com.mumfrey.liteloader.util.PrivateFields; |
73 | 61 | |
... | ... | @@ -194,6 +182,11 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage |
194 | 182 | private Map<String, ModFile> modFiles = new HashMap<String, ModFile>(); |
195 | 183 | |
196 | 184 | /** |
185 | + * Registered resource packs | |
186 | + */ | |
187 | + private Map<String, ResourcePack> registeredResourcePacks = new HashMap<String, ResourcePack>(); | |
188 | + | |
189 | + /** | |
197 | 190 | * List of loaded mods, for crash reporting |
198 | 191 | */ |
199 | 192 | private String loadedModsList = "none"; |
... | ... | @@ -614,6 +607,46 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage |
614 | 607 | } |
615 | 608 | |
616 | 609 | /** |
610 | + * Register a | |
611 | + * | |
612 | + * @param name | |
613 | + * @param resourcePack | |
614 | + * @return | |
615 | + */ | |
616 | + public boolean registerModResourcePack(ModResourcePack resourcePack) | |
617 | + { | |
618 | + if (!this.registeredResourcePacks.containsKey(resourcePack.func_130077_b())) // TODO adamsrc -> getName() | |
619 | + { | |
620 | + List<ResourcePack> defaultResourcePacks = PrivateFields.defaultResourcePacks.get(this.minecraft); | |
621 | + if (!defaultResourcePacks.contains(resourcePack)) | |
622 | + { | |
623 | + defaultResourcePacks.add(resourcePack); | |
624 | + this.registeredResourcePacks.put(resourcePack.func_130077_b(), resourcePack); // TODO adamsrc -> getName() | |
625 | + return true; | |
626 | + } | |
627 | + } | |
628 | + | |
629 | + return false; | |
630 | + } | |
631 | + | |
632 | + /** | |
633 | + * @param name | |
634 | + * @return | |
635 | + */ | |
636 | + public boolean unRegisterModResourcePack(ModResourcePack resourcePack) | |
637 | + { | |
638 | + if (this.registeredResourcePacks.containsValue(resourcePack)) | |
639 | + { | |
640 | + List<ResourcePack> defaultResourcePacks = PrivateFields.defaultResourcePacks.get(this.minecraft); | |
641 | + this.registeredResourcePacks.remove(resourcePack.func_130077_b()); // TODO adamsrc -> getName() | |
642 | + defaultResourcePacks.remove(resourcePack); | |
643 | + return true; | |
644 | + } | |
645 | + | |
646 | + return false; | |
647 | + } | |
648 | + | |
649 | + /** | |
617 | 650 | * Get the "mods" folder |
618 | 651 | */ |
619 | 652 | public File getModsFolder() |
... | ... | @@ -811,6 +844,16 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage |
811 | 844 | } |
812 | 845 | |
813 | 846 | /** |
847 | + * @param mod | |
848 | + * @return | |
849 | + */ | |
850 | + private ModFile getModFile(LiteMod mod) | |
851 | + { | |
852 | + String modClassName = mod.getClass().getSimpleName(); | |
853 | + return this.modFiles.containsKey(modClassName) ? this.modFiles.get(modClassName) : null; | |
854 | + } | |
855 | + | |
856 | + /** | |
814 | 857 | * Enumerate the java class path and "mods" folder to find mod classes, then |
815 | 858 | * load the classes |
816 | 859 | */ |
... | ... | @@ -1135,6 +1178,8 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage |
1135 | 1178 | |
1136 | 1179 | logger.info("Discovered " + this.modsToLoad.size() + " total mod(s)"); |
1137 | 1180 | |
1181 | + boolean addedResources = false; | |
1182 | + | |
1138 | 1183 | for (Class<? extends LiteMod> mod : this.modsToLoad.values()) |
1139 | 1184 | { |
1140 | 1185 | try |
... | ... | @@ -1147,6 +1192,14 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage |
1147 | 1192 | { |
1148 | 1193 | this.mods.add(newMod); |
1149 | 1194 | logger.info("Successfully added mod " + newMod.getName() + " version " + newMod.getVersion()); |
1195 | + | |
1196 | + // Get the mod file and register it as a resource pack if it exists | |
1197 | + ModFile modFile = this.getModFile(newMod); | |
1198 | + if (modFile != null && modFile.registerAsResourcePack(newMod.getName())) | |
1199 | + { | |
1200 | + logger.info("Adding " + modFile.getAbsolutePath() + " to resources list"); | |
1201 | + addedResources = true; | |
1202 | + } | |
1150 | 1203 | } |
1151 | 1204 | else |
1152 | 1205 | { |
... | ... | @@ -1159,6 +1212,11 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage |
1159 | 1212 | th.printStackTrace(); |
1160 | 1213 | } |
1161 | 1214 | } |
1215 | + | |
1216 | + if (addedResources) | |
1217 | + { | |
1218 | + this.minecraft.func_110436_a(); // TODO adamsrc -> refreshResourcePacks | |
1219 | + } | |
1162 | 1220 | } |
1163 | 1221 | |
1164 | 1222 | /** | ... | ... |
java/com/mumfrey/liteloader/core/ModFile.java
... | ... | @@ -6,6 +6,7 @@ import java.util.Map; |
6 | 6 | |
7 | 7 | import com.google.gson.Gson; |
8 | 8 | import com.google.gson.JsonSyntaxException; |
9 | +import com.mumfrey.liteloader.resources.ModResourcePack; | |
9 | 10 | |
10 | 11 | /** |
11 | 12 | * Wrapper for file which represents a mod file to load with associated version information and |
... | ... | @@ -59,6 +60,11 @@ public class ModFile extends File |
59 | 60 | private boolean hasRevision = false; |
60 | 61 | |
61 | 62 | /** |
63 | + * Resource pack we have registered with minecraft | |
64 | + */ | |
65 | + private ModResourcePack resourcePack = null; | |
66 | + | |
67 | + /** | |
62 | 68 | * ALL of the parsed metadata from the file, associated with the mod later on for retrieval via the loader |
63 | 69 | */ |
64 | 70 | private HashMap<String, String> metaData = new HashMap<String, String>(); |
... | ... | @@ -162,6 +168,23 @@ public class ModFile extends File |
162 | 168 | return this.metaData; |
163 | 169 | } |
164 | 170 | |
171 | + /** | |
172 | + * Registers this file as a minecraft resource pack | |
173 | + * | |
174 | + * @param name | |
175 | + * @return true if the pack was added | |
176 | + */ | |
177 | + public boolean registerAsResourcePack(String name) | |
178 | + { | |
179 | + if (this.resourcePack == null) | |
180 | + { | |
181 | + this.resourcePack = new ModResourcePack(name, this); | |
182 | + return LiteLoader.getInstance().registerModResourcePack(this.resourcePack); | |
183 | + } | |
184 | + | |
185 | + return false; | |
186 | + } | |
187 | + | |
165 | 188 | @Override |
166 | 189 | public int compareTo(File other) |
167 | 190 | { | ... | ... |
java/com/mumfrey/liteloader/resources/ModResourcePack.java
0 → 100644
1 | +package com.mumfrey.liteloader.resources; | |
2 | + | |
3 | +import java.io.File; | |
4 | +import java.io.IOException; | |
5 | + | |
6 | +import net.minecraft.src.FileResourcePack; | |
7 | +import net.minecraft.src.MetadataSection; | |
8 | +import net.minecraft.src.MetadataSerializer; | |
9 | + | |
10 | +/** | |
11 | + * Resource pack which wraps a mod file | |
12 | + * | |
13 | + * @author Adam Mummery-Smith | |
14 | + */ | |
15 | +public class ModResourcePack extends FileResourcePack | |
16 | +{ | |
17 | + /** | |
18 | + * Display name, only shows up in debug output | |
19 | + */ | |
20 | + private final String name; | |
21 | + | |
22 | + /** | |
23 | + * @param name Friendly name | |
24 | + * @param modFile | |
25 | + */ | |
26 | + public ModResourcePack(String name, File modFile) | |
27 | + { | |
28 | + super(modFile); | |
29 | + this.name = name; | |
30 | + } | |
31 | + | |
32 | + /* (non-Javadoc) | |
33 | + * @see net.minecraft.src.AbstractResourcePack#getMetadataSection(net.minecraft.src.MetadataSerializer, java.lang.String) | |
34 | + */ | |
35 | + @Override | |
36 | + public MetadataSection func_135058_a(MetadataSerializer metadataSerializer, String metadataSectionName) throws IOException // TODO adamsrc -> getMetadataSection | |
37 | + { | |
38 | + try | |
39 | + { | |
40 | + // This will fail when fetching pack.mcmeta if there isn't one in the mod file, since we don't care we | |
41 | + // just catch the exception and return null instead | |
42 | + return super.func_135058_a(metadataSerializer, metadataSectionName); // TODO adamsrc -> getMetadataSection | |
43 | + } | |
44 | + catch (Exception ex) {} | |
45 | + | |
46 | + return null; | |
47 | + } | |
48 | + | |
49 | + /* (non-Javadoc) | |
50 | + * @see net.minecraft.src.AbstractResourcePack#getName() | |
51 | + */ | |
52 | + @Override | |
53 | + public String func_130077_b() // TODO adamsrc -> getName() | |
54 | + { | |
55 | + return this.name; | |
56 | + } | |
57 | +} | ... | ... |
java/com/mumfrey/liteloader/util/PrivateFields.java
... | ... | @@ -2,9 +2,9 @@ package com.mumfrey.liteloader.util; |
2 | 2 | |
3 | 3 | import java.lang.reflect.Field; |
4 | 4 | import java.lang.reflect.Modifier; |
5 | +import java.util.List; | |
5 | 6 | import java.util.Map; |
6 | 7 | |
7 | -import net.minecraft.src.Minecraft; | |
8 | 8 | import net.minecraft.src.*; |
9 | 9 | |
10 | 10 | /** |
... | ... | @@ -141,10 +141,11 @@ public class PrivateFields<P, T> |
141 | 141 | public static final StaticFields<TileEntity, Map> tileEntityNameToClassMap = new StaticFields<TileEntity, Map> (TileEntity.class, "nameToClassMap", "a", "field_70326_a"); // TileEntity/nameToClassMap |
142 | 142 | } |
143 | 143 | |
144 | - public static final PrivateFields<Minecraft, Timer> minecraftTimer = new PrivateFields<Minecraft, Timer> (Minecraft.class, "timer", "S", "field_71428_T"); // Minecraft/timer | |
145 | - public static final PrivateFields<Minecraft, Profiler> minecraftProfiler = new PrivateFields<Minecraft, Profiler> (Minecraft.class, "mcProfiler", "C", "field_71424_I"); // Minecraft/mcProfiler | |
146 | - public static final PrivateFields<RenderManager, Map> entityRenderMap = new PrivateFields<RenderManager, Map> (RenderManager.class, "entityRenderMap", "q", "field_78729_o"); // RenderManager/entityRenderMap | |
147 | - public static final PrivateFields<GuiControls, GuiScreen> guiControlsParentScreen = new PrivateFields<GuiControls, GuiScreen> (GuiControls.class, "parentScreen", "b", "field_73909_b"); // GuiControls/parentScreen | |
148 | - public static final PrivateFields<PlayerUsageSnooper, IPlayerUsage> playerStatsCollector = new PrivateFields<PlayerUsageSnooper, IPlayerUsage>(PlayerUsageSnooper.class, "playerStatsCollector", "d", "field_76478_d"); // PlayerUsageSnooper/playerStatsCollector | |
144 | + public static final PrivateFields<Minecraft, Timer> minecraftTimer = new PrivateFields<Minecraft, Timer> (Minecraft.class, "timer", "S", "field_71428_T"); // Minecraft/timer | |
145 | + public static final PrivateFields<Minecraft, Profiler> minecraftProfiler = new PrivateFields<Minecraft, Profiler> (Minecraft.class, "mcProfiler", "C", "field_71424_I"); // Minecraft/mcProfiler | |
146 | + public static final PrivateFields<Minecraft, List<ResourcePack>> defaultResourcePacks = new PrivateFields<Minecraft, List<ResourcePack>> (Minecraft.class, "field_110449_ao", "aq", "field_110449_ao"); // Minecraft/field_110449_ao | |
147 | + public static final PrivateFields<RenderManager, Map> entityRenderMap = new PrivateFields<RenderManager, Map> (RenderManager.class, "entityRenderMap", "q", "field_78729_o"); // RenderManager/entityRenderMap | |
148 | + public static final PrivateFields<GuiControls, GuiScreen> guiControlsParentScreen = new PrivateFields<GuiControls, GuiScreen> (GuiControls.class, "parentScreen", "b", "field_73909_b"); // GuiControls/parentScreen | |
149 | + public static final PrivateFields<PlayerUsageSnooper, IPlayerUsage> playerStatsCollector = new PrivateFields<PlayerUsageSnooper, IPlayerUsage>(PlayerUsageSnooper.class, "playerStatsCollector", "d", "field_76478_d"); // PlayerUsageSnooper/playerStatsCollector | |
149 | 150 | } |
150 | 151 | ... | ... |