diff --git a/client/cpw/mods/fml/client/FMLClientHandler.java b/client/cpw/mods/fml/client/FMLClientHandler.java index 395adbdd90..980cde977a 100644 --- a/client/cpw/mods/fml/client/FMLClientHandler.java +++ b/client/cpw/mods/fml/client/FMLClientHandler.java @@ -143,6 +143,7 @@ public class FMLClientHandler implements IFMLSidedHandler private HashMap> overrideInfo = new HashMap>(); private HashMap blockModelIds = new HashMap(); private HashMap keyBindings = new HashMap(); + private List keyHandlers = new ArrayList(); private HashSet animationSet = new HashSet(); private List addedTextureFX = new ArrayList(); @@ -256,6 +257,7 @@ public class FMLClientHandler implements IFMLSidedHandler keys[i++]=(KeyBinding)key.getKeyBinding(); keyBindings.put((KeyBinding) key.getKeyBinding(), key.getOwningContainer()); } + keyHandlers = allKeys; return keys; } /** @@ -278,6 +280,10 @@ public class FMLClientHandler implements IFMLSidedHandler FMLCommonHandler.instance().worldTickEnd(); FMLCommonHandler.instance().tickEnd(TickType.WORLDGUI, 0.0f, client.field_6313_p); } + for (IKeyHandler entry : keyHandlers) + { + entry.onEndTick(); + } } public void onWorldLoadTick() diff --git a/client/cpw/mods/fml/client/KeyBindingHandler.java b/client/cpw/mods/fml/client/KeyBindingHandler.java index 9ef7a53933..72744c8600 100644 --- a/client/cpw/mods/fml/client/KeyBindingHandler.java +++ b/client/cpw/mods/fml/client/KeyBindingHandler.java @@ -14,6 +14,9 @@ package cpw.mods.fml.client; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + import net.minecraft.src.KeyBinding; import cpw.mods.fml.common.IKeyHandler; import cpw.mods.fml.common.ModContainer; @@ -29,6 +32,7 @@ public class KeyBindingHandler implements IKeyHandler private boolean shouldRepeat; private KeyBinding keyBinding; private ModContainer modContainer; + private boolean lastState = false; /** * @param keyHandler @@ -55,4 +59,16 @@ public class KeyBindingHandler implements IKeyHandler { return modContainer; } + + @Override + public void onEndTick() + { + int keyCode = keyBinding.field_1370_b; + boolean state = (keyCode < 0 ? Mouse.isButtonDown(keyCode + 100) : Keyboard.isKeyDown(keyCode)); + if (state && (!lastState || (lastState && shouldRepeat))) + { + modContainer.keyBindEvent(keyBinding); + } + lastState = state; + } } diff --git a/client/net/minecraft/src/BaseMod.java b/client/net/minecraft/src/BaseMod.java index 5590dadb9c..9a1aba2c4d 100644 --- a/client/net/minecraft/src/BaseMod.java +++ b/client/net/minecraft/src/BaseMod.java @@ -30,6 +30,11 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseMod { // CALLBACK MECHANISMS + public void keyBindingEvent(Object keybinding) + { + this.keyboardEvent((KeyBinding)keybinding); + } + /** * @param minecraftInstance * @return diff --git a/common/cpw/mods/fml/common/FMLModContainer.java b/common/cpw/mods/fml/common/FMLModContainer.java index b6f74a5c12..a695509ec5 100644 --- a/common/cpw/mods/fml/common/FMLModContainer.java +++ b/common/cpw/mods/fml/common/FMLModContainer.java @@ -406,4 +406,12 @@ public class FMLModContainer implements ModContainer // TODO Auto-generated method stub return null; } + /* (non-Javadoc) + * @see cpw.mods.fml.common.ModContainer#keyBindEvernt(java.lang.Object) + */ + @Override + public void keyBindEvent(Object keyBinding) + { + // TODO Auto-generated method stub + } } diff --git a/common/cpw/mods/fml/common/IKeyHandler.java b/common/cpw/mods/fml/common/IKeyHandler.java index 3013881831..e93c9ff2f1 100644 --- a/common/cpw/mods/fml/common/IKeyHandler.java +++ b/common/cpw/mods/fml/common/IKeyHandler.java @@ -27,5 +27,7 @@ public interface IKeyHandler * @return */ ModContainer getOwningContainer(); + + void onEndTick(); } diff --git a/common/cpw/mods/fml/common/ModContainer.java b/common/cpw/mods/fml/common/ModContainer.java index 675c0e53a0..9c95b7f8fc 100644 --- a/common/cpw/mods/fml/common/ModContainer.java +++ b/common/cpw/mods/fml/common/ModContainer.java @@ -245,4 +245,6 @@ public interface ModContainer * @return */ ProxyInjector findSidedProxy(); + + void keyBindEvent(Object keyBinding); } diff --git a/common/cpw/mods/fml/common/modloader/BaseMod.java b/common/cpw/mods/fml/common/modloader/BaseMod.java index b25c44a0bb..247f584ddd 100644 --- a/common/cpw/mods/fml/common/modloader/BaseMod.java +++ b/common/cpw/mods/fml/common/modloader/BaseMod.java @@ -86,4 +86,5 @@ public interface BaseMod extends IWorldGenerator, IPickupNotifier, IDispenseHand */ String getVersion(); + void keyBindingEvent(Object keybinding); } diff --git a/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java b/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java index e1e0aa5c5d..e291829d8b 100644 --- a/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java +++ b/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java @@ -700,4 +700,13 @@ public class ModLoaderModContainer implements ModContainer } return sidedProxy == NULLPROXY ? null : sidedProxy; } + + /* (non-Javadoc) + * @see cpw.mods.fml.common.ModContainer#keyBindEvernt(java.lang.Object) + */ + @Override + public void keyBindEvent(Object keybinding) + { + mod.keyBindingEvent(keybinding); + } } diff --git a/server/net/minecraft/src/BaseMod.java b/server/net/minecraft/src/BaseMod.java index 1d6d01bcda..9b3bac08ef 100644 --- a/server/net/minecraft/src/BaseMod.java +++ b/server/net/minecraft/src/BaseMod.java @@ -28,7 +28,8 @@ import cpw.mods.fml.common.ModContainer.TickType; public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseMod { // CALLBACK MECHANISMS - + public void keyBindingEvent(Object keybinding){} + /** * @param minecraftInstance * @return