Commit 104bd7e59b0934c734f1179b7d6ce04caeb1e020
1 parent
10c0f192
internal reshuffling to support dedicated server
Showing
30 changed files
with
900 additions
and
566 deletions
debug/com/mumfrey/liteloader/debug/Start.java
@@ -14,6 +14,7 @@ import net.minecraft.launchwrapper.Launch; | @@ -14,6 +14,7 @@ import net.minecraft.launchwrapper.Launch; | ||
14 | import com.google.common.base.Strings; | 14 | import com.google.common.base.Strings; |
15 | import com.google.common.collect.ImmutableSet; | 15 | import com.google.common.collect.ImmutableSet; |
16 | import com.mumfrey.liteloader.launch.LiteLoaderTweaker; | 16 | import com.mumfrey.liteloader.launch.LiteLoaderTweaker; |
17 | +import com.mumfrey.liteloader.launch.LiteLoaderTweakerServer; | ||
17 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | 18 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
18 | 19 | ||
19 | /** | 20 | /** |
@@ -56,12 +57,32 @@ public abstract class Start | @@ -56,12 +57,32 @@ public abstract class Start | ||
56 | Map<String, Set<String>> qualifiedArgs = new HashMap<String, Set<String>>(); | 57 | Map<String, Set<String>> qualifiedArgs = new HashMap<String, Set<String>>(); |
57 | 58 | ||
58 | Start.parseArgs(args, unqualifiedArgs, qualifiedArgs); | 59 | Start.parseArgs(args, unqualifiedArgs, qualifiedArgs); |
59 | - Start.addRequiredArgs(args, unqualifiedArgs, qualifiedArgs); | 60 | + |
61 | + if (Start.hasArg(unqualifiedArgs, "server")) | ||
62 | + { | ||
63 | + Start.addRequiredArgsServer(args, unqualifiedArgs, qualifiedArgs); | ||
64 | + } | ||
65 | + else | ||
66 | + { | ||
67 | + Start.addRequiredArgsClient(args, unqualifiedArgs, qualifiedArgs); | ||
68 | + } | ||
69 | + | ||
60 | args = Start.combineArgs(args, unqualifiedArgs, qualifiedArgs); | 70 | args = Start.combineArgs(args, unqualifiedArgs, qualifiedArgs); |
61 | 71 | ||
62 | return args; | 72 | return args; |
63 | } | 73 | } |
64 | 74 | ||
75 | + private static boolean hasArg(List<String> args, String target) | ||
76 | + { | ||
77 | + for (String arg : args) | ||
78 | + { | ||
79 | + if (target.equalsIgnoreCase(arg)) | ||
80 | + return true; | ||
81 | + } | ||
82 | + | ||
83 | + return false; | ||
84 | + } | ||
85 | + | ||
65 | /** | 86 | /** |
66 | * Read the args from the command line into the qualified and unqualified collections | 87 | * Read the args from the command line into the qualified and unqualified collections |
67 | */ | 88 | */ |
@@ -91,7 +112,7 @@ public abstract class Start | @@ -91,7 +112,7 @@ public abstract class Start | ||
91 | if (qualifier != null) unqualifiedArgs.add(qualifier); | 112 | if (qualifier != null) unqualifiedArgs.add(qualifier); |
92 | } | 113 | } |
93 | 114 | ||
94 | - private static void addRequiredArgs(String[] args, List<String> unqualifiedArgs, Map<String, Set<String>> qualifiedArgs) | 115 | + private static void addRequiredArgsClient(String[] args, List<String> unqualifiedArgs, Map<String, Set<String>> qualifiedArgs) |
95 | { | 116 | { |
96 | LoginManager loginManager = Start.doLogin(qualifiedArgs); | 117 | LoginManager loginManager = Start.doLogin(qualifiedArgs); |
97 | 118 | ||
@@ -109,6 +130,15 @@ public abstract class Start | @@ -109,6 +130,15 @@ public abstract class Start | ||
109 | Start.addArg(qualifiedArgs, "--assetIndex", LiteLoaderTweaker.VERSION); | 130 | Start.addArg(qualifiedArgs, "--assetIndex", LiteLoaderTweaker.VERSION); |
110 | Start.addArg(qualifiedArgs, "--assetsDir", assetsDir.getAbsolutePath()); | 131 | Start.addArg(qualifiedArgs, "--assetsDir", assetsDir.getAbsolutePath()); |
111 | } | 132 | } |
133 | + | ||
134 | + private static void addRequiredArgsServer(String[] args, List<String> unqualifiedArgs, Map<String, Set<String>> qualifiedArgs) | ||
135 | + { | ||
136 | + File gameDir = new File(System.getProperty("user.dir")); | ||
137 | + | ||
138 | + Start.addArg(qualifiedArgs, "--tweakClass", LiteLoaderTweakerServer.class.getName()); | ||
139 | + Start.addArg(qualifiedArgs, "--version", "mcp"); | ||
140 | + Start.addArg(qualifiedArgs, "--gameDir", gameDir.getAbsolutePath()); | ||
141 | + } | ||
112 | 142 | ||
113 | private static LoginManager doLogin(Map<String, Set<String>> qualifiedArgs) | 143 | private static LoginManager doLogin(Map<String, Set<String>> qualifiedArgs) |
114 | { | 144 | { |
java/client/com/mumfrey/liteloader/client/GameEngineClient.java
1 | package com.mumfrey.liteloader.client; | 1 | package com.mumfrey.liteloader.client; |
2 | 2 | ||
3 | import java.util.Arrays; | 3 | import java.util.Arrays; |
4 | -import java.util.HashMap; | ||
5 | import java.util.LinkedList; | 4 | import java.util.LinkedList; |
6 | import java.util.List; | 5 | import java.util.List; |
7 | -import java.util.Map; | ||
8 | 6 | ||
9 | import net.minecraft.client.Minecraft; | 7 | import net.minecraft.client.Minecraft; |
10 | import net.minecraft.client.audio.SoundHandler; | 8 | import net.minecraft.client.audio.SoundHandler; |
11 | import net.minecraft.client.gui.GuiNewChat; | 9 | import net.minecraft.client.gui.GuiNewChat; |
12 | import net.minecraft.client.gui.GuiScreen; | 10 | import net.minecraft.client.gui.GuiScreen; |
13 | import net.minecraft.client.gui.ScaledResolution; | 11 | import net.minecraft.client.gui.ScaledResolution; |
14 | -import net.minecraft.client.resources.IResourceManager; | ||
15 | -import net.minecraft.client.resources.IResourcePack; | ||
16 | import net.minecraft.client.settings.GameSettings; | 12 | import net.minecraft.client.settings.GameSettings; |
17 | import net.minecraft.client.settings.KeyBinding; | 13 | import net.minecraft.client.settings.KeyBinding; |
18 | import net.minecraft.profiler.Profiler; | 14 | import net.minecraft.profiler.Profiler; |
@@ -20,7 +16,7 @@ import net.minecraft.server.integrated.IntegratedServer; | @@ -20,7 +16,7 @@ import net.minecraft.server.integrated.IntegratedServer; | ||
20 | 16 | ||
21 | import com.mumfrey.liteloader.client.overlays.IMinecraft; | 17 | import com.mumfrey.liteloader.client.overlays.IMinecraft; |
22 | import com.mumfrey.liteloader.common.GameEngine; | 18 | import com.mumfrey.liteloader.common.GameEngine; |
23 | -import com.mumfrey.liteloader.common.LoadingProgress; | 19 | +import com.mumfrey.liteloader.common.Resources; |
24 | 20 | ||
25 | /** | 21 | /** |
26 | * | 22 | * |
@@ -30,15 +26,7 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> | @@ -30,15 +26,7 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> | ||
30 | { | 26 | { |
31 | private final Minecraft engine = Minecraft.getMinecraft(); | 27 | private final Minecraft engine = Minecraft.getMinecraft(); |
32 | 28 | ||
33 | - /** | ||
34 | - * Registered resource packs | ||
35 | - */ | ||
36 | - private final Map<String, IResourcePack> registeredResourcePacks = new HashMap<String, IResourcePack>(); | ||
37 | - | ||
38 | - /** | ||
39 | - * True while initialising mods if we need to do a resource manager reload once the process is completed | ||
40 | - */ | ||
41 | - private boolean pendingResourceReload; | 29 | + private final Resources<?, ?> resources = new ResourcesClient(); |
42 | 30 | ||
43 | /* (non-Javadoc) | 31 | /* (non-Javadoc) |
44 | * @see com.mumfrey.liteloader.common.GameEngine#getProfiler() | 32 | * @see com.mumfrey.liteloader.common.GameEngine#getProfiler() |
@@ -50,20 +38,6 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> | @@ -50,20 +38,6 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> | ||
50 | } | 38 | } |
51 | 39 | ||
52 | /* (non-Javadoc) | 40 | /* (non-Javadoc) |
53 | - * @see com.mumfrey.liteloader.common.GameEngine#refreshResources(boolean) | ||
54 | - */ | ||
55 | - @Override | ||
56 | - public void refreshResources(boolean force) | ||
57 | - { | ||
58 | - if (this.pendingResourceReload || force) | ||
59 | - { | ||
60 | - LoadingProgress.setMessage("Reloading Resources..."); | ||
61 | - this.pendingResourceReload = false; | ||
62 | - this.engine.refreshResources(); | ||
63 | - } | ||
64 | - } | ||
65 | - | ||
66 | - /* (non-Javadoc) | ||
67 | * @see com.mumfrey.liteloader.common.GameEngine#isClient() | 41 | * @see com.mumfrey.liteloader.common.GameEngine#isClient() |
68 | */ | 42 | */ |
69 | @Override | 43 | @Override |
@@ -126,6 +100,12 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> | @@ -126,6 +100,12 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> | ||
126 | return this.engine.getIntegratedServer(); | 100 | return this.engine.getIntegratedServer(); |
127 | } | 101 | } |
128 | 102 | ||
103 | + @Override | ||
104 | + public Resources<?, ?> getResources() | ||
105 | + { | ||
106 | + return this.resources; | ||
107 | + } | ||
108 | + | ||
129 | public GameSettings getGameSettings() | 109 | public GameSettings getGameSettings() |
130 | { | 110 | { |
131 | return this.engine.gameSettings; | 111 | return this.engine.gameSettings; |
@@ -151,61 +131,11 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> | @@ -151,61 +131,11 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> | ||
151 | return this.engine.gameSettings.hideGUI; | 131 | return this.engine.gameSettings.hideGUI; |
152 | } | 132 | } |
153 | 133 | ||
154 | - /* (non-Javadoc) | ||
155 | - * @see com.mumfrey.liteloader.common.GameEngine#getResourceManager() | ||
156 | - */ | ||
157 | - @Override | ||
158 | - public IResourceManager getResourceManager() | ||
159 | - { | ||
160 | - return this.engine.getResourceManager(); | ||
161 | - } | ||
162 | - | ||
163 | public SoundHandler getSoundHandler() | 134 | public SoundHandler getSoundHandler() |
164 | { | 135 | { |
165 | return this.engine.getSoundHandler(); | 136 | return this.engine.getSoundHandler(); |
166 | } | 137 | } |
167 | - | ||
168 | - /* (non-Javadoc) | ||
169 | - * @see com.mumfrey.liteloader.common.GameEngine#registerResourcePack(net.minecraft.client.resources.IResourcePack) | ||
170 | - */ | ||
171 | - @Override | ||
172 | - public boolean registerResourcePack(IResourcePack resourcePack) | ||
173 | - { | ||
174 | - if (!this.registeredResourcePacks.containsKey(resourcePack.getPackName())) | ||
175 | - { | ||
176 | - this.pendingResourceReload = true; | ||
177 | - | ||
178 | - List<IResourcePack> defaultResourcePacks = ((IMinecraft)this.engine).getDefaultResourcePacks(); | ||
179 | - if (!defaultResourcePacks.contains(resourcePack)) | ||
180 | - { | ||
181 | - defaultResourcePacks.add(resourcePack); | ||
182 | - this.registeredResourcePacks.put(resourcePack.getPackName(), resourcePack); | ||
183 | - return true; | ||
184 | - } | ||
185 | - } | ||
186 | - | ||
187 | - return false; | ||
188 | - } | ||
189 | - | ||
190 | - /* (non-Javadoc) | ||
191 | - * @see com.mumfrey.liteloader.common.GameEngine#unRegisterResourcePack(net.minecraft.client.resources.IResourcePack) | ||
192 | - */ | ||
193 | - @Override | ||
194 | - public boolean unRegisterResourcePack(IResourcePack resourcePack) | ||
195 | - { | ||
196 | - if (this.registeredResourcePacks.containsValue(resourcePack)) | ||
197 | - { | ||
198 | - this.pendingResourceReload = true; | ||
199 | 138 | ||
200 | - List<IResourcePack> defaultResourcePacks = ((IMinecraft)this.engine).getDefaultResourcePacks(); | ||
201 | - this.registeredResourcePacks.remove(resourcePack.getPackName()); | ||
202 | - defaultResourcePacks.remove(resourcePack); | ||
203 | - return true; | ||
204 | - } | ||
205 | - | ||
206 | - return false; | ||
207 | - } | ||
208 | - | ||
209 | /* (non-Javadoc) | 139 | /* (non-Javadoc) |
210 | * @see com.mumfrey.liteloader.common.GameEngine#getKeyBindings() | 140 | * @see com.mumfrey.liteloader.common.GameEngine#getKeyBindings() |
211 | */ | 141 | */ |
java/client/com/mumfrey/liteloader/client/LiteLoaderCoreProviderClient.java
1 | package com.mumfrey.liteloader.client; | 1 | package com.mumfrey.liteloader.client; |
2 | 2 | ||
3 | +import net.minecraft.client.resources.IResourceManager; | ||
4 | +import net.minecraft.client.resources.IResourcePack; | ||
3 | import net.minecraft.client.resources.SimpleReloadableResourceManager; | 5 | import net.minecraft.client.resources.SimpleReloadableResourceManager; |
4 | import net.minecraft.network.INetHandler; | 6 | import net.minecraft.network.INetHandler; |
5 | import net.minecraft.network.play.server.S01PacketJoinGame; | 7 | import net.minecraft.network.play.server.S01PacketJoinGame; |
@@ -7,6 +9,7 @@ import net.minecraft.world.World; | @@ -7,6 +9,7 @@ import net.minecraft.world.World; | ||
7 | 9 | ||
8 | import com.mumfrey.liteloader.api.CoreProvider; | 10 | import com.mumfrey.liteloader.api.CoreProvider; |
9 | import com.mumfrey.liteloader.common.GameEngine; | 11 | import com.mumfrey.liteloader.common.GameEngine; |
12 | +import com.mumfrey.liteloader.common.Resources; | ||
10 | import com.mumfrey.liteloader.core.LiteLoader; | 13 | import com.mumfrey.liteloader.core.LiteLoader; |
11 | import com.mumfrey.liteloader.core.LiteLoaderMods; | 14 | import com.mumfrey.liteloader.core.LiteLoaderMods; |
12 | import com.mumfrey.liteloader.launch.LoaderProperties; | 15 | import com.mumfrey.liteloader.launch.LoaderProperties; |
@@ -45,10 +48,11 @@ public class LiteLoaderCoreProviderClient implements CoreProvider | @@ -45,10 +48,11 @@ public class LiteLoaderCoreProviderClient implements CoreProvider | ||
45 | this.inhibitSoundManagerReload = this.properties.getAndStoreBooleanProperty(LoaderProperties.OPTION_SOUND_MANAGER_FIX, true); | 48 | this.inhibitSoundManagerReload = this.properties.getAndStoreBooleanProperty(LoaderProperties.OPTION_SOUND_MANAGER_FIX, true); |
46 | } | 49 | } |
47 | 50 | ||
51 | + @SuppressWarnings("unchecked") | ||
48 | @Override | 52 | @Override |
49 | public void onPostInit(GameEngine<?, ?> engine) | 53 | public void onPostInit(GameEngine<?, ?> engine) |
50 | { | 54 | { |
51 | - this.soundHandlerReloadInhibitor = new SoundHandlerReloadInhibitor((SimpleReloadableResourceManager)engine.getResourceManager(), ((GameEngineClient)engine).getSoundHandler()); | 55 | + this.soundHandlerReloadInhibitor = new SoundHandlerReloadInhibitor((SimpleReloadableResourceManager)engine.getResources().getResourceManager(), ((GameEngineClient)engine).getSoundHandler()); |
52 | 56 | ||
53 | if (this.inhibitSoundManagerReload) | 57 | if (this.inhibitSoundManagerReload) |
54 | { | 58 | { |
@@ -56,7 +60,8 @@ public class LiteLoaderCoreProviderClient implements CoreProvider | @@ -56,7 +60,8 @@ public class LiteLoaderCoreProviderClient implements CoreProvider | ||
56 | } | 60 | } |
57 | 61 | ||
58 | // Add self as a resource pack for texture/lang resources | 62 | // Add self as a resource pack for texture/lang resources |
59 | - LiteLoader.getGameEngine().registerResourcePack(new InternalResourcePack("LiteLoader", LiteLoader.class, "liteloader")); | 63 | + Resources<IResourceManager, IResourcePack> resources = (Resources<IResourceManager, IResourcePack>)LiteLoader.getGameEngine().getResources(); |
64 | + resources.registerResourcePack(new InternalResourcePack("LiteLoader", LiteLoader.class, "liteloader")); | ||
60 | } | 65 | } |
61 | 66 | ||
62 | @Override | 67 | @Override |
java/client/com/mumfrey/liteloader/client/LiteLoaderEventBrokerClient.java
@@ -6,6 +6,8 @@ import net.minecraft.client.gui.GuiNewChat; | @@ -6,6 +6,8 @@ import net.minecraft.client.gui.GuiNewChat; | ||
6 | import net.minecraft.client.gui.ScaledResolution; | 6 | import net.minecraft.client.gui.ScaledResolution; |
7 | import net.minecraft.client.renderer.entity.Render; | 7 | import net.minecraft.client.renderer.entity.Render; |
8 | import net.minecraft.client.renderer.entity.RenderManager; | 8 | import net.minecraft.client.renderer.entity.RenderManager; |
9 | +import net.minecraft.client.resources.IResourceManager; | ||
10 | +import net.minecraft.client.resources.IResourceManagerReloadListener; | ||
9 | import net.minecraft.client.shader.Framebuffer; | 11 | import net.minecraft.client.shader.Framebuffer; |
10 | import net.minecraft.entity.Entity; | 12 | import net.minecraft.entity.Entity; |
11 | import net.minecraft.network.play.client.C01PacketChatMessage; | 13 | import net.minecraft.network.play.client.C01PacketChatMessage; |
@@ -19,9 +21,9 @@ import org.lwjgl.input.Mouse; | @@ -19,9 +21,9 @@ import org.lwjgl.input.Mouse; | ||
19 | import com.mumfrey.liteloader.*; | 21 | import com.mumfrey.liteloader.*; |
20 | import com.mumfrey.liteloader.client.overlays.IMinecraft; | 22 | import com.mumfrey.liteloader.client.overlays.IMinecraft; |
21 | import com.mumfrey.liteloader.common.LoadingProgress; | 23 | import com.mumfrey.liteloader.common.LoadingProgress; |
22 | -import com.mumfrey.liteloader.core.LiteLoaderEventBroker; | ||
23 | import com.mumfrey.liteloader.core.InterfaceRegistrationDelegate; | 24 | import com.mumfrey.liteloader.core.InterfaceRegistrationDelegate; |
24 | import com.mumfrey.liteloader.core.LiteLoader; | 25 | import com.mumfrey.liteloader.core.LiteLoader; |
26 | +import com.mumfrey.liteloader.core.LiteLoaderEventBroker; | ||
25 | import com.mumfrey.liteloader.core.event.HandlerList; | 27 | import com.mumfrey.liteloader.core.event.HandlerList; |
26 | import com.mumfrey.liteloader.core.event.HandlerList.ReturnLogicOp; | 28 | import com.mumfrey.liteloader.core.event.HandlerList.ReturnLogicOp; |
27 | import com.mumfrey.liteloader.interfaces.FastIterableDeque; | 29 | import com.mumfrey.liteloader.interfaces.FastIterableDeque; |
@@ -30,7 +32,7 @@ import com.mumfrey.liteloader.transformers.event.EventInfo; | @@ -30,7 +32,7 @@ import com.mumfrey.liteloader.transformers.event.EventInfo; | ||
30 | import com.mumfrey.liteloader.transformers.event.ReturnEventInfo; | 32 | import com.mumfrey.liteloader.transformers.event.ReturnEventInfo; |
31 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | 33 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
32 | 34 | ||
33 | -public class LiteLoaderEventBrokerClient extends LiteLoaderEventBroker<Minecraft, IntegratedServer> | 35 | +public class LiteLoaderEventBrokerClient extends LiteLoaderEventBroker<Minecraft, IntegratedServer> implements IResourceManagerReloadListener |
34 | { | 36 | { |
35 | private static LiteLoaderEventBrokerClient instance; | 37 | private static LiteLoaderEventBrokerClient instance; |
36 | 38 | ||
@@ -89,6 +91,12 @@ public class LiteLoaderEventBrokerClient extends LiteLoaderEventBroker<Minecraft | @@ -89,6 +91,12 @@ public class LiteLoaderEventBrokerClient extends LiteLoaderEventBroker<Minecraft | ||
89 | return LiteLoaderEventBrokerClient.instance; | 91 | return LiteLoaderEventBrokerClient.instance; |
90 | } | 92 | } |
91 | 93 | ||
94 | + @Override | ||
95 | + public void onResourceManagerReload(IResourceManager resourceManager) | ||
96 | + { | ||
97 | + LoadingProgress.setMessage("Reloading Resources..."); | ||
98 | + } | ||
99 | + | ||
92 | /* (non-Javadoc) | 100 | /* (non-Javadoc) |
93 | * @see com.mumfrey.liteloader.api.InterfaceProvider#registerInterfaces(com.mumfrey.liteloader.core.InterfaceRegistrationDelegate) | 101 | * @see com.mumfrey.liteloader.api.InterfaceProvider#registerInterfaces(com.mumfrey.liteloader.core.InterfaceRegistrationDelegate) |
94 | */ | 102 | */ |
@@ -230,7 +238,7 @@ public class LiteLoaderEventBrokerClient extends LiteLoaderEventBroker<Minecraft | @@ -230,7 +238,7 @@ public class LiteLoaderEventBrokerClient extends LiteLoaderEventBroker<Minecraft | ||
230 | @Override | 238 | @Override |
231 | protected void onStartupComplete() | 239 | protected void onStartupComplete() |
232 | { | 240 | { |
233 | - this.engine.refreshResources(false); | 241 | + this.engine.getResources().refreshResources(false); |
234 | 242 | ||
235 | for (InitCompleteListener initMod : this.initListeners) | 243 | for (InitCompleteListener initMod : this.initListeners) |
236 | { | 244 | { |
java/client/com/mumfrey/liteloader/client/ResourceObserver.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client; | ||
2 | + | ||
3 | +import java.io.File; | ||
4 | +import java.util.HashMap; | ||
5 | +import java.util.Map; | ||
6 | + | ||
7 | +import net.minecraft.client.resources.IResourceManager; | ||
8 | +import net.minecraft.client.resources.IResourcePack; | ||
9 | + | ||
10 | +import com.mumfrey.liteloader.LiteMod; | ||
11 | +import com.mumfrey.liteloader.api.ModLoadObserver; | ||
12 | +import com.mumfrey.liteloader.common.Resources; | ||
13 | +import com.mumfrey.liteloader.core.LiteLoader; | ||
14 | +import com.mumfrey.liteloader.core.ModInfo; | ||
15 | +import com.mumfrey.liteloader.interfaces.LoadableMod; | ||
16 | +import com.mumfrey.liteloader.resources.ModResourcePack; | ||
17 | +import com.mumfrey.liteloader.resources.ModResourcePackDir; | ||
18 | +import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | ||
19 | + | ||
20 | +/** | ||
21 | + * Observer which handles registering mods on the client as resource packs | ||
22 | + * | ||
23 | + * @author Adam Mummery-Smith | ||
24 | + */ | ||
25 | +public class ResourceObserver implements ModLoadObserver | ||
26 | +{ | ||
27 | + private final Map<String, IResourcePack> resourcePacks = new HashMap<String, IResourcePack>(); | ||
28 | + | ||
29 | + public ResourceObserver() | ||
30 | + { | ||
31 | + } | ||
32 | + | ||
33 | + @Override | ||
34 | + public void onModLoaded(LiteMod mod) | ||
35 | + { | ||
36 | + } | ||
37 | + | ||
38 | + @SuppressWarnings("unchecked") | ||
39 | + @Override | ||
40 | + public void onPostModLoaded(ModInfo<LoadableMod<?>> handle) | ||
41 | + { | ||
42 | + if (!handle.hasContainer()) return; | ||
43 | + | ||
44 | + LoadableMod<?> container = handle.getContainer(); | ||
45 | + String modName = handle.getMod().getName(); | ||
46 | + | ||
47 | + if (modName == null) return; | ||
48 | + | ||
49 | + if (container.hasResources()) | ||
50 | + { | ||
51 | + LiteLoaderLogger.info("Adding \"%s\" to active resource pack set", container.getLocation()); | ||
52 | + IResourcePack resourcePack = this.initResourcePack(container, modName); | ||
53 | + Resources<IResourceManager, IResourcePack> resources = (Resources<IResourceManager, IResourcePack>)LiteLoader.getGameEngine().getResources(); | ||
54 | + if (resources.registerResourcePack(resourcePack)) | ||
55 | + { | ||
56 | + LiteLoaderLogger.info("Successfully added \"%s\" to active resource pack set", container.getLocation()); | ||
57 | + } | ||
58 | + } | ||
59 | + } | ||
60 | + | ||
61 | + public IResourcePack initResourcePack(LoadableMod<?> container, String name) | ||
62 | + { | ||
63 | + IResourcePack resourcePack = this.getResourcePack(container); | ||
64 | + | ||
65 | + if (resourcePack == null) | ||
66 | + { | ||
67 | + if (container.isDirectory()) | ||
68 | + { | ||
69 | + LiteLoaderLogger.info("Setting up \"%s/%s\" as mod resource pack with identifier \"%s\"", container.toFile().getParentFile().getName(), container.getName(), name); | ||
70 | + resourcePack = new ModResourcePackDir(name, container.toFile()); | ||
71 | + } | ||
72 | + else | ||
73 | + { | ||
74 | + LiteLoaderLogger.info("Setting up \"%s\" as mod resource pack with identifier \"%s\"", container.getName(), name); | ||
75 | + resourcePack = new ModResourcePack(name, container.toFile()); | ||
76 | + } | ||
77 | + | ||
78 | + this.setResourcePack(container, resourcePack); | ||
79 | + } | ||
80 | + | ||
81 | + return resourcePack; | ||
82 | + } | ||
83 | + | ||
84 | + private IResourcePack getResourcePack(LoadableMod<?> container) | ||
85 | + { | ||
86 | + String path = container.getLocation(); | ||
87 | + return this.resourcePacks.get(path); | ||
88 | + } | ||
89 | + | ||
90 | + private void setResourcePack(LoadableMod<?> container, IResourcePack resourcePack) | ||
91 | + { | ||
92 | + String path = container.getLocation(); | ||
93 | + this.resourcePacks.put(path, resourcePack); | ||
94 | + } | ||
95 | + | ||
96 | + @Override | ||
97 | + public void onModLoadFailed(LoadableMod<?> container, String identifier, String reason, Throwable th) | ||
98 | + { | ||
99 | + } | ||
100 | + | ||
101 | + @Override | ||
102 | + public void onPreInitMod(LiteMod mod) | ||
103 | + { | ||
104 | + } | ||
105 | + | ||
106 | + @Override | ||
107 | + public void onPostInitMod(LiteMod mod) | ||
108 | + { | ||
109 | + } | ||
110 | + | ||
111 | + @Override | ||
112 | + public void onMigrateModConfig(LiteMod mod, File newConfigPath, File oldConfigPath) | ||
113 | + { | ||
114 | + } | ||
115 | +} |
java/client/com/mumfrey/liteloader/client/ResourcesClient.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client; | ||
2 | + | ||
3 | +import java.util.HashMap; | ||
4 | +import java.util.List; | ||
5 | +import java.util.Map; | ||
6 | + | ||
7 | +import net.minecraft.client.Minecraft; | ||
8 | +import net.minecraft.client.resources.IResourceManager; | ||
9 | +import net.minecraft.client.resources.IResourcePack; | ||
10 | + | ||
11 | +import com.mumfrey.liteloader.client.overlays.IMinecraft; | ||
12 | +import com.mumfrey.liteloader.common.LoadingProgress; | ||
13 | +import com.mumfrey.liteloader.common.Resources; | ||
14 | + | ||
15 | +public class ResourcesClient implements Resources<IResourceManager, IResourcePack> | ||
16 | +{ | ||
17 | + private final Minecraft engine = Minecraft.getMinecraft(); | ||
18 | + | ||
19 | + /** | ||
20 | + * Registered resource packs | ||
21 | + */ | ||
22 | + private final Map<String, IResourcePack> registeredResourcePacks = new HashMap<String, IResourcePack>(); | ||
23 | + | ||
24 | + /** | ||
25 | + * True while initialising mods if we need to do a resource manager reload once the process is completed | ||
26 | + */ | ||
27 | + private boolean pendingResourceReload; | ||
28 | + | ||
29 | + /* (non-Javadoc) | ||
30 | + * @see com.mumfrey.liteloader.common.GameEngine#refreshResources(boolean) | ||
31 | + */ | ||
32 | + @Override | ||
33 | + public void refreshResources(boolean force) | ||
34 | + { | ||
35 | + if (this.pendingResourceReload || force) | ||
36 | + { | ||
37 | + LoadingProgress.setMessage("Reloading Resources..."); | ||
38 | + this.pendingResourceReload = false; | ||
39 | + this.engine.refreshResources(); | ||
40 | + } | ||
41 | + } | ||
42 | + | ||
43 | + /* (non-Javadoc) | ||
44 | + * @see com.mumfrey.liteloader.common.GameEngine#getResourceManager() | ||
45 | + */ | ||
46 | + @Override | ||
47 | + public IResourceManager getResourceManager() | ||
48 | + { | ||
49 | + return this.engine.getResourceManager(); | ||
50 | + } | ||
51 | + | ||
52 | + /* (non-Javadoc) | ||
53 | + * @see com.mumfrey.liteloader.common.GameEngine#registerResourcePack(net.minecraft.client.resources.IResourcePack) | ||
54 | + */ | ||
55 | + @Override | ||
56 | + public boolean registerResourcePack(IResourcePack resourcePack) | ||
57 | + { | ||
58 | + if (!this.registeredResourcePacks.containsKey(resourcePack.getPackName())) | ||
59 | + { | ||
60 | + this.pendingResourceReload = true; | ||
61 | + | ||
62 | + List<IResourcePack> defaultResourcePacks = ((IMinecraft)this.engine).getDefaultResourcePacks(); | ||
63 | + if (!defaultResourcePacks.contains(resourcePack)) | ||
64 | + { | ||
65 | + defaultResourcePacks.add(resourcePack); | ||
66 | + this.registeredResourcePacks.put(resourcePack.getPackName(), resourcePack); | ||
67 | + return true; | ||
68 | + } | ||
69 | + } | ||
70 | + | ||
71 | + return false; | ||
72 | + } | ||
73 | + | ||
74 | + /* (non-Javadoc) | ||
75 | + * @see com.mumfrey.liteloader.common.GameEngine#unRegisterResourcePack(net.minecraft.client.resources.IResourcePack) | ||
76 | + */ | ||
77 | + @Override | ||
78 | + public boolean unRegisterResourcePack(IResourcePack resourcePack) | ||
79 | + { | ||
80 | + if (this.registeredResourcePacks.containsValue(resourcePack)) | ||
81 | + { | ||
82 | + this.pendingResourceReload = true; | ||
83 | + | ||
84 | + List<IResourcePack> defaultResourcePacks = ((IMinecraft)this.engine).getDefaultResourcePacks(); | ||
85 | + this.registeredResourcePacks.remove(resourcePack.getPackName()); | ||
86 | + defaultResourcePacks.remove(resourcePack); | ||
87 | + return true; | ||
88 | + } | ||
89 | + | ||
90 | + return false; | ||
91 | + } | ||
92 | +} |
java/client/com/mumfrey/liteloader/client/Translator.java
0 โ 100644
1 | +package com.mumfrey.liteloader.client; | ||
2 | + | ||
3 | +import net.minecraft.client.resources.I18n; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.api.TranslationProvider; | ||
6 | + | ||
7 | +public class Translator implements TranslationProvider | ||
8 | +{ | ||
9 | + /* (non-Javadoc) | ||
10 | + * @see com.mumfrey.liteloader.api.TranslationProvider#translate(java.lang.String, java.lang.Object[]) | ||
11 | + */ | ||
12 | + @Override | ||
13 | + public String translate(String key, Object... args) | ||
14 | + { | ||
15 | + // TODO doesn't currently honour the contract of TranslationProvider::translate, should return null if translation is missing | ||
16 | + return I18n.format(key, args); | ||
17 | + } | ||
18 | + | ||
19 | +} |
java/client/com/mumfrey/liteloader/client/api/LiteLoaderCoreAPIClient.java
@@ -11,6 +11,8 @@ import com.mumfrey.liteloader.api.CustomisationProvider; | @@ -11,6 +11,8 @@ import com.mumfrey.liteloader.api.CustomisationProvider; | ||
11 | import com.mumfrey.liteloader.api.InterfaceProvider; | 11 | import com.mumfrey.liteloader.api.InterfaceProvider; |
12 | import com.mumfrey.liteloader.api.Observer; | 12 | import com.mumfrey.liteloader.api.Observer; |
13 | import com.mumfrey.liteloader.client.LiteLoaderCoreProviderClient; | 13 | import com.mumfrey.liteloader.client.LiteLoaderCoreProviderClient; |
14 | +import com.mumfrey.liteloader.client.ResourceObserver; | ||
15 | +import com.mumfrey.liteloader.client.Translator; | ||
14 | import com.mumfrey.liteloader.core.LiteLoader; | 16 | import com.mumfrey.liteloader.core.LiteLoader; |
15 | import com.mumfrey.liteloader.core.api.LiteLoaderCoreAPI; | 17 | import com.mumfrey.liteloader.core.api.LiteLoaderCoreAPI; |
16 | import com.mumfrey.liteloader.interfaces.ObjectFactory; | 18 | import com.mumfrey.liteloader.interfaces.ObjectFactory; |
@@ -68,7 +70,8 @@ public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI | @@ -68,7 +70,8 @@ public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI | ||
68 | return ImmutableList.<CustomisationProvider>of | 70 | return ImmutableList.<CustomisationProvider>of |
69 | ( | 71 | ( |
70 | new LiteLoaderBrandingProvider(), | 72 | new LiteLoaderBrandingProvider(), |
71 | - new LiteLoaderModInfoDecorator() | 73 | + new LiteLoaderModInfoDecorator(), |
74 | + new Translator() | ||
72 | ); | 75 | ); |
73 | } | 76 | } |
74 | 77 | ||
@@ -124,6 +127,7 @@ public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI | @@ -124,6 +127,7 @@ public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI | ||
124 | { | 127 | { |
125 | return ImmutableList.<Observer>of | 128 | return ImmutableList.<Observer>of |
126 | ( | 129 | ( |
130 | + new ResourceObserver(), | ||
127 | this.getObjectFactory().getPanelManager() | 131 | this.getObjectFactory().getPanelManager() |
128 | ); | 132 | ); |
129 | } | 133 | } |
java/client/com/mumfrey/liteloader/client/api/ObjectFactoryClient.java
@@ -22,6 +22,8 @@ import com.mumfrey.liteloader.launch.LoaderEnvironment; | @@ -22,6 +22,8 @@ import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
22 | import com.mumfrey.liteloader.launch.LoaderProperties; | 22 | import com.mumfrey.liteloader.launch.LoaderProperties; |
23 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; | 23 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; |
24 | import com.mumfrey.liteloader.permissions.PermissionsManagerServer; | 24 | import com.mumfrey.liteloader.permissions.PermissionsManagerServer; |
25 | +import com.mumfrey.liteloader.util.Input; | ||
26 | +import com.mumfrey.liteloader.util.InputManager; | ||
25 | 27 | ||
26 | /** | 28 | /** |
27 | * Factory for lifetime loader objects for the client side | 29 | * Factory for lifetime loader objects for the client side |
@@ -34,6 +36,8 @@ class ObjectFactoryClient implements ObjectFactory<Minecraft, IntegratedServer> | @@ -34,6 +36,8 @@ class ObjectFactoryClient implements ObjectFactory<Minecraft, IntegratedServer> | ||
34 | 36 | ||
35 | private LoaderProperties properties; | 37 | private LoaderProperties properties; |
36 | 38 | ||
39 | + private Input input; | ||
40 | + | ||
37 | private LiteLoaderEventBrokerClient clientEvents; | 41 | private LiteLoaderEventBrokerClient clientEvents; |
38 | 42 | ||
39 | private PacketEventsClient clientPacketEvents; | 43 | private PacketEventsClient clientPacketEvents; |
@@ -53,6 +57,17 @@ class ObjectFactoryClient implements ObjectFactory<Minecraft, IntegratedServer> | @@ -53,6 +57,17 @@ class ObjectFactoryClient implements ObjectFactory<Minecraft, IntegratedServer> | ||
53 | } | 57 | } |
54 | 58 | ||
55 | @Override | 59 | @Override |
60 | + public Input getInput() | ||
61 | + { | ||
62 | + if (this.input == null) | ||
63 | + { | ||
64 | + this.input = new InputManager(this.environment, this.properties); | ||
65 | + } | ||
66 | + | ||
67 | + return this.input; | ||
68 | + } | ||
69 | + | ||
70 | + @Override | ||
56 | public LiteLoaderEventBroker<Minecraft, IntegratedServer> getEventBroker() | 71 | public LiteLoaderEventBroker<Minecraft, IntegratedServer> getEventBroker() |
57 | { | 72 | { |
58 | if (this.clientEvents == null) | 73 | if (this.clientEvents == null) |
java/client/com/mumfrey/liteloader/client/transformers/LiteLoaderEventInjectionTransformer.java
@@ -3,11 +3,10 @@ package com.mumfrey.liteloader.client.transformers; | @@ -3,11 +3,10 @@ package com.mumfrey.liteloader.client.transformers; | ||
3 | import static com.mumfrey.liteloader.core.runtime.Methods.*; | 3 | import static com.mumfrey.liteloader.core.runtime.Methods.*; |
4 | import static com.mumfrey.liteloader.transformers.event.InjectionPoint.*; | 4 | import static com.mumfrey.liteloader.transformers.event.InjectionPoint.*; |
5 | 5 | ||
6 | +import com.mumfrey.liteloader.common.transformers.LiteLoaderEventTransformer; | ||
6 | import com.mumfrey.liteloader.core.runtime.Obf; | 7 | import com.mumfrey.liteloader.core.runtime.Obf; |
7 | import com.mumfrey.liteloader.transformers.event.Event; | 8 | import com.mumfrey.liteloader.transformers.event.Event; |
8 | -import com.mumfrey.liteloader.transformers.event.EventInjectionTransformer; | ||
9 | import com.mumfrey.liteloader.transformers.event.InjectionPoint; | 9 | import com.mumfrey.liteloader.transformers.event.InjectionPoint; |
10 | -import com.mumfrey.liteloader.transformers.event.MethodInfo; | ||
11 | import com.mumfrey.liteloader.transformers.event.inject.BeforeInvoke; | 10 | import com.mumfrey.liteloader.transformers.event.inject.BeforeInvoke; |
12 | import com.mumfrey.liteloader.transformers.event.inject.BeforeNew; | 11 | import com.mumfrey.liteloader.transformers.event.inject.BeforeNew; |
13 | import com.mumfrey.liteloader.transformers.event.inject.BeforeReturn; | 12 | import com.mumfrey.liteloader.transformers.event.inject.BeforeReturn; |
@@ -19,11 +18,19 @@ import com.mumfrey.liteloader.transformers.event.inject.MethodHead; | @@ -19,11 +18,19 @@ import com.mumfrey.liteloader.transformers.event.inject.MethodHead; | ||
19 | * | 18 | * |
20 | * @author Adam Mummery-Smith | 19 | * @author Adam Mummery-Smith |
21 | */ | 20 | */ |
22 | -public class LiteLoaderEventInjectionTransformer extends EventInjectionTransformer | 21 | +public class LiteLoaderEventInjectionTransformer extends LiteLoaderEventTransformer |
23 | { | 22 | { |
24 | @Override | 23 | @Override |
24 | + protected Obf getProxy() | ||
25 | + { | ||
26 | + return Obf.CallbackProxyClient; | ||
27 | + } | ||
28 | + | ||
29 | + @Override | ||
25 | protected void addEvents() | 30 | protected void addEvents() |
26 | { | 31 | { |
32 | + super.addEvents(); | ||
33 | + | ||
27 | // Event declaraions | 34 | // Event declaraions |
28 | Event onOutboundChat = Event.getOrCreate("onOutboundChat", true); | 35 | Event onOutboundChat = Event.getOrCreate("onOutboundChat", true); |
29 | Event onResize = Event.getOrCreate("updateFramebufferSize", false); | 36 | Event onResize = Event.getOrCreate("updateFramebufferSize", false); |
@@ -44,11 +51,6 @@ public class LiteLoaderEventInjectionTransformer extends EventInjectionTransform | @@ -44,11 +51,6 @@ public class LiteLoaderEventInjectionTransformer extends EventInjectionTransform | ||
44 | Event onRenderChat = Event.getOrCreate("onRenderChat", false); | 51 | Event onRenderChat = Event.getOrCreate("onRenderChat", false); |
45 | Event postRenderChat = Event.getOrCreate("postRenderChat", false); | 52 | Event postRenderChat = Event.getOrCreate("postRenderChat", false); |
46 | Event onCreateIntegratedServer = Event.getOrCreate("onCreateIntegratedServer", false); | 53 | Event onCreateIntegratedServer = Event.getOrCreate("onCreateIntegratedServer", false); |
47 | - Event onInitializePlayerConnection = Event.getOrCreate("onInitializePlayerConnection", false); | ||
48 | - Event onPlayerLogin = Event.getOrCreate("onPlayerLogin", false); | ||
49 | - Event onPlayerLogout = Event.getOrCreate("onPlayerLogout", false); | ||
50 | - Event onSpawnPlayer = Event.getOrCreate("onSpawnPlayer", false); | ||
51 | - Event onRespawnPlayer = Event.getOrCreate("onRespawnPlayer", false); | ||
52 | Event onStartupComplete = Event.getOrCreate("onStartupComplete", false); | 54 | Event onStartupComplete = Event.getOrCreate("onStartupComplete", false); |
53 | Event onSessionProfileBad = Event.getOrCreate("onSessionProfileBad", true); | 55 | Event onSessionProfileBad = Event.getOrCreate("onSessionProfileBad", true); |
54 | Event onSaveScreenshot = Event.getOrCreate("onSaveScreenshot", true); | 56 | Event onSaveScreenshot = Event.getOrCreate("onSaveScreenshot", true); |
@@ -96,11 +98,6 @@ public class LiteLoaderEventInjectionTransformer extends EventInjectionTransform | @@ -96,11 +98,6 @@ public class LiteLoaderEventInjectionTransformer extends EventInjectionTransform | ||
96 | this.add(onRenderChat, renderGameOverlay, (beforeDrawChat), "onRenderChat"); | 98 | this.add(onRenderChat, renderGameOverlay, (beforeDrawChat), "onRenderChat"); |
97 | this.add(postRenderChat, renderGameOverlay, after(beforeDrawChat), "postRenderChat"); | 99 | this.add(postRenderChat, renderGameOverlay, after(beforeDrawChat), "postRenderChat"); |
98 | this.add(onCreateIntegratedServer, integratedServerCtor, (methodReturn), "IntegratedServerCtor"); | 100 | this.add(onCreateIntegratedServer, integratedServerCtor, (methodReturn), "IntegratedServerCtor"); |
99 | - this.add(onInitializePlayerConnection, initPlayerConnection, (methodReturn), "onInitializePlayerConnection"); | ||
100 | - this.add(onPlayerLogin, playerLoggedIn, (methodReturn), "onPlayerLogin"); | ||
101 | - this.add(onPlayerLogout, playerLoggedOut, (methodReturn), "onPlayerLogout"); | ||
102 | - this.add(onSpawnPlayer, spawnPlayer, (methodReturn), "onSpawnPlayer"); | ||
103 | - this.add(onRespawnPlayer, respawnPlayer, (methodReturn), "onRespawnPlayer"); | ||
104 | this.add(onStartupComplete, startGame, (methodReturn), "onStartupComplete"); | 101 | this.add(onStartupComplete, startGame, (methodReturn), "onStartupComplete"); |
105 | this.add(onSaveScreenshot, saveScreenshot, (beforeIsFBOEnabled), "onSaveScreenshot"); | 102 | this.add(onSaveScreenshot, saveScreenshot, (beforeIsFBOEnabled), "onSaveScreenshot"); |
106 | this.add(onRenderEntity, doRenderEntity, (beforeRenderEntity), "onRenderEntity"); | 103 | this.add(onRenderEntity, doRenderEntity, (beforeRenderEntity), "onRenderEntity"); |
@@ -112,14 +109,4 @@ public class LiteLoaderEventInjectionTransformer extends EventInjectionTransform | @@ -112,14 +109,4 @@ public class LiteLoaderEventInjectionTransformer extends EventInjectionTransform | ||
112 | // Protocol handlers | 109 | // Protocol handlers |
113 | this.add(onJoinRealm, realmsPlay, (beforeStopRealsmFetcher), "onJoinRealm", Obf.PacketEventsClient); | 110 | this.add(onJoinRealm, realmsPlay, (beforeStopRealsmFetcher), "onJoinRealm", Obf.PacketEventsClient); |
114 | } | 111 | } |
115 | - | ||
116 | - protected final Event add(Event event, MethodInfo targetMethod, InjectionPoint injectionPoint, String callback) | ||
117 | - { | ||
118 | - return this.add(event, targetMethod, injectionPoint, callback, Obf.CallbackProxyClient); | ||
119 | - } | ||
120 | - | ||
121 | - private Event add(Event event, MethodInfo targetMethod, InjectionPoint injectionPoint, String callback, Obf proxy) | ||
122 | - { | ||
123 | - return this.addEvent(event, targetMethod, injectionPoint).addListener(new MethodInfo(proxy, callback)); | ||
124 | - } | ||
125 | } | 112 | } |
java/common/com/mumfrey/liteloader/resources/InternalResourcePack.java renamed to java/client/com/mumfrey/liteloader/resources/InternalResourcePack.java
java/common/com/mumfrey/liteloader/resources/ModResourcePack.java renamed to java/client/com/mumfrey/liteloader/resources/ModResourcePack.java
java/common/com/mumfrey/liteloader/resources/ModResourcePackDir.java renamed to java/client/com/mumfrey/liteloader/resources/ModResourcePackDir.java
java/client/com/mumfrey/liteloader/util/InputManager.java
0 โ 100644
1 | +package com.mumfrey.liteloader.util; | ||
2 | + | ||
3 | +import java.io.File; | ||
4 | +import java.io.FileReader; | ||
5 | +import java.io.FileWriter; | ||
6 | +import java.io.IOException; | ||
7 | +import java.util.ArrayList; | ||
8 | +import java.util.HashMap; | ||
9 | +import java.util.HashSet; | ||
10 | +import java.util.List; | ||
11 | +import java.util.Map; | ||
12 | +import java.util.Properties; | ||
13 | +import java.util.Set; | ||
14 | + | ||
15 | +import net.java.games.input.Component; | ||
16 | +import net.java.games.input.Controller; | ||
17 | +import net.java.games.input.Event; | ||
18 | +import net.java.games.input.EventQueue; | ||
19 | +import net.minecraft.client.settings.KeyBinding; | ||
20 | +import net.minecraft.network.INetHandler; | ||
21 | +import net.minecraft.network.play.server.S01PacketJoinGame; | ||
22 | +import net.minecraft.profiler.Profiler; | ||
23 | +import net.minecraft.world.World; | ||
24 | + | ||
25 | +import com.mumfrey.liteloader.common.GameEngine; | ||
26 | +import com.mumfrey.liteloader.core.LiteLoader; | ||
27 | +import com.mumfrey.liteloader.core.LiteLoaderMods; | ||
28 | +import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
29 | +import com.mumfrey.liteloader.launch.LoaderProperties; | ||
30 | +import com.mumfrey.liteloader.util.Input; | ||
31 | +import com.mumfrey.liteloader.util.InputEvent; | ||
32 | +import com.mumfrey.liteloader.util.InputHandler; | ||
33 | +import com.mumfrey.liteloader.util.jinput.ComponentRegistry; | ||
34 | + | ||
35 | +/** | ||
36 | + * Mod input class, aggregates functionality from LiteLoader's mod key registration functions and JInputLib | ||
37 | + * | ||
38 | + * @author Adam Mummery-Smith | ||
39 | + */ | ||
40 | +public final class InputManager implements Input | ||
41 | +{ | ||
42 | + private GameEngine<?, ?> engine; | ||
43 | + | ||
44 | + /** | ||
45 | + * | ||
46 | + */ | ||
47 | + private Profiler profiler; | ||
48 | + | ||
49 | + /** | ||
50 | + * File in which we will store mod key mappings | ||
51 | + */ | ||
52 | + private final File keyMapSettingsFile; | ||
53 | + | ||
54 | + /** | ||
55 | + * Properties object which stores mod key mappings | ||
56 | + */ | ||
57 | + private final Properties keyMapSettings = new Properties(); | ||
58 | + | ||
59 | + /** | ||
60 | + * List of all registered mod keys | ||
61 | + */ | ||
62 | + private final List<KeyBinding> modKeyBindings = new ArrayList<KeyBinding>(); | ||
63 | + | ||
64 | + /** | ||
65 | + * Map of mod key bindings to their key codes, stored so that we don't need to cast from | ||
66 | + * string in the properties file every tick | ||
67 | + */ | ||
68 | + private final Map<KeyBinding, Integer> storedModKeyBindings = new HashMap<KeyBinding, Integer>(); | ||
69 | + | ||
70 | + /** | ||
71 | + * JInput component registry | ||
72 | + */ | ||
73 | + private final ComponentRegistry jInputComponentRegistry; | ||
74 | + | ||
75 | + /** | ||
76 | + * List of handlers for JInput components | ||
77 | + */ | ||
78 | + private final Map<Component, InputEvent> componentEvents = new HashMap<Component, InputEvent>(); | ||
79 | + | ||
80 | + /** | ||
81 | + * JInput Controllers to poll | ||
82 | + */ | ||
83 | + private Controller[] pollControllers = new Controller[0]; | ||
84 | + | ||
85 | + /** | ||
86 | + * | ||
87 | + */ | ||
88 | + public InputManager(LoaderEnvironment environment, LoaderProperties properties) | ||
89 | + { | ||
90 | + if (LiteLoader.getInstance() != null && LiteLoader.getInput() != null) | ||
91 | + { | ||
92 | + throw new IllegalStateException("Only one instance of Input is allowed, use LiteLoader.getInput() to get the active instance"); | ||
93 | + } | ||
94 | + | ||
95 | + this.keyMapSettingsFile = new File(environment.getCommonConfigFolder(), "liteloader.keys.properties"); | ||
96 | + this.jInputComponentRegistry = new ComponentRegistry(); | ||
97 | + | ||
98 | + if (!properties.getAndStoreBooleanProperty(LoaderProperties.OPTION_JINPUT_DISABLE, false)) | ||
99 | + { | ||
100 | + this.jInputComponentRegistry.enumerate(); | ||
101 | + } | ||
102 | + } | ||
103 | + | ||
104 | + @Override | ||
105 | + public void onInit() | ||
106 | + { | ||
107 | + if (this.keyMapSettingsFile.exists()) | ||
108 | + { | ||
109 | + try | ||
110 | + { | ||
111 | + this.keyMapSettings.load(new FileReader(this.keyMapSettingsFile)); | ||
112 | + } | ||
113 | + catch (Exception ex) {} | ||
114 | + } | ||
115 | + } | ||
116 | + | ||
117 | + @Override | ||
118 | + public void onPostInit(GameEngine<?, ?> engine) | ||
119 | + { | ||
120 | + this.engine = engine; | ||
121 | + this.profiler = engine.getProfiler(); | ||
122 | + } | ||
123 | + | ||
124 | + @Override | ||
125 | + public void onPostInitComplete(LiteLoaderMods mods) | ||
126 | + { | ||
127 | + } | ||
128 | + | ||
129 | + @Override | ||
130 | + public void onStartupComplete() | ||
131 | + { | ||
132 | + } | ||
133 | + | ||
134 | + @Override | ||
135 | + public void onJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket) | ||
136 | + { | ||
137 | + } | ||
138 | + | ||
139 | + @Override | ||
140 | + public void onWorldChanged(World world) | ||
141 | + { | ||
142 | + } | ||
143 | + | ||
144 | + @Override | ||
145 | + public void onPostRender(int mouseX, int mouseY, float partialTicks) | ||
146 | + { | ||
147 | + } | ||
148 | + | ||
149 | + /** | ||
150 | + * Register a key for a mod | ||
151 | + * | ||
152 | + * @param binding | ||
153 | + */ | ||
154 | + @Override | ||
155 | + public void registerKeyBinding(KeyBinding binding) | ||
156 | + { | ||
157 | + List<KeyBinding> keyBindings = this.engine.getKeyBindings(); | ||
158 | + | ||
159 | + if (!keyBindings.contains(binding)) | ||
160 | + { | ||
161 | + if (this.keyMapSettings.containsKey(binding.getKeyDescription())) | ||
162 | + { | ||
163 | + try | ||
164 | + { | ||
165 | + binding.setKeyCode(Integer.parseInt(this.keyMapSettings.getProperty(binding.getKeyDescription(), String.valueOf(binding.getKeyCode())))); | ||
166 | + } | ||
167 | + catch (NumberFormatException ex) {} | ||
168 | + } | ||
169 | + | ||
170 | + keyBindings.add(binding); | ||
171 | + | ||
172 | + this.engine.setKeyBindings(keyBindings); | ||
173 | + this.modKeyBindings.add(binding); | ||
174 | + | ||
175 | + this.updateBinding(binding); | ||
176 | + this.storeBindings(); | ||
177 | + | ||
178 | + KeyBinding.resetKeyBindingArrayAndHash(); | ||
179 | + } | ||
180 | + } | ||
181 | + | ||
182 | + /** | ||
183 | + * Unregisters a registered keybind with the game settings class, thus removing it from the "controls" screen | ||
184 | + * | ||
185 | + * @param binding | ||
186 | + */ | ||
187 | + @Override | ||
188 | + public void unRegisterKeyBinding(KeyBinding binding) | ||
189 | + { | ||
190 | + List<KeyBinding> keyBindings = this.engine.getKeyBindings(); | ||
191 | + | ||
192 | + if (keyBindings.contains(binding)) | ||
193 | + { | ||
194 | + keyBindings.remove(binding); | ||
195 | + this.engine.setKeyBindings(keyBindings); | ||
196 | + | ||
197 | + this.modKeyBindings.remove(binding); | ||
198 | + | ||
199 | + KeyBinding.resetKeyBindingArrayAndHash(); | ||
200 | + } | ||
201 | + } | ||
202 | + | ||
203 | + /** | ||
204 | + * Checks for changed mod keybindings and stores any that have changed | ||
205 | + */ | ||
206 | + @Override | ||
207 | + public void onTick(boolean clock, float partialTicks, boolean inGame) | ||
208 | + { | ||
209 | + this.profiler.startSection("keybindings"); | ||
210 | + if (clock) | ||
211 | + { | ||
212 | + boolean updated = false; | ||
213 | + | ||
214 | + for (KeyBinding binding : this.modKeyBindings) | ||
215 | + { | ||
216 | + if (binding.getKeyCode() != this.storedModKeyBindings.get(binding)) | ||
217 | + { | ||
218 | + this.updateBinding(binding); | ||
219 | + updated = true; | ||
220 | + } | ||
221 | + } | ||
222 | + | ||
223 | + if (updated) this.storeBindings(); | ||
224 | + } | ||
225 | + | ||
226 | + this.pollControllers(); | ||
227 | + this.profiler.endSection(); | ||
228 | + } | ||
229 | + | ||
230 | + /** | ||
231 | + * @param binding | ||
232 | + */ | ||
233 | + private void updateBinding(KeyBinding binding) | ||
234 | + { | ||
235 | + this.keyMapSettings.setProperty(binding.getKeyDescription(), String.valueOf(binding.getKeyCode())); | ||
236 | + this.storedModKeyBindings.put(binding, Integer.valueOf(binding.getKeyCode())); | ||
237 | + } | ||
238 | + | ||
239 | + @Override | ||
240 | + public void onShutDown() | ||
241 | + { | ||
242 | + this.storeBindings(); | ||
243 | + } | ||
244 | + | ||
245 | + /** | ||
246 | + * Writes mod bindings to disk | ||
247 | + */ | ||
248 | + @Override | ||
249 | + public void storeBindings() | ||
250 | + { | ||
251 | + try | ||
252 | + { | ||
253 | + this.keyMapSettings.store(new FileWriter(this.keyMapSettingsFile), "Mod key mappings for LiteLoader mods, stored here to avoid losing settings stored in options.txt"); | ||
254 | + } | ||
255 | + catch (IOException ex) {} | ||
256 | + } | ||
257 | + | ||
258 | + /** | ||
259 | + * Gets the underlying JInput component registry | ||
260 | + */ | ||
261 | + @Override | ||
262 | + public ComponentRegistry getComponentRegistry() | ||
263 | + { | ||
264 | + return this.jInputComponentRegistry; | ||
265 | + } | ||
266 | + | ||
267 | + /** | ||
268 | + * Returns a handle to the event described by descriptor (or null if no component is found matching the | ||
269 | + * descriptor. Retrieving an event via this method adds the controller (if found) to the polling list and | ||
270 | + * causes it to raise events against the specified handler. | ||
271 | + * | ||
272 | + * This method returns an {@link InputEvent} which is passed as an argument to the relevant callback on | ||
273 | + * the supplied handler in order to identify the event. For example: | ||
274 | + * | ||
275 | + * this.joystickButton = input.getEvent(descriptor, this); | ||
276 | + * | ||
277 | + * then in onAxisEvent | ||
278 | + * | ||
279 | + * if (source == this.joystickButton) // do something with button | ||
280 | + * | ||
281 | + * @param descriptor | ||
282 | + * @param handler | ||
283 | + */ | ||
284 | + @Override | ||
285 | + public InputEvent getEvent(String descriptor, InputHandler handler) | ||
286 | + { | ||
287 | + if (handler == null) return null; | ||
288 | + Component component = this.jInputComponentRegistry.getComponent(descriptor); | ||
289 | + Controller controller = this.jInputComponentRegistry.getController(descriptor); | ||
290 | + return this.addEventHandler(controller, component, handler); | ||
291 | + } | ||
292 | + | ||
293 | + /** | ||
294 | + * Get events for all components which match the supplied descriptor | ||
295 | + * | ||
296 | + * @param descriptor | ||
297 | + * @param handler | ||
298 | + */ | ||
299 | + @Override | ||
300 | + public InputEvent[] getEvents(String descriptor, InputHandler handler) | ||
301 | + { | ||
302 | + List<InputEvent> events = new ArrayList<InputEvent>(); | ||
303 | + Controller controller = this.jInputComponentRegistry.getController(descriptor); | ||
304 | + if (controller != null) | ||
305 | + { | ||
306 | + for (Component component : controller.getComponents()) | ||
307 | + { | ||
308 | + events.add(this.addEventHandler(controller, component, handler)); | ||
309 | + } | ||
310 | + } | ||
311 | + | ||
312 | + return events.toArray(new InputEvent[0]); | ||
313 | + } | ||
314 | + | ||
315 | + /** | ||
316 | + * @param controller | ||
317 | + * @param component | ||
318 | + * @param handler | ||
319 | + */ | ||
320 | + private InputEvent addEventHandler(Controller controller, Component component, InputHandler handler) | ||
321 | + { | ||
322 | + if (controller != null && component != null && handler != null) | ||
323 | + { | ||
324 | + this.addController(controller); | ||
325 | + | ||
326 | + InputEvent event = new InputEvent(controller, component, handler); | ||
327 | + this.componentEvents.put(component, event.link(this.componentEvents.get(component))); | ||
328 | + | ||
329 | + return event; | ||
330 | + } | ||
331 | + | ||
332 | + return null; | ||
333 | + } | ||
334 | + | ||
335 | + /** | ||
336 | + * @param controller | ||
337 | + */ | ||
338 | + private void addController(Controller controller) | ||
339 | + { | ||
340 | + Set<Controller> controllers = this.getActiveControllers(); | ||
341 | + controllers.add(controller); | ||
342 | + this.setActiveControllers(controllers); | ||
343 | + } | ||
344 | + | ||
345 | + /** | ||
346 | + * | ||
347 | + */ | ||
348 | + private Set<Controller> getActiveControllers() | ||
349 | + { | ||
350 | + Set<Controller> allControllers = new HashSet<Controller>(); | ||
351 | + for (Controller controller : this.pollControllers) | ||
352 | + allControllers.add(controller); | ||
353 | + return allControllers; | ||
354 | + } | ||
355 | + | ||
356 | + /** | ||
357 | + * @param controllers | ||
358 | + */ | ||
359 | + private void setActiveControllers(Set<Controller> controllers) | ||
360 | + { | ||
361 | + this.pollControllers = controllers.toArray(new Controller[controllers.size()]); | ||
362 | + } | ||
363 | + | ||
364 | + /** | ||
365 | + * | ||
366 | + */ | ||
367 | + private void pollControllers() | ||
368 | + { | ||
369 | + for (Controller controller : this.pollControllers) | ||
370 | + { | ||
371 | + controller.poll(); | ||
372 | + EventQueue controllerQueue = controller.getEventQueue(); | ||
373 | + | ||
374 | + for (Event event = new Event(); controllerQueue.getNextEvent(event); ) | ||
375 | + { | ||
376 | + Component cmp = event.getComponent(); | ||
377 | + | ||
378 | + InputEvent inputEvent = this.componentEvents.get(cmp); | ||
379 | + if (inputEvent != null) | ||
380 | + { | ||
381 | + inputEvent.onEvent(event); | ||
382 | + } | ||
383 | + } | ||
384 | + } | ||
385 | + } | ||
386 | +} |
java/common/com/mumfrey/liteloader/api/EnumerationObserver.java
@@ -47,7 +47,7 @@ public interface EnumerationObserver extends Observer | @@ -47,7 +47,7 @@ public interface EnumerationObserver extends Observer | ||
47 | /** | 47 | /** |
48 | * Called when a mod container is added to the pending mods list. This does not mean that the specific mod will actually be instanced since | 48 | * Called when a mod container is added to the pending mods list. This does not mean that the specific mod will actually be instanced since |
49 | * the mod can still be disabled via the exclusion list (this is to allow entire containers to be disabled or just individual mods) and so | 49 | * the mod can still be disabled via the exclusion list (this is to allow entire containers to be disabled or just individual mods) and so |
50 | - * if you wish to observe actual mod instantiation you should still provide a {@link ModLoadObserver}. However this event expresses a | 50 | + * if you wish to observe actual mod instantiation you should still provide a {@link ResourceObserver}. However this event expresses a |
51 | * declaration by the enumerator of an intention to load the specified mod. | 51 | * declaration by the enumerator of an intention to load the specified mod. |
52 | * | 52 | * |
53 | * @param enumerator | 53 | * @param enumerator |
java/common/com/mumfrey/liteloader/api/ModLoadObserver.java
@@ -3,6 +3,7 @@ package com.mumfrey.liteloader.api; | @@ -3,6 +3,7 @@ package com.mumfrey.liteloader.api; | ||
3 | import java.io.File; | 3 | import java.io.File; |
4 | 4 | ||
5 | import com.mumfrey.liteloader.LiteMod; | 5 | import com.mumfrey.liteloader.LiteMod; |
6 | +import com.mumfrey.liteloader.core.ModInfo; | ||
6 | import com.mumfrey.liteloader.interfaces.LoadableMod; | 7 | import com.mumfrey.liteloader.interfaces.LoadableMod; |
7 | 8 | ||
8 | /** | 9 | /** |
@@ -22,6 +23,13 @@ public interface ModLoadObserver extends Observer | @@ -22,6 +23,13 @@ public interface ModLoadObserver extends Observer | ||
22 | public abstract void onModLoaded(LiteMod mod); | 23 | public abstract void onModLoaded(LiteMod mod); |
23 | 24 | ||
24 | /** | 25 | /** |
26 | + * Called after a mod is instanced and has been successfully added to the active mods list | ||
27 | + * | ||
28 | + * @param handle Mod handle | ||
29 | + */ | ||
30 | + public abstract void onPostModLoaded(ModInfo<LoadableMod<?>> handle); | ||
31 | + | ||
32 | + /** | ||
25 | * Called if mod loading fails | 33 | * Called if mod loading fails |
26 | * | 34 | * |
27 | * @param container | 35 | * @param container |
java/common/com/mumfrey/liteloader/api/TranslationProvider.java
0 โ 100644
1 | +package com.mumfrey.liteloader.api; | ||
2 | + | ||
3 | +/** | ||
4 | + * Interface for providers which can handle translation requests | ||
5 | + * | ||
6 | + * @author Adam Mummery-Smith | ||
7 | + */ | ||
8 | +public interface TranslationProvider extends CustomisationProvider | ||
9 | +{ | ||
10 | + /** | ||
11 | + * Translate the supplied key or return NULL if the provider has no translation for the specified key | ||
12 | + */ | ||
13 | + public abstract String translate(String key, Object... args); | ||
14 | +} |
java/common/com/mumfrey/liteloader/common/GameEngine.java
@@ -2,8 +2,6 @@ package com.mumfrey.liteloader.common; | @@ -2,8 +2,6 @@ package com.mumfrey.liteloader.common; | ||
2 | 2 | ||
3 | import java.util.List; | 3 | import java.util.List; |
4 | 4 | ||
5 | -import net.minecraft.client.resources.IResourceManager; | ||
6 | -import net.minecraft.client.resources.IResourcePack; | ||
7 | import net.minecraft.client.settings.KeyBinding; | 5 | import net.minecraft.client.settings.KeyBinding; |
8 | import net.minecraft.profiler.Profiler; | 6 | import net.minecraft.profiler.Profiler; |
9 | import net.minecraft.server.MinecraftServer; | 7 | import net.minecraft.server.MinecraftServer; |
@@ -50,33 +48,16 @@ public interface GameEngine<TClient, TServer extends MinecraftServer> | @@ -50,33 +48,16 @@ public interface GameEngine<TClient, TServer extends MinecraftServer> | ||
50 | * Get the underlying server instance | 48 | * Get the underlying server instance |
51 | */ | 49 | */ |
52 | public abstract TServer getServer(); | 50 | public abstract TServer getServer(); |
53 | - | ||
54 | - /** | ||
55 | - * Get the profiler instance | ||
56 | - */ | ||
57 | - public abstract Profiler getProfiler(); | ||
58 | - | ||
59 | - /** | ||
60 | - * Get the resource manager for the current environment, returns the SimpleReloadableResourceManager on client and ModResourceManager on the server | ||
61 | - */ | ||
62 | - public abstract IResourceManager getResourceManager(); | ||
63 | - | ||
64 | - /** | ||
65 | - * @param resourcePack | ||
66 | - */ | ||
67 | - public abstract boolean registerResourcePack(IResourcePack resourcePack); | ||
68 | - | 51 | + |
69 | /** | 52 | /** |
70 | - * @param resourcePack | 53 | + * @return |
71 | */ | 54 | */ |
72 | - public abstract boolean unRegisterResourcePack(IResourcePack resourcePack); | 55 | + public abstract Resources<?, ?> getResources(); |
73 | 56 | ||
74 | /** | 57 | /** |
75 | - * Refresh resource pack list | ||
76 | - * | ||
77 | - * @param force | 58 | + * Get the profiler instance |
78 | */ | 59 | */ |
79 | - public abstract void refreshResources(boolean force); | 60 | + public abstract Profiler getProfiler(); |
80 | 61 | ||
81 | /** | 62 | /** |
82 | * Get the keybinding list, only supported on client will throw an exception on the server | 63 | * Get the keybinding list, only supported on client will throw an exception on the server |
java/common/com/mumfrey/liteloader/common/Resources.java
0 โ 100644
1 | +package com.mumfrey.liteloader.common; | ||
2 | + | ||
3 | +public interface Resources<TResourceManager, TResourcePack> | ||
4 | +{ | ||
5 | + /** | ||
6 | + * Refresh resource pack list | ||
7 | + * | ||
8 | + * @param force | ||
9 | + */ | ||
10 | + public abstract void refreshResources(boolean force); | ||
11 | + | ||
12 | + /** | ||
13 | + * Get the resource manager for the current environment, returns the SimpleReloadableResourceManager on client and ModResourceManager on the server | ||
14 | + */ | ||
15 | + public abstract TResourceManager getResourceManager(); | ||
16 | + | ||
17 | + /** | ||
18 | + * @param resourcePack | ||
19 | + */ | ||
20 | + public abstract boolean registerResourcePack(TResourcePack resourcePack); | ||
21 | + | ||
22 | + /** | ||
23 | + * @param resourcePack | ||
24 | + */ | ||
25 | + public abstract boolean unRegisterResourcePack(TResourcePack resourcePack); | ||
26 | +} |
java/common/com/mumfrey/liteloader/common/transformers/LiteLoaderEventTransformer.java
0 โ 100644
1 | +package com.mumfrey.liteloader.common.transformers; | ||
2 | + | ||
3 | +import static com.mumfrey.liteloader.core.runtime.Methods.*; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.core.runtime.Obf; | ||
6 | +import com.mumfrey.liteloader.transformers.event.Event; | ||
7 | +import com.mumfrey.liteloader.transformers.event.EventInjectionTransformer; | ||
8 | +import com.mumfrey.liteloader.transformers.event.InjectionPoint; | ||
9 | +import com.mumfrey.liteloader.transformers.event.MethodInfo; | ||
10 | +import com.mumfrey.liteloader.transformers.event.inject.BeforeNew; | ||
11 | +import com.mumfrey.liteloader.transformers.event.inject.BeforeReturn; | ||
12 | + | ||
13 | +/** | ||
14 | + * Injector for LiteLoader's common events | ||
15 | + * | ||
16 | + * @author Adam Mummery-Smith | ||
17 | + */ | ||
18 | +public abstract class LiteLoaderEventTransformer extends EventInjectionTransformer | ||
19 | +{ | ||
20 | + protected abstract Obf getProxy(); | ||
21 | + | ||
22 | + @Override | ||
23 | + protected void addEvents() | ||
24 | + { | ||
25 | + // Event declaraions | ||
26 | + Event onInitializePlayerConnection = Event.getOrCreate("onInitializePlayerConnection", false); | ||
27 | + Event onPlayerLogin = Event.getOrCreate("onPlayerLogin", false); | ||
28 | + Event onPlayerLogout = Event.getOrCreate("onPlayerLogout", false); | ||
29 | + Event onSpawnPlayer = Event.getOrCreate("onSpawnPlayer", false); | ||
30 | + Event onRespawnPlayer = Event.getOrCreate("onRespawnPlayer", false); | ||
31 | + Event onSessionProfileBad = Event.getOrCreate("onSessionProfileBad", true); | ||
32 | + | ||
33 | + // Injection Points | ||
34 | + InjectionPoint methodReturn = new BeforeReturn(); | ||
35 | + InjectionPoint beforeNewGameProfile = new BeforeNew(1, Obf.GameProfile); | ||
36 | + | ||
37 | + // Hooks | ||
38 | + this.add(onInitializePlayerConnection, initPlayerConnection, (methodReturn), "onInitializePlayerConnection"); | ||
39 | + this.add(onPlayerLogin, playerLoggedIn, (methodReturn), "onPlayerLogin"); | ||
40 | + this.add(onPlayerLogout, playerLoggedOut, (methodReturn), "onPlayerLogout"); | ||
41 | + this.add(onSpawnPlayer, spawnPlayer, (methodReturn), "onSpawnPlayer"); | ||
42 | + this.add(onRespawnPlayer, respawnPlayer, (methodReturn), "onRespawnPlayer"); | ||
43 | + | ||
44 | + // Compatibility handlers | ||
45 | + this.add(onSessionProfileBad, getProfile, (beforeNewGameProfile), "generateOfflineUUID"); | ||
46 | + } | ||
47 | + | ||
48 | + protected final Event add(Event event, MethodInfo targetMethod, InjectionPoint injectionPoint, String callback) | ||
49 | + { | ||
50 | + return this.add(event, targetMethod, injectionPoint, callback, this.getProxy()); | ||
51 | + } | ||
52 | + | ||
53 | + protected Event add(Event event, MethodInfo targetMethod, InjectionPoint injectionPoint, String callback, Obf proxy) | ||
54 | + { | ||
55 | + return this.addEvent(event, targetMethod, injectionPoint).addListener(new MethodInfo(proxy, callback)); | ||
56 | + } | ||
57 | +} |
java/common/com/mumfrey/liteloader/core/LiteLoader.java
@@ -19,11 +19,13 @@ import net.minecraft.world.World; | @@ -19,11 +19,13 @@ import net.minecraft.world.World; | ||
19 | import com.mumfrey.liteloader.LiteMod; | 19 | import com.mumfrey.liteloader.LiteMod; |
20 | import com.mumfrey.liteloader.api.CoreProvider; | 20 | import com.mumfrey.liteloader.api.CoreProvider; |
21 | import com.mumfrey.liteloader.api.CustomisationProvider; | 21 | import com.mumfrey.liteloader.api.CustomisationProvider; |
22 | +import com.mumfrey.liteloader.api.Listener; | ||
22 | import com.mumfrey.liteloader.api.LiteAPI; | 23 | import com.mumfrey.liteloader.api.LiteAPI; |
23 | import com.mumfrey.liteloader.api.ModLoadObserver; | 24 | import com.mumfrey.liteloader.api.ModLoadObserver; |
24 | import com.mumfrey.liteloader.api.PostRenderObserver; | 25 | import com.mumfrey.liteloader.api.PostRenderObserver; |
25 | import com.mumfrey.liteloader.api.ShutdownObserver; | 26 | import com.mumfrey.liteloader.api.ShutdownObserver; |
26 | import com.mumfrey.liteloader.api.TickObserver; | 27 | import com.mumfrey.liteloader.api.TickObserver; |
28 | +import com.mumfrey.liteloader.api.TranslationProvider; | ||
27 | import com.mumfrey.liteloader.api.WorldObserver; | 29 | import com.mumfrey.liteloader.api.WorldObserver; |
28 | import com.mumfrey.liteloader.api.manager.APIAdapter; | 30 | import com.mumfrey.liteloader.api.manager.APIAdapter; |
29 | import com.mumfrey.liteloader.api.manager.APIProvider; | 31 | import com.mumfrey.liteloader.api.manager.APIProvider; |
@@ -178,6 +180,11 @@ public final class LiteLoader | @@ -178,6 +180,11 @@ public final class LiteLoader | ||
178 | private Input input; | 180 | private Input input; |
179 | 181 | ||
180 | /** | 182 | /** |
183 | + * | ||
184 | + */ | ||
185 | + private final List<TranslationProvider> translators = new ArrayList<TranslationProvider>(); | ||
186 | + | ||
187 | + /** | ||
181 | * ctor | 188 | * ctor |
182 | * | 189 | * |
183 | * @param environment | 190 | * @param environment |
@@ -190,7 +197,6 @@ public final class LiteLoader | @@ -190,7 +197,6 @@ public final class LiteLoader | ||
190 | this.enumerator = environment.getEnumerator(); | 197 | this.enumerator = environment.getEnumerator(); |
191 | 198 | ||
192 | this.configManager = new ConfigManager(); | 199 | this.configManager = new ConfigManager(); |
193 | - this.input = new Input(environment, properties); | ||
194 | 200 | ||
195 | this.mods = new LiteLoaderMods(this, environment, properties, this.configManager); | 201 | this.mods = new LiteLoaderMods(this, environment, properties, this.configManager); |
196 | 202 | ||
@@ -205,11 +211,36 @@ public final class LiteLoader | @@ -205,11 +211,36 @@ public final class LiteLoader | ||
205 | 211 | ||
206 | this.objectFactory = this.api.getObjectFactory(); | 212 | this.objectFactory = this.api.getObjectFactory(); |
207 | 213 | ||
214 | + this.input = this.objectFactory.getInput(); | ||
215 | + | ||
208 | this.clientPluginChannels = this.objectFactory.getClientPluginChannels(); | 216 | this.clientPluginChannels = this.objectFactory.getClientPluginChannels(); |
209 | this.serverPluginChannels = this.objectFactory.getServerPluginChannels(); | 217 | this.serverPluginChannels = this.objectFactory.getServerPluginChannels(); |
210 | 218 | ||
211 | this.permissionsManagerClient = this.objectFactory.getClientPermissionManager(); | 219 | this.permissionsManagerClient = this.objectFactory.getClientPermissionManager(); |
212 | this.permissionsManagerServer = this.objectFactory.getServerPermissionManager(); | 220 | this.permissionsManagerServer = this.objectFactory.getServerPermissionManager(); |
221 | + | ||
222 | + this.initTranslators(); | ||
223 | + } | ||
224 | + | ||
225 | + /** | ||
226 | + * | ||
227 | + */ | ||
228 | + protected void initTranslators() | ||
229 | + { | ||
230 | + for (LiteAPI api : this.apiProvider.getAPIs()) | ||
231 | + { | ||
232 | + List<CustomisationProvider> customisationProviders = api.getCustomisationProviders(); | ||
233 | + if (customisationProviders != null) | ||
234 | + { | ||
235 | + for (CustomisationProvider provider : customisationProviders) | ||
236 | + { | ||
237 | + if (provider instanceof TranslationProvider) | ||
238 | + { | ||
239 | + this.translators.add((TranslationProvider)provider); | ||
240 | + } | ||
241 | + } | ||
242 | + } | ||
243 | + } | ||
213 | } | 244 | } |
214 | 245 | ||
215 | /** | 246 | /** |
@@ -772,6 +803,14 @@ public final class LiteLoader | @@ -772,6 +803,14 @@ public final class LiteLoader | ||
772 | this.coreProviders.all().onPostInit(this.engine); | 803 | this.coreProviders.all().onPostInit(this.engine); |
773 | 804 | ||
774 | this.interfaceManager.registerInterfaces(); | 805 | this.interfaceManager.registerInterfaces(); |
806 | + | ||
807 | + for (CoreProvider provider : this.coreProviders) | ||
808 | + { | ||
809 | + if (provider instanceof Listener) | ||
810 | + { | ||
811 | + this.interfaceManager.registerListener((Listener)provider); | ||
812 | + } | ||
813 | + } | ||
775 | } | 814 | } |
776 | 815 | ||
777 | private void loadAndInitMods() | 816 | private void loadAndInitMods() |
@@ -906,6 +945,20 @@ public final class LiteLoader | @@ -906,6 +945,20 @@ public final class LiteLoader | ||
906 | 945 | ||
907 | this.configManager.syncConfig(); | 946 | this.configManager.syncConfig(); |
908 | } | 947 | } |
948 | + | ||
949 | + public static String translate(String key, Object... args) | ||
950 | + { | ||
951 | + for (TranslationProvider translator : LiteLoader.instance.translators) | ||
952 | + { | ||
953 | + String translated = translator.translate(key, args); | ||
954 | + if (translated != null) | ||
955 | + { | ||
956 | + return translated; | ||
957 | + } | ||
958 | + } | ||
959 | + | ||
960 | + return key; | ||
961 | + } | ||
909 | 962 | ||
910 | /** | 963 | /** |
911 | * @param objCrashReport This is an object so that we don't need to transform the obfuscated name in the transformer | 964 | * @param objCrashReport This is an object so that we don't need to transform the obfuscated name in the transformer |
java/common/com/mumfrey/liteloader/core/LiteLoaderEventBroker.java
1 | package com.mumfrey.liteloader.core; | 1 | package com.mumfrey.liteloader.core; |
2 | 2 | ||
3 | -import net.minecraft.client.resources.IResourceManager; | ||
4 | -import net.minecraft.client.resources.IResourceManagerReloadListener; | ||
5 | import net.minecraft.command.ICommandManager; | 3 | import net.minecraft.command.ICommandManager; |
6 | import net.minecraft.command.ServerCommandManager; | 4 | import net.minecraft.command.ServerCommandManager; |
7 | import net.minecraft.entity.player.EntityPlayerMP; | 5 | import net.minecraft.entity.player.EntityPlayerMP; |
@@ -33,7 +31,7 @@ import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | @@ -33,7 +31,7 @@ import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | ||
33 | * @param <TClient> Type of the client runtime, "Minecraft" on client and null on the server | 31 | * @param <TClient> Type of the client runtime, "Minecraft" on client and null on the server |
34 | * @param <TServer> Type of the server runtime, "IntegratedServer" on the client, "MinecraftServer" on the server | 32 | * @param <TServer> Type of the server runtime, "IntegratedServer" on the client, "MinecraftServer" on the server |
35 | */ | 33 | */ |
36 | -public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftServer> implements InterfaceProvider, IResourceManagerReloadListener | 34 | +public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftServer> implements InterfaceProvider |
37 | { | 35 | { |
38 | /** | 36 | /** |
39 | * @author Adam Mummery-Smith | 37 | * @author Adam Mummery-Smith |
@@ -182,12 +180,6 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe | @@ -182,12 +180,6 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe | ||
182 | { | 180 | { |
183 | this.serverPlayerListeners.add(serverPlayerListener); | 181 | this.serverPlayerListeners.add(serverPlayerListener); |
184 | } | 182 | } |
185 | - | ||
186 | - @Override | ||
187 | - public void onResourceManagerReload(IResourceManager resourceManager) | ||
188 | - { | ||
189 | - LoadingProgress.setMessage("Reloading Resources..."); | ||
190 | - } | ||
191 | 183 | ||
192 | /** | 184 | /** |
193 | * @param instance | 185 | * @param instance |
java/common/com/mumfrey/liteloader/core/LiteLoaderMods.java
@@ -9,8 +9,6 @@ import java.util.List; | @@ -9,8 +9,6 @@ import java.util.List; | ||
9 | import java.util.Map; | 9 | import java.util.Map; |
10 | import java.util.Set; | 10 | import java.util.Set; |
11 | 11 | ||
12 | -import net.minecraft.client.resources.IResourcePack; | ||
13 | - | ||
14 | import com.mumfrey.liteloader.LiteMod; | 12 | import com.mumfrey.liteloader.LiteMod; |
15 | import com.mumfrey.liteloader.api.ModLoadObserver; | 13 | import com.mumfrey.liteloader.api.ModLoadObserver; |
16 | import com.mumfrey.liteloader.common.LoadingProgress; | 14 | import com.mumfrey.liteloader.common.LoadingProgress; |
@@ -455,6 +453,8 @@ public class LiteLoaderMods | @@ -455,6 +453,8 @@ public class LiteLoaderMods | ||
455 | this.onModLoadFailed(container, mod.getModClassName(), "an error occurred", th); | 453 | this.onModLoadFailed(container, mod.getModClassName(), "an error occurred", th); |
456 | this.registerModStartupError(mod, th); | 454 | this.registerModStartupError(mod, th); |
457 | } | 455 | } |
456 | + | ||
457 | + this.observers.all().onPostModLoaded(mod); | ||
458 | } | 458 | } |
459 | } | 459 | } |
460 | 460 | ||
@@ -486,22 +486,6 @@ public class LiteLoaderMods | @@ -486,22 +486,6 @@ public class LiteLoaderMods | ||
486 | 486 | ||
487 | String modName = mod.getDisplayName(); | 487 | String modName = mod.getDisplayName(); |
488 | LiteLoaderLogger.info("Successfully added mod %s version %s", modName, newMod.getVersion()); | 488 | LiteLoaderLogger.info("Successfully added mod %s version %s", modName, newMod.getVersion()); |
489 | - | ||
490 | - // Register the mod as a resource pack if the container exists | ||
491 | - if (mod.hasContainer()) | ||
492 | - { | ||
493 | - LoadableMod<?> container = mod.getContainer(); | ||
494 | - LiteLoaderLogger.info("Adding \"%s\" to active resource pack set", container.getLocation()); | ||
495 | - if (modName != null) | ||
496 | - { | ||
497 | - container.initResourcePack(modName); | ||
498 | - | ||
499 | - if (container.hasResourcePack() && LiteLoader.getGameEngine().registerResourcePack((IResourcePack)container.getResourcePack())) | ||
500 | - { | ||
501 | - LiteLoaderLogger.info("Successfully added \"%s\" to active resource pack set", container.getLocation()); | ||
502 | - } | ||
503 | - } | ||
504 | - } | ||
505 | } | 489 | } |
506 | 490 | ||
507 | /** | 491 | /** |
java/common/com/mumfrey/liteloader/core/api/LoadableModClassPath.java
@@ -6,9 +6,6 @@ import java.net.MalformedURLException; | @@ -6,9 +6,6 @@ import java.net.MalformedURLException; | ||
6 | import net.minecraft.launchwrapper.LaunchClassLoader; | 6 | import net.minecraft.launchwrapper.LaunchClassLoader; |
7 | 7 | ||
8 | import com.mumfrey.liteloader.core.LiteLoaderVersion; | 8 | import com.mumfrey.liteloader.core.LiteLoaderVersion; |
9 | -import com.mumfrey.liteloader.resources.ModResourcePack; | ||
10 | -import com.mumfrey.liteloader.resources.ModResourcePackDir; | ||
11 | -import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | ||
12 | 9 | ||
13 | /** | 10 | /** |
14 | * Mod file reference for a file loaded from class path | 11 | * Mod file reference for a file loaded from class path |
@@ -67,24 +64,6 @@ public class LoadableModClassPath extends LoadableModFile | @@ -67,24 +64,6 @@ public class LoadableModClassPath extends LoadableModFile | ||
67 | { | 64 | { |
68 | return this.getModName(); | 65 | return this.getModName(); |
69 | } | 66 | } |
70 | - | ||
71 | - @Override | ||
72 | - public void initResourcePack(String name) | ||
73 | - { | ||
74 | - if (this.resourcePack == null) | ||
75 | - { | ||
76 | - if (this.isDirectory()) | ||
77 | - { | ||
78 | - LiteLoaderLogger.info("Setting up \"%s/%s\" as mod resource pack with identifier \"%s\"", this.getParentFile().getName(), this.getName(), name); | ||
79 | - this.resourcePack = new ModResourcePackDir(name, this); | ||
80 | - } | ||
81 | - else | ||
82 | - { | ||
83 | - LiteLoaderLogger.info("Setting up \"%s\" as mod resource pack with identifier \"%s\"", this.getName(), name); | ||
84 | - this.resourcePack = new ModResourcePack(name, this); | ||
85 | - } | ||
86 | - } | ||
87 | - } | ||
88 | 67 | ||
89 | @Override | 68 | @Override |
90 | public boolean injectIntoClassPath(LaunchClassLoader classLoader, boolean injectIntoParent) throws MalformedURLException | 69 | public boolean injectIntoClassPath(LaunchClassLoader classLoader, boolean injectIntoParent) throws MalformedURLException |
java/common/com/mumfrey/liteloader/core/api/LoadableModFile.java
@@ -18,18 +18,17 @@ import java.util.zip.ZipEntry; | @@ -18,18 +18,17 @@ import java.util.zip.ZipEntry; | ||
18 | import java.util.zip.ZipFile; | 18 | import java.util.zip.ZipFile; |
19 | 19 | ||
20 | import joptsimple.internal.Strings; | 20 | import joptsimple.internal.Strings; |
21 | -import net.minecraft.client.resources.I18n; | ||
22 | 21 | ||
23 | import com.google.common.base.Charsets; | 22 | import com.google.common.base.Charsets; |
24 | import com.google.common.io.ByteStreams; | 23 | import com.google.common.io.ByteStreams; |
25 | import com.google.gson.Gson; | 24 | import com.google.gson.Gson; |
26 | import com.google.gson.JsonSyntaxException; | 25 | import com.google.gson.JsonSyntaxException; |
27 | import com.mumfrey.liteloader.api.manager.APIProvider; | 26 | import com.mumfrey.liteloader.api.manager.APIProvider; |
27 | +import com.mumfrey.liteloader.core.LiteLoader; | ||
28 | import com.mumfrey.liteloader.interfaces.LoadableFile; | 28 | import com.mumfrey.liteloader.interfaces.LoadableFile; |
29 | import com.mumfrey.liteloader.interfaces.LoadableMod; | 29 | import com.mumfrey.liteloader.interfaces.LoadableMod; |
30 | import com.mumfrey.liteloader.launch.InjectionStrategy; | 30 | import com.mumfrey.liteloader.launch.InjectionStrategy; |
31 | import com.mumfrey.liteloader.launch.LoaderEnvironment; | 31 | import com.mumfrey.liteloader.launch.LoaderEnvironment; |
32 | -import com.mumfrey.liteloader.resources.ModResourcePack; | ||
33 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | 32 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
34 | 33 | ||
35 | /** | 34 | /** |
@@ -89,11 +88,6 @@ public class LoadableModFile extends LoadableFile implements LoadableMod<File> | @@ -89,11 +88,6 @@ public class LoadableModFile extends LoadableFile implements LoadableMod<File> | ||
89 | protected boolean hasRevision = false; | 88 | protected boolean hasRevision = false; |
90 | 89 | ||
91 | /** | 90 | /** |
92 | - * Resource pack we have registered with minecraft | ||
93 | - */ | ||
94 | - protected Object resourcePack = null; | ||
95 | - | ||
96 | - /** | ||
97 | * ALL of the parsed metadata from the file, associated with the mod later on for retrieval via the loader | 91 | * ALL of the parsed metadata from the file, associated with the mod later on for retrieval via the loader |
98 | */ | 92 | */ |
99 | protected Map<String, Object> metaData = new HashMap<String, Object>(); | 93 | protected Map<String, Object> metaData = new HashMap<String, Object>(); |
@@ -241,12 +235,12 @@ public class LoadableModFile extends LoadableFile implements LoadableMod<File> | @@ -241,12 +235,12 @@ public class LoadableModFile extends LoadableFile implements LoadableMod<File> | ||
241 | { | 235 | { |
242 | if (this.missingAPIs.size() > 0) | 236 | if (this.missingAPIs.size() > 0) |
243 | { | 237 | { |
244 | - return I18n.format("gui.description.missingapis", "\n" + compileMissingAPIList()); | 238 | + return LiteLoader.translate("gui.description.missingapis", "\n" + compileMissingAPIList()); |
245 | } | 239 | } |
246 | 240 | ||
247 | if (this.missingDependencies.size() > 0) | 241 | if (this.missingDependencies.size() > 0) |
248 | { | 242 | { |
249 | - return I18n.format("gui.description.missingdeps", "\n" + this.missingDependencies.toString()); | 243 | + return LiteLoader.translate("gui.description.missingdeps", "\n" + this.missingDependencies.toString()); |
250 | } | 244 | } |
251 | 245 | ||
252 | String descriptionKey = "description"; | 246 | String descriptionKey = "description"; |
@@ -374,33 +368,11 @@ public class LoadableModFile extends LoadableFile implements LoadableMod<File> | @@ -374,33 +368,11 @@ public class LoadableModFile extends LoadableFile implements LoadableMod<File> | ||
374 | { | 368 | { |
375 | return this.classTransformerClassNames; | 369 | return this.classTransformerClassNames; |
376 | } | 370 | } |
377 | - | ||
378 | - @Override | ||
379 | - @SuppressWarnings("unchecked") | ||
380 | - public <T> T getResourcePack() | ||
381 | - { | ||
382 | - return (T)this.resourcePack; | ||
383 | - } | ||
384 | - | ||
385 | - /** | ||
386 | - * Initialise the mod resource pack | ||
387 | - * | ||
388 | - * @param name | ||
389 | - */ | ||
390 | - @Override | ||
391 | - public void initResourcePack(String name) | ||
392 | - { | ||
393 | - if (this.resourcePack == null) | ||
394 | - { | ||
395 | - LiteLoaderLogger.info("Setting up \"%s\" as mod resource pack with identifier \"%s\"", this.getName(), name); | ||
396 | - this.resourcePack = new ModResourcePack(name, this); | ||
397 | - } | ||
398 | - } | ||
399 | 371 | ||
400 | @Override | 372 | @Override |
401 | - public boolean hasResourcePack() | 373 | + public boolean hasResources() |
402 | { | 374 | { |
403 | - return (this.resourcePack != null); | 375 | + return true; |
404 | } | 376 | } |
405 | 377 | ||
406 | @Override | 378 | @Override |
java/common/com/mumfrey/liteloader/core/runtime/Methods.java
@@ -13,6 +13,7 @@ import com.mumfrey.liteloader.transformers.event.MethodInfo; | @@ -13,6 +13,7 @@ import com.mumfrey.liteloader.transformers.event.MethodInfo; | ||
13 | */ | 13 | */ |
14 | public abstract class Methods | 14 | public abstract class Methods |
15 | { | 15 | { |
16 | + // Client & General | ||
16 | public static final MethodInfo startGame = new MethodInfo(Obf.Minecraft, Obf.startGame, Void.TYPE); | 17 | public static final MethodInfo startGame = new MethodInfo(Obf.Minecraft, Obf.startGame, Void.TYPE); |
17 | public static final MethodInfo runGameLoop = new MethodInfo(Obf.Minecraft, Obf.runGameLoop, Void.TYPE); | 18 | public static final MethodInfo runGameLoop = new MethodInfo(Obf.Minecraft, Obf.runGameLoop, Void.TYPE); |
18 | public static final MethodInfo runTick = new MethodInfo(Obf.Minecraft, Obf.runTick, Void.TYPE); | 19 | public static final MethodInfo runTick = new MethodInfo(Obf.Minecraft, Obf.runTick, Void.TYPE); |
@@ -42,9 +43,14 @@ public abstract class Methods | @@ -42,9 +43,14 @@ public abstract class Methods | ||
42 | public static final MethodInfo realmsPlay = new MethodInfo(Obf.RealmsMainScreen, "play", Void.TYPE, Long.TYPE); | 43 | public static final MethodInfo realmsPlay = new MethodInfo(Obf.RealmsMainScreen, "play", Void.TYPE, Long.TYPE); |
43 | public static final MethodInfo realmsStopFetcher = new MethodInfo(Obf.RealmsMainScreen, "stopRealmsFetcherAndPinger", Void.TYPE); | 44 | public static final MethodInfo realmsStopFetcher = new MethodInfo(Obf.RealmsMainScreen, "stopRealmsFetcherAndPinger", Void.TYPE); |
44 | 45 | ||
46 | + // Profiler | ||
45 | public static final MethodInfo startSection = new MethodInfo(Obf.Profiler, Obf.startSection, Void.TYPE, String.class); | 47 | public static final MethodInfo startSection = new MethodInfo(Obf.Profiler, Obf.startSection, Void.TYPE, String.class); |
46 | public static final MethodInfo endSection = new MethodInfo(Obf.Profiler, Obf.endSection, Void.TYPE); | 48 | public static final MethodInfo endSection = new MethodInfo(Obf.Profiler, Obf.endSection, Void.TYPE); |
47 | public static final MethodInfo endStartSection = new MethodInfo(Obf.Profiler, Obf.endStartSection, Void.TYPE, String.class); | 49 | public static final MethodInfo endStartSection = new MethodInfo(Obf.Profiler, Obf.endStartSection, Void.TYPE, String.class); |
50 | + | ||
51 | + // Dedicated Server | ||
52 | + public static final MethodInfo startServer = new MethodInfo(Obf.DedicatedServer, Obf.startServer, Boolean.TYPE); | ||
53 | + public static final MethodInfo startServerThread = new MethodInfo(Obf.MinecraftServer, Obf.startServerThread, Void.TYPE); | ||
48 | 54 | ||
49 | private Methods() {} | 55 | private Methods() {} |
50 | 56 |
java/common/com/mumfrey/liteloader/interfaces/LoadableMod.java
@@ -101,17 +101,7 @@ public interface LoadableMod<L> extends Loadable<L>, Injectable | @@ -101,17 +101,7 @@ public interface LoadableMod<L> extends Loadable<L>, Injectable | ||
101 | /** | 101 | /** |
102 | * Returns true if this mod can be added as a resource pack | 102 | * Returns true if this mod can be added as a resource pack |
103 | */ | 103 | */ |
104 | - public abstract boolean hasResourcePack(); | ||
105 | - | ||
106 | - /** | ||
107 | - * Returns the resource pack for this mod, duck typed via generic to avoid ResourcePack being in the method signature | ||
108 | - */ | ||
109 | - public abstract <T> T getResourcePack(); | ||
110 | - | ||
111 | - /** | ||
112 | - * Initialise the resource pack with the specified name | ||
113 | - */ | ||
114 | - public abstract void initResourcePack(String name); | 104 | + public abstract boolean hasResources(); |
115 | 105 | ||
116 | /** | 106 | /** |
117 | * Get all class names in this container | 107 | * Get all class names in this container |
@@ -297,21 +287,10 @@ public interface LoadableMod<L> extends Loadable<L>, Injectable | @@ -297,21 +287,10 @@ public interface LoadableMod<L> extends Loadable<L>, Injectable | ||
297 | } | 287 | } |
298 | 288 | ||
299 | @Override | 289 | @Override |
300 | - public boolean hasResourcePack() | 290 | + public boolean hasResources() |
301 | { | 291 | { |
302 | return false; | 292 | return false; |
303 | } | 293 | } |
304 | - | ||
305 | - @Override | ||
306 | - public <T> T getResourcePack() | ||
307 | - { | ||
308 | - return null; | ||
309 | - } | ||
310 | - | ||
311 | - @Override | ||
312 | - public void initResourcePack(String name) | ||
313 | - { | ||
314 | - } | ||
315 | 294 | ||
316 | @Override | 295 | @Override |
317 | public boolean hasDependencies() | 296 | public boolean hasDependencies() |
java/common/com/mumfrey/liteloader/interfaces/ObjectFactory.java
@@ -9,6 +9,7 @@ import com.mumfrey.liteloader.core.PacketEvents; | @@ -9,6 +9,7 @@ import com.mumfrey.liteloader.core.PacketEvents; | ||
9 | import com.mumfrey.liteloader.core.ServerPluginChannels; | 9 | import com.mumfrey.liteloader.core.ServerPluginChannels; |
10 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; | 10 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; |
11 | import com.mumfrey.liteloader.permissions.PermissionsManagerServer; | 11 | import com.mumfrey.liteloader.permissions.PermissionsManagerServer; |
12 | +import com.mumfrey.liteloader.util.Input; | ||
12 | 13 | ||
13 | /** | 14 | /** |
14 | * Factory for generating loader managament objects based on the environment | 15 | * Factory for generating loader managament objects based on the environment |
@@ -24,6 +25,8 @@ public interface ObjectFactory<TClient, TServer extends MinecraftServer> | @@ -24,6 +25,8 @@ public interface ObjectFactory<TClient, TServer extends MinecraftServer> | ||
24 | 25 | ||
25 | public abstract PacketEvents getPacketEventBroker(); | 26 | public abstract PacketEvents getPacketEventBroker(); |
26 | 27 | ||
28 | + public abstract Input getInput(); | ||
29 | + | ||
27 | public abstract GameEngine<TClient, TServer> getGameEngine(); | 30 | public abstract GameEngine<TClient, TServer> getGameEngine(); |
28 | 31 | ||
29 | public abstract PanelManager<?> getPanelManager(); | 32 | public abstract PanelManager<?> getPanelManager(); |
java/common/com/mumfrey/liteloader/launch/LiteLoaderTweaker.java
@@ -14,6 +14,7 @@ import net.minecraft.launchwrapper.ITweaker; | @@ -14,6 +14,7 @@ import net.minecraft.launchwrapper.ITweaker; | ||
14 | import net.minecraft.launchwrapper.Launch; | 14 | import net.minecraft.launchwrapper.Launch; |
15 | import net.minecraft.launchwrapper.LaunchClassLoader; | 15 | import net.minecraft.launchwrapper.LaunchClassLoader; |
16 | 16 | ||
17 | +import com.mumfrey.liteloader.transformers.event.EventInfo; | ||
17 | import com.mumfrey.liteloader.util.SortableValue; | 18 | import com.mumfrey.liteloader.util.SortableValue; |
18 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | 19 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
19 | 20 | ||
@@ -617,4 +618,10 @@ public class LiteLoaderTweaker implements ITweaker | @@ -617,4 +618,10 @@ public class LiteLoaderTweaker implements ITweaker | ||
617 | { | 618 | { |
618 | LiteLoaderTweaker.instance.onPostInit(); | 619 | LiteLoaderTweaker.instance.onPostInit(); |
619 | } | 620 | } |
621 | + | ||
622 | + public static void dedicatedServerInit(EventInfo<?> e) | ||
623 | + { | ||
624 | + LiteLoaderTweaker.instance.onInit(); | ||
625 | + LiteLoaderTweaker.instance.onPostInit(); | ||
626 | + } | ||
620 | } | 627 | } |
621 | \ No newline at end of file | 628 | \ No newline at end of file |
java/common/com/mumfrey/liteloader/util/Input.java
1 | package com.mumfrey.liteloader.util; | 1 | package com.mumfrey.liteloader.util; |
2 | 2 | ||
3 | -import java.io.File; | ||
4 | -import java.io.FileReader; | ||
5 | -import java.io.FileWriter; | ||
6 | -import java.io.IOException; | ||
7 | -import java.util.ArrayList; | ||
8 | -import java.util.HashMap; | ||
9 | -import java.util.HashSet; | ||
10 | -import java.util.List; | ||
11 | -import java.util.Map; | ||
12 | -import java.util.Properties; | ||
13 | -import java.util.Set; | ||
14 | - | ||
15 | -import net.java.games.input.Component; | ||
16 | -import net.java.games.input.Controller; | ||
17 | -import net.java.games.input.Event; | ||
18 | -import net.java.games.input.EventQueue; | ||
19 | import net.minecraft.client.settings.KeyBinding; | 3 | import net.minecraft.client.settings.KeyBinding; |
20 | -import net.minecraft.network.INetHandler; | ||
21 | -import net.minecraft.network.play.server.S01PacketJoinGame; | ||
22 | -import net.minecraft.profiler.Profiler; | ||
23 | -import net.minecraft.world.World; | ||
24 | 4 | ||
25 | import com.mumfrey.liteloader.api.CoreProvider; | 5 | import com.mumfrey.liteloader.api.CoreProvider; |
26 | -import com.mumfrey.liteloader.common.GameEngine; | ||
27 | -import com.mumfrey.liteloader.core.LiteLoader; | ||
28 | -import com.mumfrey.liteloader.core.LiteLoaderMods; | ||
29 | -import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
30 | -import com.mumfrey.liteloader.launch.LoaderProperties; | ||
31 | import com.mumfrey.liteloader.util.jinput.ComponentRegistry; | 6 | import com.mumfrey.liteloader.util.jinput.ComponentRegistry; |
32 | 7 | ||
33 | -/** | ||
34 | - * Mod input class, aggregates functionality from LiteLoader's mod key registration functions and JInputLib | ||
35 | - * | ||
36 | - * @author Adam Mummery-Smith | ||
37 | - */ | ||
38 | -public final class Input implements CoreProvider | 8 | +public interface Input extends CoreProvider |
39 | { | 9 | { |
40 | - private GameEngine<?, ?> engine; | ||
41 | - | ||
42 | - /** | ||
43 | - * | ||
44 | - */ | ||
45 | - private Profiler profiler; | ||
46 | - | ||
47 | - /** | ||
48 | - * File in which we will store mod key mappings | ||
49 | - */ | ||
50 | - private final File keyMapSettingsFile; | ||
51 | - | ||
52 | - /** | ||
53 | - * Properties object which stores mod key mappings | ||
54 | - */ | ||
55 | - private final Properties keyMapSettings = new Properties(); | ||
56 | - | ||
57 | - /** | ||
58 | - * List of all registered mod keys | ||
59 | - */ | ||
60 | - private final List<KeyBinding> modKeyBindings = new ArrayList<KeyBinding>(); | ||
61 | - | ||
62 | - /** | ||
63 | - * Map of mod key bindings to their key codes, stored so that we don't need to cast from | ||
64 | - * string in the properties file every tick | ||
65 | - */ | ||
66 | - private final Map<KeyBinding, Integer> storedModKeyBindings = new HashMap<KeyBinding, Integer>(); | ||
67 | - | ||
68 | - /** | ||
69 | - * JInput component registry | ||
70 | - */ | ||
71 | - private final ComponentRegistry jInputComponentRegistry; | ||
72 | - | ||
73 | - /** | ||
74 | - * List of handlers for JInput components | ||
75 | - */ | ||
76 | - private final Map<Component, InputEvent> componentEvents = new HashMap<Component, InputEvent>(); | ||
77 | - | ||
78 | - /** | ||
79 | - * JInput Controllers to poll | ||
80 | - */ | ||
81 | - private Controller[] pollControllers = new Controller[0]; | ||
82 | - | ||
83 | - /** | ||
84 | - * | ||
85 | - */ | ||
86 | - public Input(LoaderEnvironment environment, LoaderProperties properties) | ||
87 | - { | ||
88 | - if (LiteLoader.getInstance() != null && LiteLoader.getInput() != null) | ||
89 | - { | ||
90 | - throw new IllegalStateException("Only one instance of Input is allowed, use LiteLoader.getInput() to get the active instance"); | ||
91 | - } | ||
92 | - | ||
93 | - this.keyMapSettingsFile = new File(environment.getCommonConfigFolder(), "liteloader.keys.properties"); | ||
94 | - this.jInputComponentRegistry = new ComponentRegistry(); | ||
95 | - | ||
96 | - if (!properties.getAndStoreBooleanProperty(LoaderProperties.OPTION_JINPUT_DISABLE, false)) | ||
97 | - { | ||
98 | - this.jInputComponentRegistry.enumerate(); | ||
99 | - } | ||
100 | - } | ||
101 | - | ||
102 | - @Override | ||
103 | - public void onInit() | ||
104 | - { | ||
105 | - if (this.keyMapSettingsFile.exists()) | ||
106 | - { | ||
107 | - try | ||
108 | - { | ||
109 | - this.keyMapSettings.load(new FileReader(this.keyMapSettingsFile)); | ||
110 | - } | ||
111 | - catch (Exception ex) {} | ||
112 | - } | ||
113 | - } | ||
114 | - | ||
115 | - @Override | ||
116 | - public void onPostInit(GameEngine<?, ?> engine) | ||
117 | - { | ||
118 | - this.engine = engine; | ||
119 | - this.profiler = engine.getProfiler(); | ||
120 | - } | ||
121 | - | ||
122 | - @Override | ||
123 | - public void onPostInitComplete(LiteLoaderMods mods) | ||
124 | - { | ||
125 | - } | ||
126 | - | ||
127 | - @Override | ||
128 | - public void onStartupComplete() | ||
129 | - { | ||
130 | - } | ||
131 | - | ||
132 | - @Override | ||
133 | - public void onJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket) | ||
134 | - { | ||
135 | - } | ||
136 | - | ||
137 | - @Override | ||
138 | - public void onWorldChanged(World world) | ||
139 | - { | ||
140 | - } | ||
141 | - | ||
142 | - @Override | ||
143 | - public void onPostRender(int mouseX, int mouseY, float partialTicks) | ||
144 | - { | ||
145 | - } | ||
146 | - | ||
147 | /** | 10 | /** |
148 | * Register a key for a mod | 11 | * Register a key for a mod |
149 | * | 12 | * |
150 | * @param binding | 13 | * @param binding |
151 | */ | 14 | */ |
152 | - public void registerKeyBinding(KeyBinding binding) | ||
153 | - { | ||
154 | - List<KeyBinding> keyBindings = this.engine.getKeyBindings(); | ||
155 | - | ||
156 | - if (!keyBindings.contains(binding)) | ||
157 | - { | ||
158 | - if (this.keyMapSettings.containsKey(binding.getKeyDescription())) | ||
159 | - { | ||
160 | - try | ||
161 | - { | ||
162 | - binding.setKeyCode(Integer.parseInt(this.keyMapSettings.getProperty(binding.getKeyDescription(), String.valueOf(binding.getKeyCode())))); | ||
163 | - } | ||
164 | - catch (NumberFormatException ex) {} | ||
165 | - } | ||
166 | - | ||
167 | - keyBindings.add(binding); | ||
168 | - | ||
169 | - this.engine.setKeyBindings(keyBindings); | ||
170 | - this.modKeyBindings.add(binding); | ||
171 | - | ||
172 | - this.updateBinding(binding); | ||
173 | - this.storeBindings(); | ||
174 | - | ||
175 | - KeyBinding.resetKeyBindingArrayAndHash(); | ||
176 | - } | ||
177 | - } | 15 | + public abstract void registerKeyBinding(KeyBinding binding); |
178 | 16 | ||
179 | /** | 17 | /** |
180 | * Unregisters a registered keybind with the game settings class, thus removing it from the "controls" screen | 18 | * Unregisters a registered keybind with the game settings class, thus removing it from the "controls" screen |
181 | * | 19 | * |
182 | * @param binding | 20 | * @param binding |
183 | */ | 21 | */ |
184 | - public void unRegisterKeyBinding(KeyBinding binding) | ||
185 | - { | ||
186 | - List<KeyBinding> keyBindings = this.engine.getKeyBindings(); | ||
187 | - | ||
188 | - if (keyBindings.contains(binding)) | ||
189 | - { | ||
190 | - keyBindings.remove(binding); | ||
191 | - this.engine.setKeyBindings(keyBindings); | ||
192 | - | ||
193 | - this.modKeyBindings.remove(binding); | ||
194 | - | ||
195 | - KeyBinding.resetKeyBindingArrayAndHash(); | ||
196 | - } | ||
197 | - } | ||
198 | - | ||
199 | - /** | ||
200 | - * Checks for changed mod keybindings and stores any that have changed | ||
201 | - */ | ||
202 | - @Override | ||
203 | - public void onTick(boolean clock, float partialTicks, boolean inGame) | ||
204 | - { | ||
205 | - this.profiler.startSection("keybindings"); | ||
206 | - if (clock) | ||
207 | - { | ||
208 | - boolean updated = false; | ||
209 | - | ||
210 | - for (KeyBinding binding : this.modKeyBindings) | ||
211 | - { | ||
212 | - if (binding.getKeyCode() != this.storedModKeyBindings.get(binding)) | ||
213 | - { | ||
214 | - this.updateBinding(binding); | ||
215 | - updated = true; | ||
216 | - } | ||
217 | - } | ||
218 | - | ||
219 | - if (updated) this.storeBindings(); | ||
220 | - } | ||
221 | - | ||
222 | - this.pollControllers(); | ||
223 | - this.profiler.endSection(); | ||
224 | - } | 22 | + public abstract void unRegisterKeyBinding(KeyBinding binding); |
225 | 23 | ||
226 | /** | 24 | /** |
227 | - * @param binding | ||
228 | - */ | ||
229 | - private void updateBinding(KeyBinding binding) | ||
230 | - { | ||
231 | - this.keyMapSettings.setProperty(binding.getKeyDescription(), String.valueOf(binding.getKeyCode())); | ||
232 | - this.storedModKeyBindings.put(binding, Integer.valueOf(binding.getKeyCode())); | ||
233 | - } | ||
234 | - | ||
235 | - @Override | ||
236 | - public void onShutDown() | ||
237 | - { | ||
238 | - this.storeBindings(); | ||
239 | - } | ||
240 | - | ||
241 | - /** | ||
242 | * Writes mod bindings to disk | 25 | * Writes mod bindings to disk |
243 | */ | 26 | */ |
244 | - public void storeBindings() | ||
245 | - { | ||
246 | - try | ||
247 | - { | ||
248 | - this.keyMapSettings.store(new FileWriter(this.keyMapSettingsFile), "Mod key mappings for LiteLoader mods, stored here to avoid losing settings stored in options.txt"); | ||
249 | - } | ||
250 | - catch (IOException ex) {} | ||
251 | - } | 27 | + public abstract void storeBindings(); |
252 | 28 | ||
253 | /** | 29 | /** |
254 | * Gets the underlying JInput component registry | 30 | * Gets the underlying JInput component registry |
255 | */ | 31 | */ |
256 | - public ComponentRegistry getComponentRegistry() | ||
257 | - { | ||
258 | - return this.jInputComponentRegistry; | ||
259 | - } | ||
260 | - | 32 | + public abstract ComponentRegistry getComponentRegistry(); |
33 | + | ||
261 | /** | 34 | /** |
262 | * Returns a handle to the event described by descriptor (or null if no component is found matching the | 35 | * Returns a handle to the event described by descriptor (or null if no component is found matching the |
263 | * descriptor. Retrieving an event via this method adds the controller (if found) to the polling list and | 36 | * descriptor. Retrieving an event via this method adds the controller (if found) to the polling list and |
@@ -275,13 +48,7 @@ public final class Input implements CoreProvider | @@ -275,13 +48,7 @@ public final class Input implements CoreProvider | ||
275 | * @param descriptor | 48 | * @param descriptor |
276 | * @param handler | 49 | * @param handler |
277 | */ | 50 | */ |
278 | - public InputEvent getEvent(String descriptor, InputHandler handler) | ||
279 | - { | ||
280 | - if (handler == null) return null; | ||
281 | - Component component = this.jInputComponentRegistry.getComponent(descriptor); | ||
282 | - Controller controller = this.jInputComponentRegistry.getController(descriptor); | ||
283 | - return this.addEventHandler(controller, component, handler); | ||
284 | - } | 51 | + public abstract InputEvent getEvent(String descriptor, InputHandler handler); |
285 | 52 | ||
286 | /** | 53 | /** |
287 | * Get events for all components which match the supplied descriptor | 54 | * Get events for all components which match the supplied descriptor |
@@ -289,90 +56,5 @@ public final class Input implements CoreProvider | @@ -289,90 +56,5 @@ public final class Input implements CoreProvider | ||
289 | * @param descriptor | 56 | * @param descriptor |
290 | * @param handler | 57 | * @param handler |
291 | */ | 58 | */ |
292 | - public InputEvent[] getEvents(String descriptor, InputHandler handler) | ||
293 | - { | ||
294 | - List<InputEvent> events = new ArrayList<InputEvent>(); | ||
295 | - Controller controller = this.jInputComponentRegistry.getController(descriptor); | ||
296 | - if (controller != null) | ||
297 | - { | ||
298 | - for (Component component : controller.getComponents()) | ||
299 | - { | ||
300 | - events.add(this.addEventHandler(controller, component, handler)); | ||
301 | - } | ||
302 | - } | ||
303 | - | ||
304 | - return events.toArray(new InputEvent[0]); | ||
305 | - } | ||
306 | - | ||
307 | - /** | ||
308 | - * @param controller | ||
309 | - * @param component | ||
310 | - * @param handler | ||
311 | - */ | ||
312 | - private InputEvent addEventHandler(Controller controller, Component component, InputHandler handler) | ||
313 | - { | ||
314 | - if (controller != null && component != null && handler != null) | ||
315 | - { | ||
316 | - this.addController(controller); | ||
317 | - | ||
318 | - InputEvent event = new InputEvent(controller, component, handler); | ||
319 | - this.componentEvents.put(component, event.link(this.componentEvents.get(component))); | ||
320 | - | ||
321 | - return event; | ||
322 | - } | ||
323 | - | ||
324 | - return null; | ||
325 | - } | ||
326 | - | ||
327 | - /** | ||
328 | - * @param controller | ||
329 | - */ | ||
330 | - private void addController(Controller controller) | ||
331 | - { | ||
332 | - Set<Controller> controllers = this.getActiveControllers(); | ||
333 | - controllers.add(controller); | ||
334 | - this.setActiveControllers(controllers); | ||
335 | - } | ||
336 | - | ||
337 | - /** | ||
338 | - * | ||
339 | - */ | ||
340 | - private Set<Controller> getActiveControllers() | ||
341 | - { | ||
342 | - Set<Controller> allControllers = new HashSet<Controller>(); | ||
343 | - for (Controller controller : this.pollControllers) | ||
344 | - allControllers.add(controller); | ||
345 | - return allControllers; | ||
346 | - } | ||
347 | - | ||
348 | - /** | ||
349 | - * @param controllers | ||
350 | - */ | ||
351 | - private void setActiveControllers(Set<Controller> controllers) | ||
352 | - { | ||
353 | - this.pollControllers = controllers.toArray(new Controller[controllers.size()]); | ||
354 | - } | ||
355 | - | ||
356 | - /** | ||
357 | - * | ||
358 | - */ | ||
359 | - private void pollControllers() | ||
360 | - { | ||
361 | - for (Controller controller : this.pollControllers) | ||
362 | - { | ||
363 | - controller.poll(); | ||
364 | - EventQueue controllerQueue = controller.getEventQueue(); | ||
365 | - | ||
366 | - for (Event event = new Event(); controllerQueue.getNextEvent(event); ) | ||
367 | - { | ||
368 | - Component cmp = event.getComponent(); | ||
369 | - | ||
370 | - InputEvent inputEvent = this.componentEvents.get(cmp); | ||
371 | - if (inputEvent != null) | ||
372 | - { | ||
373 | - inputEvent.onEvent(event); | ||
374 | - } | ||
375 | - } | ||
376 | - } | ||
377 | - } | ||
378 | -} | 59 | + public abstract InputEvent[] getEvents(String descriptor, InputHandler handler); |
60 | +} | ||
379 | \ No newline at end of file | 61 | \ No newline at end of file |