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,7 +5,8 @@ | ||
5 | <classpathentry combineaccessrules="false" kind="src" path="/Client"/> | 5 | <classpathentry combineaccessrules="false" kind="src" path="/Client"/> |
6 | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> | 6 | <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> |
7 | <classpathentry kind="lib" path="/Client/jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar"/> | 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 | <classpathentry kind="lib" path="/Client/jars/libraries/com/google/code/gson/gson/2.2.2/gson-2.2.2.jar"/> | 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 | <classpathentry kind="output" path="bin"/> | 11 | <classpathentry kind="output" path="bin"/> |
11 | </classpath> | 12 | </classpath> |
java/com/mumfrey/liteloader/core/LiteLoader.java
@@ -38,20 +38,7 @@ import java.util.zip.ZipInputStream; | @@ -38,20 +38,7 @@ import java.util.zip.ZipInputStream; | ||
38 | 38 | ||
39 | import javax.activity.InvalidActivityException; | 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 | import com.mumfrey.liteloader.ChatFilter; | 43 | import com.mumfrey.liteloader.ChatFilter; |
57 | import com.mumfrey.liteloader.ChatListener; | 44 | import com.mumfrey.liteloader.ChatListener; |
@@ -68,6 +55,7 @@ import com.mumfrey.liteloader.RenderListener; | @@ -68,6 +55,7 @@ import com.mumfrey.liteloader.RenderListener; | ||
68 | import com.mumfrey.liteloader.Tickable; | 55 | import com.mumfrey.liteloader.Tickable; |
69 | import com.mumfrey.liteloader.gui.GuiControlsPaginated; | 56 | import com.mumfrey.liteloader.gui.GuiControlsPaginated; |
70 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; | 57 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; |
58 | +import com.mumfrey.liteloader.resources.ModResourcePack; | ||
71 | import com.mumfrey.liteloader.util.ModUtilities; | 59 | import com.mumfrey.liteloader.util.ModUtilities; |
72 | import com.mumfrey.liteloader.util.PrivateFields; | 60 | import com.mumfrey.liteloader.util.PrivateFields; |
73 | 61 | ||
@@ -194,6 +182,11 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage | @@ -194,6 +182,11 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage | ||
194 | private Map<String, ModFile> modFiles = new HashMap<String, ModFile>(); | 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 | * List of loaded mods, for crash reporting | 190 | * List of loaded mods, for crash reporting |
198 | */ | 191 | */ |
199 | private String loadedModsList = "none"; | 192 | private String loadedModsList = "none"; |
@@ -614,6 +607,46 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage | @@ -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 | * Get the "mods" folder | 650 | * Get the "mods" folder |
618 | */ | 651 | */ |
619 | public File getModsFolder() | 652 | public File getModsFolder() |
@@ -811,6 +844,16 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage | @@ -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 | * Enumerate the java class path and "mods" folder to find mod classes, then | 857 | * Enumerate the java class path and "mods" folder to find mod classes, then |
815 | * load the classes | 858 | * load the classes |
816 | */ | 859 | */ |
@@ -1135,6 +1178,8 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage | @@ -1135,6 +1178,8 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage | ||
1135 | 1178 | ||
1136 | logger.info("Discovered " + this.modsToLoad.size() + " total mod(s)"); | 1179 | logger.info("Discovered " + this.modsToLoad.size() + " total mod(s)"); |
1137 | 1180 | ||
1181 | + boolean addedResources = false; | ||
1182 | + | ||
1138 | for (Class<? extends LiteMod> mod : this.modsToLoad.values()) | 1183 | for (Class<? extends LiteMod> mod : this.modsToLoad.values()) |
1139 | { | 1184 | { |
1140 | try | 1185 | try |
@@ -1147,6 +1192,14 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage | @@ -1147,6 +1192,14 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage | ||
1147 | { | 1192 | { |
1148 | this.mods.add(newMod); | 1193 | this.mods.add(newMod); |
1149 | logger.info("Successfully added mod " + newMod.getName() + " version " + newMod.getVersion()); | 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 | else | 1204 | else |
1152 | { | 1205 | { |
@@ -1159,6 +1212,11 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage | @@ -1159,6 +1212,11 @@ public final class LiteLoader implements FilenameFilter, IPlayerUsage | ||
1159 | th.printStackTrace(); | 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 +6,7 @@ import java.util.Map; | ||
6 | 6 | ||
7 | import com.google.gson.Gson; | 7 | import com.google.gson.Gson; |
8 | import com.google.gson.JsonSyntaxException; | 8 | import com.google.gson.JsonSyntaxException; |
9 | +import com.mumfrey.liteloader.resources.ModResourcePack; | ||
9 | 10 | ||
10 | /** | 11 | /** |
11 | * Wrapper for file which represents a mod file to load with associated version information and | 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,6 +60,11 @@ public class ModFile extends File | ||
59 | private boolean hasRevision = false; | 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 | * ALL of the parsed metadata from the file, associated with the mod later on for retrieval via the loader | 68 | * ALL of the parsed metadata from the file, associated with the mod later on for retrieval via the loader |
63 | */ | 69 | */ |
64 | private HashMap<String, String> metaData = new HashMap<String, String>(); | 70 | private HashMap<String, String> metaData = new HashMap<String, String>(); |
@@ -162,6 +168,23 @@ public class ModFile extends File | @@ -162,6 +168,23 @@ public class ModFile extends File | ||
162 | return this.metaData; | 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 | @Override | 188 | @Override |
166 | public int compareTo(File other) | 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,9 +2,9 @@ package com.mumfrey.liteloader.util; | ||
2 | 2 | ||
3 | import java.lang.reflect.Field; | 3 | import java.lang.reflect.Field; |
4 | import java.lang.reflect.Modifier; | 4 | import java.lang.reflect.Modifier; |
5 | +import java.util.List; | ||
5 | import java.util.Map; | 6 | import java.util.Map; |
6 | 7 | ||
7 | -import net.minecraft.src.Minecraft; | ||
8 | import net.minecraft.src.*; | 8 | import net.minecraft.src.*; |
9 | 9 | ||
10 | /** | 10 | /** |
@@ -141,10 +141,11 @@ public class PrivateFields<P, T> | @@ -141,10 +141,11 @@ public class PrivateFields<P, T> | ||
141 | public static final StaticFields<TileEntity, Map> tileEntityNameToClassMap = new StaticFields<TileEntity, Map> (TileEntity.class, "nameToClassMap", "a", "field_70326_a"); // TileEntity/nameToClassMap | 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 |