Files
TinkersConstruct/src/main/java/tconstruct/client/TControls.java
T

195 lines
6.7 KiB
Java

package tconstruct.client;
import mantle.common.network.AbstractPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.gui.inventory.GuiInventory;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.Potion;
import net.minecraftforge.common.MinecraftForge;
import tconstruct.TConstruct;
import tconstruct.armor.ArmorProxyClient;
import tconstruct.armor.ArmorProxyCommon;
import tconstruct.armor.PlayerAbilityHelper;
import tconstruct.armor.items.TravelGear;
import tconstruct.client.tabs.TabRegistry;
import tconstruct.util.network.AccessoryInventoryPacket;
import tconstruct.util.network.BeltPacket;
import tconstruct.util.network.DoubleJumpPacket;
import tconstruct.util.network.GogglePacket;
import cpw.mods.fml.common.gameevent.TickEvent.Type;
public class TControls extends TKeyHandler
{
public static final String keybindCategory = "tconstruct.keybindings";
public static KeyBinding armorKey = new KeyBinding("key.tarmor", 24, keybindCategory);
public static KeyBinding toggleGoggles = new KeyBinding("key.tgoggles", 34, keybindCategory);
public static KeyBinding beltSwap = new KeyBinding("key.tbelt", 48, keybindCategory);
public static KeyBinding zoomKey = new KeyBinding("key.tzoom", 44, keybindCategory); //TODO: Make this hold, not toggle
static KeyBinding jumpKey;
static KeyBinding invKey;
static Minecraft mc;
boolean jumping;
int midairJumps = 0;
boolean climbing = false;
boolean onGround = false;
public static boolean zoom = false;
boolean activeGoggles = false; //TODO: Set this on server login
int currentTab = 1;
// boolean onStilts = false;
public TControls()
{
super(new KeyBinding[] { armorKey, toggleGoggles, beltSwap, zoomKey }, new boolean[] { false, false, false, false }, getVanillaKeyBindings(), new boolean[] { false, false });
/*ClientRegistry.registerKeyBinding(armorKey);
ClientRegistry.registerKeyBinding(refreshCapes);
ClientRegistry.registerKeyBinding(toggleGoggles);
ClientRegistry.registerKeyBinding(beltSwap);
ClientRegistry.registerKeyBinding(zoomKey);*/
}
private static KeyBinding[] getVanillaKeyBindings ()
{
mc = Minecraft.getMinecraft();
jumpKey = mc.gameSettings.keyBindJump;
invKey = mc.gameSettings.keyBindInventory;
return new KeyBinding[] { jumpKey, invKey };
}
@Override
public void keyDown (Type types, KeyBinding kb, boolean tickEnd, boolean isRepeat)
{
if (tickEnd && mc.theWorld != null)
{
if (kb == armorKey && mc.currentScreen == null) // Extended Armor
{
openArmorGui();// mc.thePlayer.username);
}
if (kb == invKey && mc.currentScreen != null && mc.currentScreen.getClass() == GuiInventory.class)// &&// !mc.playerController.isInCreativeMode())
{
MinecraftForge.EVENT_BUS.register(new TabRegistry());
}
if (kb == jumpKey) // Double jump
{
if (mc.thePlayer.capabilities.isCreativeMode)
return;
if (jumping && midairJumps > 0)
{
mc.thePlayer.motionY = 0.42D;
mc.thePlayer.fallDistance = 0;
if (mc.thePlayer.isPotionActive(Potion.jump))
{
mc.thePlayer.motionY += (double) ((float) (mc.thePlayer.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F);
}
midairJumps--;
resetFallDamage();
}
if (!jumping)
{
jumping = mc.thePlayer.isAirBorne;
ItemStack shoes = mc.thePlayer.getCurrentArmor(0);
if (shoes != null && shoes.hasTagCompound() && shoes.getTagCompound().hasKey("TinkerArmor"))
{
NBTTagCompound shoeTag = shoes.getTagCompound().getCompoundTag("TinkerArmor");
midairJumps += shoeTag.getInteger("Double-Jump");
}
ItemStack wings = mc.thePlayer.getCurrentArmor(1);
if (wings != null && wings.hasTagCompound() && wings.getTagCompound().hasKey("TinkerArmor"))
{
NBTTagCompound shoeTag = wings.getTagCompound().getCompoundTag("TinkerArmor");
midairJumps += shoeTag.getInteger("Double-Jump");
}
}
}
if (mc.currentScreen == null)
{
if (kb == toggleGoggles)
{
ItemStack goggles = mc.thePlayer.getCurrentArmor(3);
if (goggles != null && goggles.getItem() instanceof TravelGear) //TODO: Genericize this
{
activeGoggles = !activeGoggles;
toggleGoggles();
}
}
if (kb == beltSwap)
{
if (ArmorProxyClient.armorExtended.inventory[3] != null)
{
PlayerAbilityHelper.swapBelt(mc.thePlayer, ArmorProxyClient.armorExtended);
toggleBelt();
}
}
if (kb == zoomKey)
zoom = !zoom;
}
}
}
@Override
public void keyUp (Type types, KeyBinding kb, boolean tickEnd)
{
// landOnGround();
}
public void landOnGround ()
{
midairJumps = 0;
jumping = false;
}
public void resetControls ()
{
midairJumps = 0;
jumping = false;
climbing = false;
onGround = false;
}
void resetFallDamage ()
{
AbstractPacket packet = new DoubleJumpPacket();
updateServer(packet);
}
public static void openArmorGui ()
{
AbstractPacket packet = new AccessoryInventoryPacket(ArmorProxyCommon.armorGuiID);
updateServer(packet);
}
public static void openKnapsackGui ()
{
AbstractPacket packet = new AccessoryInventoryPacket(ArmorProxyCommon.knapsackGuiID);
updateServer(packet);
}
private void toggleGoggles ()
{
AbstractPacket packet = new GogglePacket(activeGoggles);
updateServer(packet);
}
private void toggleBelt ()
{
AbstractPacket packet = new BeltPacket();
updateServer(packet);
}
static void updateServer (AbstractPacket abstractPacket)
{
TConstruct.packetPipeline.sendToServer(abstractPacket);
}
}