Fix up keyboard events for modloader

This commit is contained in:
Christian committed 2012-08-19 01:44:33 -04:00
1 parent a1385f4797
commit 3e94ee2c36
5 files changed
+91 -38

No files matched your search

@@ -1,16 +1,27 @@
package cpw.mods.fml.client.modloader;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Map.Entry;
import net.minecraft.client.Minecraft;
import net.minecraft.src.BaseMod;
import net.minecraft.src.Entity;
import net.minecraft.src.KeyBinding;
import net.minecraft.src.Render;
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import cpw.mods.fml.client.registry.KeyBindingRegistry;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.modloader.IModLoaderSidedHelper;
import cpw.mods.fml.common.modloader.ModLoaderHelper;
import cpw.mods.fml.common.modloader.ModLoaderModContainer;
@@ -52,13 +63,32 @@ public class ModLoaderClientHelper implements IModLoaderSidedHelper
{
this.client = client;
ModLoaderHelper.sidedHelper = this;
keyBindingContainers = Multimaps.newMultimap(Maps.<ModLoaderModContainer, Collection<ModLoaderKeyBindingHandler>>newHashMap(), new Supplier<Collection<ModLoaderKeyBindingHandler>>()
{
@Override
public Collection<ModLoaderKeyBindingHandler> get()
{
return Collections.singleton(new ModLoaderKeyBindingHandler());
}
});
}
private Minecraft client;
private static Multimap<ModLoaderModContainer, ModLoaderKeyBindingHandler> keyBindingContainers;
@Override
public void finishModLoading(ModLoaderModContainer mc)
{
handleFinishLoadingFor(mc, client);
}
public static void registerKeyBinding(BaseMod mod, KeyBinding keyHandler, boolean allowRepeat)
{
ModLoaderModContainer mlmc = (ModLoaderModContainer) Loader.instance().activeModContainer();
ModLoaderKeyBindingHandler handler = Iterables.getOnlyElement(keyBindingContainers.get(mlmc));
handler.setModContainer(mlmc);
handler.addKeyBinding(keyHandler, allowRepeat);
KeyBindingRegistry.registerKeyBinding(handler);
}
}
@@ -14,7 +14,14 @@
package cpw.mods.fml.client.modloader;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
import org.lwjgl.input.Mouse;
import com.google.common.collect.ObjectArrays;
import com.google.common.primitives.Booleans;
import net.minecraft.src.KeyBinding;
import cpw.mods.fml.client.registry.KeyBindingRegistry;
@@ -28,23 +35,27 @@ import cpw.mods.fml.common.modloader.ModLoaderModContainer;
public class ModLoaderKeyBindingHandler extends KeyBindingRegistry.KeyHandler
{
private ModLoaderModContainer modContainer;
private boolean downArmed;
private boolean upArmed;
private List<KeyBinding> helper;
private boolean[] active = new boolean[0];
private boolean[] mlRepeats = new boolean[0];
private boolean[] armed = new boolean[0];
/**
* @param keyHandler
* @param allowRepeat
* @param modContainer
*/
public ModLoaderKeyBindingHandler(KeyBinding keyBinding, boolean allowRepeat, ModLoaderModContainer modContainer)
public ModLoaderKeyBindingHandler()
{
super(new KeyBinding[] { keyBinding }, new boolean[] { allowRepeat });
this.modContainer=modContainer;
super(new KeyBinding[0], new boolean[0]);
}
public void onRenderEndTick()
void setModContainer(ModLoaderModContainer modContainer)
{
((net.minecraft.src.BaseMod)modContainer.getMod()).keyboardEvent(keyBindings[0]);
this.modContainer = modContainer;
}
public void fireKeyEvent(KeyBinding kb)
{
((net.minecraft.src.BaseMod)modContainer.getMod()).keyboardEvent(kb);
}
@Override
@@ -54,15 +65,16 @@ public class ModLoaderKeyBindingHandler extends KeyBindingRegistry.KeyHandler
{
return;
}
upArmed = false;
int idx = helper.indexOf(kb);
if (type.contains(TickType.CLIENT))
{
downArmed = true;
armed[idx] = true;
}
if (type.contains(TickType.RENDER) && downArmed)
if (armed[idx] && type.contains(TickType.RENDER) && (!active[idx] || mlRepeats[idx]))
{
onRenderEndTick();
downArmed = false;
fireKeyEvent(kb);
active[idx] = true;
armed[idx] = false;
}
}
@@ -73,16 +85,8 @@ public class ModLoaderKeyBindingHandler extends KeyBindingRegistry.KeyHandler
{
return;
}
downArmed = false;
if (type.contains(TickType.CLIENT))
{
upArmed = true;
}
if (type.contains(TickType.RENDER) && upArmed)
{
onRenderEndTick();
upArmed = false;
}
int idx = helper.indexOf(kb);
active[idx] = false;
}
@Override
@@ -96,4 +100,16 @@ public class ModLoaderKeyBindingHandler extends KeyBindingRegistry.KeyHandler
{
return modContainer.getModId() +" KB "+keyBindings[0].field_74512_d;
}
void addKeyBinding(KeyBinding binding, boolean repeats)
{
this.keyBindings = ObjectArrays.concat(this.keyBindings, binding);
this.repeatings = new boolean[this.keyBindings.length];
Arrays.fill(this.repeatings, true);
this.active = new boolean[this.keyBindings.length];
this.armed = new boolean[this.keyBindings.length];
this.mlRepeats = Booleans.concat(this.mlRepeats, new boolean[] { repeats });
this.keyDown = new boolean[this.keyBindings.length];
this.helper = Arrays.asList(this.keyBindings);
}
}
@@ -2,7 +2,7 @@ package cpw.mods.fml.client.registry;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import net.minecraft.src.GameSettings;
import net.minecraft.src.KeyBinding;
@@ -11,6 +11,7 @@ import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import cpw.mods.fml.common.ITickHandler;
import cpw.mods.fml.common.Side;
@@ -115,7 +116,10 @@ public class KeyBindingRegistry
{
keyUp(type, keyBinding, tickEnd);
}
keyDown[i] = state;
if (tickEnd)
{
keyDown[i] = state;
}
}
}
@@ -154,7 +158,7 @@ public class KeyBindingRegistry
private static final KeyBindingRegistry INSTANCE = new KeyBindingRegistry();
private List<KeyHandler> keyHandlers = Lists.newArrayList();
private Set<KeyHandler> keyHandlers = Sets.newLinkedHashSet();
@Deprecated
public static KeyBindingRegistry instance()
+1 -2
View File
@@ -601,8 +601,7 @@ public class ModLoader
@SideOnly(CLIENT)
public static void registerKey(BaseMod mod, KeyBinding keyHandler, boolean allowRepeat)
{
ModLoaderModContainer mlmc=ModLoaderHelper.registerKeyHelper(mod);
KeyBindingRegistry.registerKeyBinding(new ModLoaderKeyBindingHandler(keyHandler, allowRepeat, mlmc));
ModLoaderClientHelper.registerKeyBinding(mod, keyHandler, allowRepeat);
}
/**
@@ -2,11 +2,15 @@ package net.minecraft.src;
import java.util.EnumSet;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.IScheduledTickHandler;
import cpw.mods.fml.common.ITickHandler;
import cpw.mods.fml.common.Side;
import cpw.mods.fml.common.TickType;
import cpw.mods.fml.common.asm.SideOnly;
import cpw.mods.fml.common.network.IPacketHandler;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.network.Player;
@@ -35,15 +39,15 @@ public class mod_testMod extends BaseMod {
// ModLoader.setInGameHook(this, true, false);
// ModLoader.setInGUIHook(this, true, false);
// FMLCommonHandler.instance().registerTickHandler(this);
TickTester t1 = new TickTester();
t1.interval=1;
TickTester t2 = new TickTester();
t2.interval=2;
TickTester t3 = new TickTester();
t3.interval=3;
TickRegistry.registerScheduledTickHandler(t1, Side.CLIENT);
TickRegistry.registerScheduledTickHandler(t2, Side.SERVER);
TickRegistry.registerScheduledTickHandler(t3, Side.CLIENT);
ModLoader.registerKey(this, new KeyBinding("Fishhead",Keyboard.KEY_O), true);
}
@Override
@SideOnly(Side.CLIENT)
public void keyboardEvent(KeyBinding event)
{
Mouse.setGrabbed(false);
System.out.println(event.field_74515_c);
}
@Override