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 | 14 | import com.google.common.base.Strings; |
| 15 | 15 | import com.google.common.collect.ImmutableSet; |
| 16 | 16 | import com.mumfrey.liteloader.launch.LiteLoaderTweaker; |
| 17 | +import com.mumfrey.liteloader.launch.LiteLoaderTweakerServer; | |
| 17 | 18 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
| 18 | 19 | |
| 19 | 20 | /** |
| ... | ... | @@ -56,12 +57,32 @@ public abstract class Start |
| 56 | 57 | Map<String, Set<String>> qualifiedArgs = new HashMap<String, Set<String>>(); |
| 57 | 58 | |
| 58 | 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 | 70 | args = Start.combineArgs(args, unqualifiedArgs, qualifiedArgs); |
| 61 | 71 | |
| 62 | 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 | 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 | 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 | 117 | LoginManager loginManager = Start.doLogin(qualifiedArgs); |
| 97 | 118 | |
| ... | ... | @@ -109,6 +130,15 @@ public abstract class Start |
| 109 | 130 | Start.addArg(qualifiedArgs, "--assetIndex", LiteLoaderTweaker.VERSION); |
| 110 | 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 | 143 | private static LoginManager doLogin(Map<String, Set<String>> qualifiedArgs) |
| 114 | 144 | { | ... | ... |
java/client/com/mumfrey/liteloader/client/GameEngineClient.java
| 1 | 1 | package com.mumfrey.liteloader.client; |
| 2 | 2 | |
| 3 | 3 | import java.util.Arrays; |
| 4 | -import java.util.HashMap; | |
| 5 | 4 | import java.util.LinkedList; |
| 6 | 5 | import java.util.List; |
| 7 | -import java.util.Map; | |
| 8 | 6 | |
| 9 | 7 | import net.minecraft.client.Minecraft; |
| 10 | 8 | import net.minecraft.client.audio.SoundHandler; |
| 11 | 9 | import net.minecraft.client.gui.GuiNewChat; |
| 12 | 10 | import net.minecraft.client.gui.GuiScreen; |
| 13 | 11 | import net.minecraft.client.gui.ScaledResolution; |
| 14 | -import net.minecraft.client.resources.IResourceManager; | |
| 15 | -import net.minecraft.client.resources.IResourcePack; | |
| 16 | 12 | import net.minecraft.client.settings.GameSettings; |
| 17 | 13 | import net.minecraft.client.settings.KeyBinding; |
| 18 | 14 | import net.minecraft.profiler.Profiler; |
| ... | ... | @@ -20,7 +16,7 @@ import net.minecraft.server.integrated.IntegratedServer; |
| 20 | 16 | |
| 21 | 17 | import com.mumfrey.liteloader.client.overlays.IMinecraft; |
| 22 | 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 | 26 | { |
| 31 | 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 | 31 | /* (non-Javadoc) |
| 44 | 32 | * @see com.mumfrey.liteloader.common.GameEngine#getProfiler() |
| ... | ... | @@ -50,20 +38,6 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> |
| 50 | 38 | } |
| 51 | 39 | |
| 52 | 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 | 41 | * @see com.mumfrey.liteloader.common.GameEngine#isClient() |
| 68 | 42 | */ |
| 69 | 43 | @Override |
| ... | ... | @@ -126,6 +100,12 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> |
| 126 | 100 | return this.engine.getIntegratedServer(); |
| 127 | 101 | } |
| 128 | 102 | |
| 103 | + @Override | |
| 104 | + public Resources<?, ?> getResources() | |
| 105 | + { | |
| 106 | + return this.resources; | |
| 107 | + } | |
| 108 | + | |
| 129 | 109 | public GameSettings getGameSettings() |
| 130 | 110 | { |
| 131 | 111 | return this.engine.gameSettings; |
| ... | ... | @@ -151,61 +131,11 @@ public class GameEngineClient implements GameEngine<Minecraft, IntegratedServer> |
| 151 | 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 | 134 | public SoundHandler getSoundHandler() |
| 164 | 135 | { |
| 165 | 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 | 139 | /* (non-Javadoc) |
| 210 | 140 | * @see com.mumfrey.liteloader.common.GameEngine#getKeyBindings() |
| 211 | 141 | */ | ... | ... |
java/client/com/mumfrey/liteloader/client/LiteLoaderCoreProviderClient.java
| 1 | 1 | package com.mumfrey.liteloader.client; |
| 2 | 2 | |
| 3 | +import net.minecraft.client.resources.IResourceManager; | |
| 4 | +import net.minecraft.client.resources.IResourcePack; | |
| 3 | 5 | import net.minecraft.client.resources.SimpleReloadableResourceManager; |
| 4 | 6 | import net.minecraft.network.INetHandler; |
| 5 | 7 | import net.minecraft.network.play.server.S01PacketJoinGame; |
| ... | ... | @@ -7,6 +9,7 @@ import net.minecraft.world.World; |
| 7 | 9 | |
| 8 | 10 | import com.mumfrey.liteloader.api.CoreProvider; |
| 9 | 11 | import com.mumfrey.liteloader.common.GameEngine; |
| 12 | +import com.mumfrey.liteloader.common.Resources; | |
| 10 | 13 | import com.mumfrey.liteloader.core.LiteLoader; |
| 11 | 14 | import com.mumfrey.liteloader.core.LiteLoaderMods; |
| 12 | 15 | import com.mumfrey.liteloader.launch.LoaderProperties; |
| ... | ... | @@ -45,10 +48,11 @@ public class LiteLoaderCoreProviderClient implements CoreProvider |
| 45 | 48 | this.inhibitSoundManagerReload = this.properties.getAndStoreBooleanProperty(LoaderProperties.OPTION_SOUND_MANAGER_FIX, true); |
| 46 | 49 | } |
| 47 | 50 | |
| 51 | + @SuppressWarnings("unchecked") | |
| 48 | 52 | @Override |
| 49 | 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 | 57 | if (this.inhibitSoundManagerReload) |
| 54 | 58 | { |
| ... | ... | @@ -56,7 +60,8 @@ public class LiteLoaderCoreProviderClient implements CoreProvider |
| 56 | 60 | } |
| 57 | 61 | |
| 58 | 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 | 67 | @Override | ... | ... |
java/client/com/mumfrey/liteloader/client/LiteLoaderEventBrokerClient.java
| ... | ... | @@ -6,6 +6,8 @@ import net.minecraft.client.gui.GuiNewChat; |
| 6 | 6 | import net.minecraft.client.gui.ScaledResolution; |
| 7 | 7 | import net.minecraft.client.renderer.entity.Render; |
| 8 | 8 | import net.minecraft.client.renderer.entity.RenderManager; |
| 9 | +import net.minecraft.client.resources.IResourceManager; | |
| 10 | +import net.minecraft.client.resources.IResourceManagerReloadListener; | |
| 9 | 11 | import net.minecraft.client.shader.Framebuffer; |
| 10 | 12 | import net.minecraft.entity.Entity; |
| 11 | 13 | import net.minecraft.network.play.client.C01PacketChatMessage; |
| ... | ... | @@ -19,9 +21,9 @@ import org.lwjgl.input.Mouse; |
| 19 | 21 | import com.mumfrey.liteloader.*; |
| 20 | 22 | import com.mumfrey.liteloader.client.overlays.IMinecraft; |
| 21 | 23 | import com.mumfrey.liteloader.common.LoadingProgress; |
| 22 | -import com.mumfrey.liteloader.core.LiteLoaderEventBroker; | |
| 23 | 24 | import com.mumfrey.liteloader.core.InterfaceRegistrationDelegate; |
| 24 | 25 | import com.mumfrey.liteloader.core.LiteLoader; |
| 26 | +import com.mumfrey.liteloader.core.LiteLoaderEventBroker; | |
| 25 | 27 | import com.mumfrey.liteloader.core.event.HandlerList; |
| 26 | 28 | import com.mumfrey.liteloader.core.event.HandlerList.ReturnLogicOp; |
| 27 | 29 | import com.mumfrey.liteloader.interfaces.FastIterableDeque; |
| ... | ... | @@ -30,7 +32,7 @@ import com.mumfrey.liteloader.transformers.event.EventInfo; |
| 30 | 32 | import com.mumfrey.liteloader.transformers.event.ReturnEventInfo; |
| 31 | 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 | 37 | private static LiteLoaderEventBrokerClient instance; |
| 36 | 38 | |
| ... | ... | @@ -89,6 +91,12 @@ public class LiteLoaderEventBrokerClient extends LiteLoaderEventBroker<Minecraft |
| 89 | 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 | 100 | /* (non-Javadoc) |
| 93 | 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 | 238 | @Override |
| 231 | 239 | protected void onStartupComplete() |
| 232 | 240 | { |
| 233 | - this.engine.refreshResources(false); | |
| 241 | + this.engine.getResources().refreshResources(false); | |
| 234 | 242 | |
| 235 | 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 | 11 | import com.mumfrey.liteloader.api.InterfaceProvider; |
| 12 | 12 | import com.mumfrey.liteloader.api.Observer; |
| 13 | 13 | import com.mumfrey.liteloader.client.LiteLoaderCoreProviderClient; |
| 14 | +import com.mumfrey.liteloader.client.ResourceObserver; | |
| 15 | +import com.mumfrey.liteloader.client.Translator; | |
| 14 | 16 | import com.mumfrey.liteloader.core.LiteLoader; |
| 15 | 17 | import com.mumfrey.liteloader.core.api.LiteLoaderCoreAPI; |
| 16 | 18 | import com.mumfrey.liteloader.interfaces.ObjectFactory; |
| ... | ... | @@ -68,7 +70,8 @@ public class LiteLoaderCoreAPIClient extends LiteLoaderCoreAPI |
| 68 | 70 | return ImmutableList.<CustomisationProvider>of |
| 69 | 71 | ( |
| 70 | 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 | 127 | { |
| 125 | 128 | return ImmutableList.<Observer>of |
| 126 | 129 | ( |
| 130 | + new ResourceObserver(), | |
| 127 | 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 | 22 | import com.mumfrey.liteloader.launch.LoaderProperties; |
| 23 | 23 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; |
| 24 | 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 | 29 | * Factory for lifetime loader objects for the client side |
| ... | ... | @@ -34,6 +36,8 @@ class ObjectFactoryClient implements ObjectFactory<Minecraft, IntegratedServer> |
| 34 | 36 | |
| 35 | 37 | private LoaderProperties properties; |
| 36 | 38 | |
| 39 | + private Input input; | |
| 40 | + | |
| 37 | 41 | private LiteLoaderEventBrokerClient clientEvents; |
| 38 | 42 | |
| 39 | 43 | private PacketEventsClient clientPacketEvents; |
| ... | ... | @@ -53,6 +57,17 @@ class ObjectFactoryClient implements ObjectFactory<Minecraft, IntegratedServer> |
| 53 | 57 | } |
| 54 | 58 | |
| 55 | 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 | 71 | public LiteLoaderEventBroker<Minecraft, IntegratedServer> getEventBroker() |
| 57 | 72 | { |
| 58 | 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 | 3 | import static com.mumfrey.liteloader.core.runtime.Methods.*; |
| 4 | 4 | import static com.mumfrey.liteloader.transformers.event.InjectionPoint.*; |
| 5 | 5 | |
| 6 | +import com.mumfrey.liteloader.common.transformers.LiteLoaderEventTransformer; | |
| 6 | 7 | import com.mumfrey.liteloader.core.runtime.Obf; |
| 7 | 8 | import com.mumfrey.liteloader.transformers.event.Event; |
| 8 | -import com.mumfrey.liteloader.transformers.event.EventInjectionTransformer; | |
| 9 | 9 | import com.mumfrey.liteloader.transformers.event.InjectionPoint; |
| 10 | -import com.mumfrey.liteloader.transformers.event.MethodInfo; | |
| 11 | 10 | import com.mumfrey.liteloader.transformers.event.inject.BeforeInvoke; |
| 12 | 11 | import com.mumfrey.liteloader.transformers.event.inject.BeforeNew; |
| 13 | 12 | import com.mumfrey.liteloader.transformers.event.inject.BeforeReturn; |
| ... | ... | @@ -19,11 +18,19 @@ import com.mumfrey.liteloader.transformers.event.inject.MethodHead; |
| 19 | 18 | * |
| 20 | 19 | * @author Adam Mummery-Smith |
| 21 | 20 | */ |
| 22 | -public class LiteLoaderEventInjectionTransformer extends EventInjectionTransformer | |
| 21 | +public class LiteLoaderEventInjectionTransformer extends LiteLoaderEventTransformer | |
| 23 | 22 | { |
| 24 | 23 | @Override |
| 24 | + protected Obf getProxy() | |
| 25 | + { | |
| 26 | + return Obf.CallbackProxyClient; | |
| 27 | + } | |
| 28 | + | |
| 29 | + @Override | |
| 25 | 30 | protected void addEvents() |
| 26 | 31 | { |
| 32 | + super.addEvents(); | |
| 33 | + | |
| 27 | 34 | // Event declaraions |
| 28 | 35 | Event onOutboundChat = Event.getOrCreate("onOutboundChat", true); |
| 29 | 36 | Event onResize = Event.getOrCreate("updateFramebufferSize", false); |
| ... | ... | @@ -44,11 +51,6 @@ public class LiteLoaderEventInjectionTransformer extends EventInjectionTransform |
| 44 | 51 | Event onRenderChat = Event.getOrCreate("onRenderChat", false); |
| 45 | 52 | Event postRenderChat = Event.getOrCreate("postRenderChat", false); |
| 46 | 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 | 54 | Event onStartupComplete = Event.getOrCreate("onStartupComplete", false); |
| 53 | 55 | Event onSessionProfileBad = Event.getOrCreate("onSessionProfileBad", true); |
| 54 | 56 | Event onSaveScreenshot = Event.getOrCreate("onSaveScreenshot", true); |
| ... | ... | @@ -96,11 +98,6 @@ public class LiteLoaderEventInjectionTransformer extends EventInjectionTransform |
| 96 | 98 | this.add(onRenderChat, renderGameOverlay, (beforeDrawChat), "onRenderChat"); |
| 97 | 99 | this.add(postRenderChat, renderGameOverlay, after(beforeDrawChat), "postRenderChat"); |
| 98 | 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 | 101 | this.add(onStartupComplete, startGame, (methodReturn), "onStartupComplete"); |
| 105 | 102 | this.add(onSaveScreenshot, saveScreenshot, (beforeIsFBOEnabled), "onSaveScreenshot"); |
| 106 | 103 | this.add(onRenderEntity, doRenderEntity, (beforeRenderEntity), "onRenderEntity"); |
| ... | ... | @@ -112,14 +109,4 @@ public class LiteLoaderEventInjectionTransformer extends EventInjectionTransform |
| 112 | 109 | // Protocol handlers |
| 113 | 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 | 47 | /** |
| 48 | 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 | 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 | 51 | * declaration by the enumerator of an intention to load the specified mod. |
| 52 | 52 | * |
| 53 | 53 | * @param enumerator | ... | ... |
java/common/com/mumfrey/liteloader/api/ModLoadObserver.java
| ... | ... | @@ -3,6 +3,7 @@ package com.mumfrey.liteloader.api; |
| 3 | 3 | import java.io.File; |
| 4 | 4 | |
| 5 | 5 | import com.mumfrey.liteloader.LiteMod; |
| 6 | +import com.mumfrey.liteloader.core.ModInfo; | |
| 6 | 7 | import com.mumfrey.liteloader.interfaces.LoadableMod; |
| 7 | 8 | |
| 8 | 9 | /** |
| ... | ... | @@ -22,6 +23,13 @@ public interface ModLoadObserver extends Observer |
| 22 | 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 | 33 | * Called if mod loading fails |
| 26 | 34 | * |
| 27 | 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 | 2 | |
| 3 | 3 | import java.util.List; |
| 4 | 4 | |
| 5 | -import net.minecraft.client.resources.IResourceManager; | |
| 6 | -import net.minecraft.client.resources.IResourcePack; | |
| 7 | 5 | import net.minecraft.client.settings.KeyBinding; |
| 8 | 6 | import net.minecraft.profiler.Profiler; |
| 9 | 7 | import net.minecraft.server.MinecraftServer; |
| ... | ... | @@ -50,33 +48,16 @@ public interface GameEngine<TClient, TServer extends MinecraftServer> |
| 50 | 48 | * Get the underlying server instance |
| 51 | 49 | */ |
| 52 | 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 | 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 | 19 | import com.mumfrey.liteloader.LiteMod; |
| 20 | 20 | import com.mumfrey.liteloader.api.CoreProvider; |
| 21 | 21 | import com.mumfrey.liteloader.api.CustomisationProvider; |
| 22 | +import com.mumfrey.liteloader.api.Listener; | |
| 22 | 23 | import com.mumfrey.liteloader.api.LiteAPI; |
| 23 | 24 | import com.mumfrey.liteloader.api.ModLoadObserver; |
| 24 | 25 | import com.mumfrey.liteloader.api.PostRenderObserver; |
| 25 | 26 | import com.mumfrey.liteloader.api.ShutdownObserver; |
| 26 | 27 | import com.mumfrey.liteloader.api.TickObserver; |
| 28 | +import com.mumfrey.liteloader.api.TranslationProvider; | |
| 27 | 29 | import com.mumfrey.liteloader.api.WorldObserver; |
| 28 | 30 | import com.mumfrey.liteloader.api.manager.APIAdapter; |
| 29 | 31 | import com.mumfrey.liteloader.api.manager.APIProvider; |
| ... | ... | @@ -178,6 +180,11 @@ public final class LiteLoader |
| 178 | 180 | private Input input; |
| 179 | 181 | |
| 180 | 182 | /** |
| 183 | + * | |
| 184 | + */ | |
| 185 | + private final List<TranslationProvider> translators = new ArrayList<TranslationProvider>(); | |
| 186 | + | |
| 187 | + /** | |
| 181 | 188 | * ctor |
| 182 | 189 | * |
| 183 | 190 | * @param environment |
| ... | ... | @@ -190,7 +197,6 @@ public final class LiteLoader |
| 190 | 197 | this.enumerator = environment.getEnumerator(); |
| 191 | 198 | |
| 192 | 199 | this.configManager = new ConfigManager(); |
| 193 | - this.input = new Input(environment, properties); | |
| 194 | 200 | |
| 195 | 201 | this.mods = new LiteLoaderMods(this, environment, properties, this.configManager); |
| 196 | 202 | |
| ... | ... | @@ -205,11 +211,36 @@ public final class LiteLoader |
| 205 | 211 | |
| 206 | 212 | this.objectFactory = this.api.getObjectFactory(); |
| 207 | 213 | |
| 214 | + this.input = this.objectFactory.getInput(); | |
| 215 | + | |
| 208 | 216 | this.clientPluginChannels = this.objectFactory.getClientPluginChannels(); |
| 209 | 217 | this.serverPluginChannels = this.objectFactory.getServerPluginChannels(); |
| 210 | 218 | |
| 211 | 219 | this.permissionsManagerClient = this.objectFactory.getClientPermissionManager(); |
| 212 | 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 | 803 | this.coreProviders.all().onPostInit(this.engine); |
| 773 | 804 | |
| 774 | 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 | 816 | private void loadAndInitMods() |
| ... | ... | @@ -906,6 +945,20 @@ public final class LiteLoader |
| 906 | 945 | |
| 907 | 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 | 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 | 1 | package com.mumfrey.liteloader.core; |
| 2 | 2 | |
| 3 | -import net.minecraft.client.resources.IResourceManager; | |
| 4 | -import net.minecraft.client.resources.IResourceManagerReloadListener; | |
| 5 | 3 | import net.minecraft.command.ICommandManager; |
| 6 | 4 | import net.minecraft.command.ServerCommandManager; |
| 7 | 5 | import net.minecraft.entity.player.EntityPlayerMP; |
| ... | ... | @@ -33,7 +31,7 @@ import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
| 33 | 31 | * @param <TClient> Type of the client runtime, "Minecraft" on client and null on the server |
| 34 | 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 | 37 | * @author Adam Mummery-Smith |
| ... | ... | @@ -182,12 +180,6 @@ public abstract class LiteLoaderEventBroker<TClient, TServer extends MinecraftSe |
| 182 | 180 | { |
| 183 | 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 | 185 | * @param instance | ... | ... |
java/common/com/mumfrey/liteloader/core/LiteLoaderMods.java
| ... | ... | @@ -9,8 +9,6 @@ import java.util.List; |
| 9 | 9 | import java.util.Map; |
| 10 | 10 | import java.util.Set; |
| 11 | 11 | |
| 12 | -import net.minecraft.client.resources.IResourcePack; | |
| 13 | - | |
| 14 | 12 | import com.mumfrey.liteloader.LiteMod; |
| 15 | 13 | import com.mumfrey.liteloader.api.ModLoadObserver; |
| 16 | 14 | import com.mumfrey.liteloader.common.LoadingProgress; |
| ... | ... | @@ -455,6 +453,8 @@ public class LiteLoaderMods |
| 455 | 453 | this.onModLoadFailed(container, mod.getModClassName(), "an error occurred", th); |
| 456 | 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 | 486 | |
| 487 | 487 | String modName = mod.getDisplayName(); |
| 488 | 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 | 6 | import net.minecraft.launchwrapper.LaunchClassLoader; |
| 7 | 7 | |
| 8 | 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 | 11 | * Mod file reference for a file loaded from class path |
| ... | ... | @@ -67,24 +64,6 @@ public class LoadableModClassPath extends LoadableModFile |
| 67 | 64 | { |
| 68 | 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 | 68 | @Override |
| 90 | 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 | import java.util.zip.ZipFile; |
| 19 | 19 | |
| 20 | 20 | import joptsimple.internal.Strings; |
| 21 | -import net.minecraft.client.resources.I18n; | |
| 22 | 21 | |
| 23 | 22 | import com.google.common.base.Charsets; |
| 24 | 23 | import com.google.common.io.ByteStreams; |
| 25 | 24 | import com.google.gson.Gson; |
| 26 | 25 | import com.google.gson.JsonSyntaxException; |
| 27 | 26 | import com.mumfrey.liteloader.api.manager.APIProvider; |
| 27 | +import com.mumfrey.liteloader.core.LiteLoader; | |
| 28 | 28 | import com.mumfrey.liteloader.interfaces.LoadableFile; |
| 29 | 29 | import com.mumfrey.liteloader.interfaces.LoadableMod; |
| 30 | 30 | import com.mumfrey.liteloader.launch.InjectionStrategy; |
| 31 | 31 | import com.mumfrey.liteloader.launch.LoaderEnvironment; |
| 32 | -import com.mumfrey.liteloader.resources.ModResourcePack; | |
| 33 | 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 | 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 | 91 | * ALL of the parsed metadata from the file, associated with the mod later on for retrieval via the loader |
| 98 | 92 | */ |
| 99 | 93 | protected Map<String, Object> metaData = new HashMap<String, Object>(); |
| ... | ... | @@ -241,12 +235,12 @@ public class LoadableModFile extends LoadableFile implements LoadableMod<File> |
| 241 | 235 | { |
| 242 | 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 | 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 | 246 | String descriptionKey = "description"; |
| ... | ... | @@ -374,33 +368,11 @@ public class LoadableModFile extends LoadableFile implements LoadableMod<File> |
| 374 | 368 | { |
| 375 | 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 | 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 | 378 | @Override | ... | ... |
java/common/com/mumfrey/liteloader/core/runtime/Methods.java
| ... | ... | @@ -13,6 +13,7 @@ import com.mumfrey.liteloader.transformers.event.MethodInfo; |
| 13 | 13 | */ |
| 14 | 14 | public abstract class Methods |
| 15 | 15 | { |
| 16 | + // Client & General | |
| 16 | 17 | public static final MethodInfo startGame = new MethodInfo(Obf.Minecraft, Obf.startGame, Void.TYPE); |
| 17 | 18 | public static final MethodInfo runGameLoop = new MethodInfo(Obf.Minecraft, Obf.runGameLoop, Void.TYPE); |
| 18 | 19 | public static final MethodInfo runTick = new MethodInfo(Obf.Minecraft, Obf.runTick, Void.TYPE); |
| ... | ... | @@ -42,9 +43,14 @@ public abstract class Methods |
| 42 | 43 | public static final MethodInfo realmsPlay = new MethodInfo(Obf.RealmsMainScreen, "play", Void.TYPE, Long.TYPE); |
| 43 | 44 | public static final MethodInfo realmsStopFetcher = new MethodInfo(Obf.RealmsMainScreen, "stopRealmsFetcherAndPinger", Void.TYPE); |
| 44 | 45 | |
| 46 | + // Profiler | |
| 45 | 47 | public static final MethodInfo startSection = new MethodInfo(Obf.Profiler, Obf.startSection, Void.TYPE, String.class); |
| 46 | 48 | public static final MethodInfo endSection = new MethodInfo(Obf.Profiler, Obf.endSection, Void.TYPE); |
| 47 | 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 | 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 | 101 | /** |
| 102 | 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 | 107 | * Get all class names in this container |
| ... | ... | @@ -297,21 +287,10 @@ public interface LoadableMod<L> extends Loadable<L>, Injectable |
| 297 | 287 | } |
| 298 | 288 | |
| 299 | 289 | @Override |
| 300 | - public boolean hasResourcePack() | |
| 290 | + public boolean hasResources() | |
| 301 | 291 | { |
| 302 | 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 | 295 | @Override |
| 317 | 296 | public boolean hasDependencies() | ... | ... |
java/common/com/mumfrey/liteloader/interfaces/ObjectFactory.java
| ... | ... | @@ -9,6 +9,7 @@ import com.mumfrey.liteloader.core.PacketEvents; |
| 9 | 9 | import com.mumfrey.liteloader.core.ServerPluginChannels; |
| 10 | 10 | import com.mumfrey.liteloader.permissions.PermissionsManagerClient; |
| 11 | 11 | import com.mumfrey.liteloader.permissions.PermissionsManagerServer; |
| 12 | +import com.mumfrey.liteloader.util.Input; | |
| 12 | 13 | |
| 13 | 14 | /** |
| 14 | 15 | * Factory for generating loader managament objects based on the environment |
| ... | ... | @@ -24,6 +25,8 @@ public interface ObjectFactory<TClient, TServer extends MinecraftServer> |
| 24 | 25 | |
| 25 | 26 | public abstract PacketEvents getPacketEventBroker(); |
| 26 | 27 | |
| 28 | + public abstract Input getInput(); | |
| 29 | + | |
| 27 | 30 | public abstract GameEngine<TClient, TServer> getGameEngine(); |
| 28 | 31 | |
| 29 | 32 | public abstract PanelManager<?> getPanelManager(); | ... | ... |
java/common/com/mumfrey/liteloader/launch/LiteLoaderTweaker.java
| ... | ... | @@ -14,6 +14,7 @@ import net.minecraft.launchwrapper.ITweaker; |
| 14 | 14 | import net.minecraft.launchwrapper.Launch; |
| 15 | 15 | import net.minecraft.launchwrapper.LaunchClassLoader; |
| 16 | 16 | |
| 17 | +import com.mumfrey.liteloader.transformers.event.EventInfo; | |
| 17 | 18 | import com.mumfrey.liteloader.util.SortableValue; |
| 18 | 19 | import com.mumfrey.liteloader.util.log.LiteLoaderLogger; |
| 19 | 20 | |
| ... | ... | @@ -617,4 +618,10 @@ public class LiteLoaderTweaker implements ITweaker |
| 617 | 618 | { |
| 618 | 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 | 628 | \ No newline at end of file | ... | ... |
java/common/com/mumfrey/liteloader/util/Input.java
| 1 | 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 | 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 | 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 | 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 | 11 | * Register a key for a mod |
| 149 | 12 | * |
| 150 | 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 | 18 | * Unregisters a registered keybind with the game settings class, thus removing it from the "controls" screen |
| 181 | 19 | * |
| 182 | 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 | 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 | 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 | 35 | * Returns a handle to the event described by descriptor (or null if no component is found matching the |
| 263 | 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 | 48 | * @param descriptor |
| 276 | 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 | 54 | * Get events for all components which match the supplied descriptor |
| ... | ... | @@ -289,90 +56,5 @@ public final class Input implements CoreProvider |
| 289 | 56 | * @param descriptor |
| 290 | 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 | 61 | \ No newline at end of file | ... | ... |