Merge pull request #1155 from TheTemportalist/master

This should be valid for NEK integration.
This commit is contained in:
boni committed 2014-11-11 22:00:41 +01:00
commit ec2311ec87
6 files changed
+696 -704

No files matched your search

@@ -0,0 +1,40 @@
package modwarriors.notenoughkeys.api;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
* Center of the API. Main api methods can be found in this class.
*
* @author TheTemportalist
*/
@SideOnly(Side.CLIENT)
public class Api {
/**
* Checks if NotEnoughKeys is loaded in the current environment
*
* @return 'true' if loaded
*/
public static boolean isLoaded() {
return Loader.isModLoaded("notenoughkeys");
}
/**
* Registers a mod's keys with NEK
*
* @param modname The NAME of the mod registering the key
* @param keyDecriptions A String[] (Array[String]) of the key descriptions. i.e. new String[]{"key.hotbar1"}
*/
public static void registerMod(String modname, String[] keyDecriptions) {
try {
Class.forName("modwarriors.notenoughkeys.keys.KeyBindTracker").getMethod(
"registerMod", String.class, String[].class
).invoke(null, modname, keyDecriptions);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,43 @@
package modwarriors.notenoughkeys.api;
import cpw.mods.fml.common.eventhandler.Cancelable;
import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.settings.KeyBinding;
/**
* Called when a keybinding is triggered with the passed with valid modifiers
*
* @author TheTemportalist
*/
@SideOnly(Side.CLIENT)
@Cancelable
public class KeyBindingPressedEvent extends Event {
/**
* The KeyBinding being triggered
*/
public KeyBinding keyBinding = null;
/**
* Tells whether a modifier was required AND was down when triggered
*/
public boolean shiftRequired = false, ctrlRequired = false, altRequired = false;
/**
* Called with the passed keyBinding and modifiers.
* Subscribe to this event so activate a keybinding when triggered.
*
* @param keyBinding The KeyBinding being triggered. Stores the key's description and keycode
* @param modifiers The modifiers (SHIFT, CTRL, ALT) that determine when a compatible key is pressed
*/
public KeyBindingPressedEvent(KeyBinding keyBinding, boolean[] modifiers) {
super();
this.keyBinding = keyBinding;
this.shiftRequired = modifiers[0];
this.ctrlRequired = modifiers[1];
this.altRequired = modifiers[2];
}
}
@@ -0,0 +1,5 @@
@API(owner = "Not Enough Keys", provides = "API_NEK",
apiVersion = "1.0.0") package modwarriors.notenoughkeys.api;
import cpw.mods.fml.common.API;
@@ -1,34 +1,48 @@
package tconstruct.armor;
import com.google.common.collect.Lists;
import cpw.mods.fml.common.*;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import java.util.*;
import mantle.lib.client.MantleClientRegistry;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.gui.inventory.GuiInventory;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.settings.*;
import net.minecraft.entity.*;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.IAttributeInstance;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.*;
import net.minecraft.item.*;
import net.minecraft.potion.*;
import net.minecraft.util.*;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.client.GuiIngameForge;
import net.minecraftforge.client.event.*;
import net.minecraftforge.client.event.FOVUpdateEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
import net.minecraftforge.client.event.RenderPlayerEvent;
import net.minecraftforge.common.MinecraftForge;
import tconstruct.armor.gui.*;
import tconstruct.armor.gui.ArmorExtendedGui;
import tconstruct.armor.gui.KnapsackGui;
import tconstruct.armor.items.TravelGear;
import tconstruct.armor.model.*;
import tconstruct.armor.player.*;
import tconstruct.client.*;
import tconstruct.client.tabs.*;
import tconstruct.armor.model.BeltModel;
import tconstruct.armor.model.BootBump;
import tconstruct.armor.model.HiddenPlayerModel;
import tconstruct.armor.model.WingModel;
import tconstruct.armor.player.ArmorExtended;
import tconstruct.armor.player.KnapsackInventory;
import tconstruct.client.ArmorControls;
import tconstruct.client.tabs.InventoryTabArmorExtended;
import tconstruct.client.tabs.InventoryTabKnapsack;
import tconstruct.client.tabs.InventoryTabVanilla;
import tconstruct.client.tabs.TabRegistry;
import tconstruct.common.TProxyCommon;
import tconstruct.library.accessory.IAccessoryModel;
import tconstruct.library.client.TConstructClientRegistry;
@@ -36,476 +50,477 @@ import tconstruct.library.crafting.ModifyBuilder;
import tconstruct.tools.TinkerTools;
import tconstruct.world.TinkerWorld;
public class ArmorProxyClient extends ArmorProxyCommon
{
public static WingModel wings = new WingModel();
public static BootBump bootbump = new BootBump();
public static HiddenPlayerModel glove = new HiddenPlayerModel(0.25F, 4);
public static HiddenPlayerModel vest = new HiddenPlayerModel(0.25f, 1);
public static BeltModel belt = new BeltModel();
import java.util.Random;
public static KnapsackInventory knapsack = new KnapsackInventory();
public static ArmorExtended armorExtended = new ArmorExtended();
public class ArmorProxyClient extends ArmorProxyCommon {
public static WingModel wings = new WingModel();
public static BootBump bootbump = new BootBump();
public static HiddenPlayerModel glove = new HiddenPlayerModel(0.25F, 4);
public static HiddenPlayerModel vest = new HiddenPlayerModel(0.25f, 1);
public static BeltModel belt = new BeltModel();
@Override
public void preInit() {
controlInstance = new ArmorControls();
FMLCommonHandler.instance().bus().register(controlInstance);
MinecraftForge.EVENT_BUS.register(new TabRegistry());
}
public static KnapsackInventory knapsack = new KnapsackInventory();
public static ArmorExtended armorExtended = new ArmorExtended();
@Override
public void initialize ()
{
registerGuiHandler();
registerKeys();
registerManualIcons();
registerManualRecipes();
MinecraftForge.EVENT_BUS.register(this);
FMLCommonHandler.instance().bus().register(new ArmorAbilitiesClient(mc, controlInstance));
}
@Override
public void preInit() {
controlInstance = new ArmorControls();
FMLCommonHandler.instance().bus().register(controlInstance);
MinecraftForge.EVENT_BUS.register(new TabRegistry());
}
private void registerManualIcons ()
{
MantleClientRegistry.registerManualIcon("travelgoggles", TinkerArmor.travelGoggles.getDefaultItem());
MantleClientRegistry.registerManualIcon("travelvest", TinkerArmor.travelVest.getDefaultItem());
MantleClientRegistry.registerManualIcon("travelwings", TinkerArmor.travelWings.getDefaultItem());
MantleClientRegistry.registerManualIcon("travelboots", TinkerArmor.travelBoots.getDefaultItem());
MantleClientRegistry.registerManualIcon("travelbelt", TinkerArmor.travelBelt.getDefaultItem());
MantleClientRegistry.registerManualIcon("travelglove", TinkerArmor.travelGlove.getDefaultItem());
}
@Override
public void initialize() {
registerGuiHandler();
registerKeys();
registerManualIcons();
registerManualRecipes();
MinecraftForge.EVENT_BUS.register(this);
FMLCommonHandler.instance().bus().register(new ArmorAbilitiesClient(mc, controlInstance));
}
private void registerManualRecipes ()
{
ItemStack feather = new ItemStack(Items.feather);
ItemStack redstone = new ItemStack(Items.redstone);
ItemStack goggles = TinkerArmor.travelGoggles.getDefaultItem();
private void registerManualIcons() {
MantleClientRegistry
.registerManualIcon("travelgoggles", TinkerArmor.travelGoggles.getDefaultItem());
MantleClientRegistry
.registerManualIcon("travelvest", TinkerArmor.travelVest.getDefaultItem());
MantleClientRegistry
.registerManualIcon("travelwings", TinkerArmor.travelWings.getDefaultItem());
MantleClientRegistry
.registerManualIcon("travelboots", TinkerArmor.travelBoots.getDefaultItem());
MantleClientRegistry
.registerManualIcon("travelbelt", TinkerArmor.travelBelt.getDefaultItem());
MantleClientRegistry
.registerManualIcon("travelglove", TinkerArmor.travelGlove.getDefaultItem());
}
TConstructClientRegistry.registerManualModifier("nightvision", goggles.copy(), new ItemStack(Items.flint_and_steel), new ItemStack(Items.potionitem, 1, 8198), new ItemStack(Items.golden_carrot), null);
private void registerManualRecipes() {
ItemStack feather = new ItemStack(Items.feather);
ItemStack redstone = new ItemStack(Items.redstone);
ItemStack goggles = TinkerArmor.travelGoggles.getDefaultItem();
ItemStack vest = TinkerArmor.travelVest.getDefaultItem();
TConstructClientRegistry.registerManualModifier("dodge", vest.copy(), new ItemStack(Items.ender_eye), new ItemStack(Items.ender_pearl), new ItemStack(Items.sugar), null);
TConstructClientRegistry.registerManualModifier("stealth", vest.copy(), new ItemStack(Items.fermented_spider_eye), new ItemStack(Items.ender_eye), new ItemStack(Items.potionitem, 1, 8206), new ItemStack(Items.golden_carrot));
TConstructClientRegistry.registerManualModifier("nightvision", goggles.copy(),
new ItemStack(Items.flint_and_steel), new ItemStack(Items.potionitem, 1, 8198),
new ItemStack(Items.golden_carrot), null);
ItemStack wings = TinkerArmor.travelWings.getDefaultItem();
TConstructClientRegistry.registerManualModifier("doublejumpwings", wings.copy(), new ItemStack(Items.ghast_tear), new ItemStack(TinkerWorld.slimeGel, 1, 0), new ItemStack(Blocks.piston), null);
ItemStack vest = TinkerArmor.travelVest.getDefaultItem();
TConstructClientRegistry
.registerManualModifier("dodge", vest.copy(), new ItemStack(Items.ender_eye),
new ItemStack(Items.ender_pearl), new ItemStack(Items.sugar), null);
TConstructClientRegistry.registerManualModifier("stealth", vest.copy(),
new ItemStack(Items.fermented_spider_eye), new ItemStack(Items.ender_eye),
new ItemStack(Items.potionitem, 1, 8206), new ItemStack(Items.golden_carrot));
ItemStack[] recipe = new ItemStack[] { new ItemStack(TinkerWorld.slimeGel, 1, 0), new ItemStack(Items.ender_pearl), feather, feather, feather, feather, feather, feather };
ItemStack modWings = ModifyBuilder.instance.modifyItem(wings, recipe);
MantleClientRegistry.registerManualLargeRecipe("featherfall", modWings.copy(), feather, new ItemStack(TinkerWorld.slimeGel, 1, 0), feather, feather, wings.copy(), feather, feather, new ItemStack(Items.ender_pearl), feather);
ItemStack wings = TinkerArmor.travelWings.getDefaultItem();
TConstructClientRegistry.registerManualModifier("doublejumpwings", wings.copy(),
new ItemStack(Items.ghast_tear), new ItemStack(TinkerWorld.slimeGel, 1, 0),
new ItemStack(Blocks.piston), null);
ItemStack boots = TinkerArmor.travelBoots.getDefaultItem();
TConstructClientRegistry.registerManualModifier("doublejumpboots", boots.copy(), new ItemStack(Items.ghast_tear), new ItemStack(TinkerWorld.slimeGel, 1, 1), new ItemStack(Blocks.piston), null);
TConstructClientRegistry.registerManualModifier("waterwalk", boots.copy(), new ItemStack(Blocks.waterlily), new ItemStack(Blocks.waterlily));
TConstructClientRegistry.registerManualModifier("leadboots", boots.copy(), new ItemStack(Blocks.iron_block));
TConstructClientRegistry.registerManualModifier("slimysoles", boots.copy(), new ItemStack(TinkerWorld.slimePad, 1, 0), new ItemStack(TinkerWorld.slimePad, 1, 0));
ItemStack[] recipe = new ItemStack[] { new ItemStack(TinkerWorld.slimeGel, 1, 0),
new ItemStack(Items.ender_pearl), feather, feather, feather, feather, feather,
feather
};
ItemStack modWings = ModifyBuilder.instance.modifyItem(wings, recipe);
MantleClientRegistry.registerManualLargeRecipe("featherfall", modWings.copy(), feather,
new ItemStack(TinkerWorld.slimeGel, 1, 0), feather, feather, wings.copy(), feather,
feather, new ItemStack(Items.ender_pearl), feather);
ItemStack gloves = TinkerArmor.travelGlove.getDefaultItem();
TConstructClientRegistry.registerManualModifier("glovehaste", gloves.copy(), redstone, new ItemStack(Blocks.redstone_block));
//MantleClientRegistry.registerManualSmallRecipe("gloveclimb", gloves.copy(), new ItemStack(Items.slime_ball), new ItemStack(Blocks.web), new ItemStack(TinkerTools.materials, 1, 25), null);
TConstructClientRegistry.registerManualModifier("gloveknuckles", gloves.copy(), new ItemStack(Items.quartz), new ItemStack(Blocks.quartz_block, 1, Short.MAX_VALUE));
ItemStack boots = TinkerArmor.travelBoots.getDefaultItem();
TConstructClientRegistry.registerManualModifier("doublejumpboots", boots.copy(),
new ItemStack(Items.ghast_tear), new ItemStack(TinkerWorld.slimeGel, 1, 1),
new ItemStack(Blocks.piston), null);
TConstructClientRegistry
.registerManualModifier("waterwalk", boots.copy(), new ItemStack(Blocks.waterlily),
new ItemStack(Blocks.waterlily));
TConstructClientRegistry.registerManualModifier("leadboots", boots.copy(),
new ItemStack(Blocks.iron_block));
TConstructClientRegistry.registerManualModifier("slimysoles", boots.copy(),
new ItemStack(TinkerWorld.slimePad, 1, 0),
new ItemStack(TinkerWorld.slimePad, 1, 0));
// moss
ItemStack moss = new ItemStack(TinkerTools.materials, 1, 6);
TConstructClientRegistry.registerManualModifier("mossgoggles", goggles.copy(), moss.copy());
TConstructClientRegistry.registerManualModifier("mossvest", vest.copy(), moss.copy());
TConstructClientRegistry.registerManualModifier("mosswings", wings.copy(), moss.copy());
TConstructClientRegistry.registerManualModifier("mossboots", boots.copy(), moss.copy());
}
ItemStack gloves = TinkerArmor.travelGlove.getDefaultItem();
TConstructClientRegistry.registerManualModifier("glovehaste", gloves.copy(), redstone,
new ItemStack(Blocks.redstone_block));
//MantleClientRegistry.registerManualSmallRecipe("gloveclimb", gloves.copy(), new ItemStack(Items.slime_ball), new ItemStack(Blocks.web), new ItemStack(TinkerTools.materials, 1, 25), null);
TConstructClientRegistry
.registerManualModifier("gloveknuckles", gloves.copy(), new ItemStack(Items.quartz),
new ItemStack(Blocks.quartz_block, 1, Short.MAX_VALUE));
@Override
protected void registerGuiHandler ()
{
super.registerGuiHandler();
TProxyCommon.registerClientGuiHandler(inventoryGui, this);
TProxyCommon.registerClientGuiHandler(armorGuiID, this);
TProxyCommon.registerClientGuiHandler(knapsackGuiID, this);
}
// moss
ItemStack moss = new ItemStack(TinkerTools.materials, 1, 6);
TConstructClientRegistry.registerManualModifier("mossgoggles", goggles.copy(), moss.copy());
TConstructClientRegistry.registerManualModifier("mossvest", vest.copy(), moss.copy());
TConstructClientRegistry.registerManualModifier("mosswings", wings.copy(), moss.copy());
TConstructClientRegistry.registerManualModifier("mossboots", boots.copy(), moss.copy());
}
@Override
public Object getClientGuiElement (int ID, EntityPlayer player, World world, int x, int y, int z)
{
if (ID == ArmorProxyCommon.inventoryGui)
{
GuiInventory inventory = new GuiInventory(player);
return inventory;
}
if (ID == ArmorProxyCommon.armorGuiID)
{
ArmorProxyClient.armorExtended.init(Minecraft.getMinecraft().thePlayer);
return new ArmorExtendedGui(player.inventory, ArmorProxyClient.armorExtended);
}
if (ID == ArmorProxyCommon.knapsackGuiID)
{
ArmorProxyClient.knapsack.init(Minecraft.getMinecraft().thePlayer);
return new KnapsackGui(player.inventory, ArmorProxyClient.knapsack);
}
return null;
}
@Override
protected void registerGuiHandler() {
super.registerGuiHandler();
TProxyCommon.registerClientGuiHandler(inventoryGui, this);
TProxyCommon.registerClientGuiHandler(armorGuiID, this);
TProxyCommon.registerClientGuiHandler(knapsackGuiID, this);
}
@Override
public void registerTickHandler ()
{
FMLCommonHandler.instance().bus().register(new ArmorTickHandler());
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y,
int z) {
if (ID == ArmorProxyCommon.inventoryGui) {
GuiInventory inventory = new GuiInventory(player);
return inventory;
}
if (ID == ArmorProxyCommon.armorGuiID) {
ArmorProxyClient.armorExtended.init(Minecraft.getMinecraft().thePlayer);
return new ArmorExtendedGui(player.inventory, ArmorProxyClient.armorExtended);
}
if (ID == ArmorProxyCommon.knapsackGuiID) {
ArmorProxyClient.knapsack.init(Minecraft.getMinecraft().thePlayer);
return new KnapsackGui(player.inventory, ArmorProxyClient.knapsack);
}
return null;
}
/* Keybindings */
public static ArmorControls controlInstance;
@Override
public void registerTickHandler() {
FMLCommonHandler.instance().bus().register(new ArmorTickHandler());
}
@Override
public void registerKeys ()
{
uploadKeyBindingsToGame(Minecraft.getMinecraft().gameSettings, controlInstance);
/* Keybindings */
public static ArmorControls controlInstance;
TabRegistry.registerTab(new InventoryTabVanilla());
TabRegistry.registerTab(new InventoryTabArmorExtended());
TabRegistry.registerTab(new InventoryTabKnapsack());
}
@Override
public void registerKeys() {
controlInstance.registerKeys();
public void uploadKeyBindingsToGame (GameSettings settings, TKeyHandler keyhandler)
{
ArrayList<KeyBinding> harvestedBindings = Lists.newArrayList();
for (KeyBinding kb : keyhandler.keyBindings)
{
harvestedBindings.add(kb);
}
TabRegistry.registerTab(new InventoryTabVanilla());
TabRegistry.registerTab(new InventoryTabArmorExtended());
TabRegistry.registerTab(new InventoryTabKnapsack());
}
KeyBinding[] modKeyBindings = harvestedBindings.toArray(new KeyBinding[harvestedBindings.size()]);
KeyBinding[] allKeys = new KeyBinding[settings.keyBindings.length + modKeyBindings.length];
System.arraycopy(settings.keyBindings, 0, allKeys, 0, settings.keyBindings.length);
System.arraycopy(modKeyBindings, 0, allKeys, settings.keyBindings.length, modKeyBindings.length);
settings.keyBindings = allKeys;
settings.loadOptions();
}
Minecraft mc = Minecraft.getMinecraft();
Minecraft mc = Minecraft.getMinecraft();
private static final ResourceLocation hearts = new ResourceLocation("tinker",
"textures/gui/newhearts.png");
private static final ResourceLocation icons = new ResourceLocation("textures/gui/icons.png");
// public static int left_height = 39;
// public static int right_height = 39;
Random rand = new Random();
int updateCounter = 0;
private static final ResourceLocation hearts = new ResourceLocation("tinker", "textures/gui/newhearts.png");
private static final ResourceLocation icons = new ResourceLocation("textures/gui/icons.png");
// public static int left_height = 39;
// public static int right_height = 39;
Random rand = new Random();
int updateCounter = 0;
GameSettings gs = Minecraft.getMinecraft().gameSettings;
GameSettings gs = Minecraft.getMinecraft().gameSettings;
@SubscribeEvent
public void goggleZoom(FOVUpdateEvent event) {
if (ArmorControls.zoom) {
ItemStack helmet = event.entity.getCurrentArmor(3);
if (helmet != null && helmet.getItem() instanceof TravelGear) {
event.newfov = 0.3f;
}
}
//ItemStack feet = player.getCurrentArmor(0);
//event.newfov = 1.0f;
}
@SubscribeEvent
public void goggleZoom (FOVUpdateEvent event)
{
if (ArmorControls.zoom)
{
ItemStack helmet = event.entity.getCurrentArmor(3);
if (helmet != null && helmet.getItem() instanceof TravelGear)
{
event.newfov = 0.3f;
}
}
//ItemStack feet = player.getCurrentArmor(0);
//event.newfov = 1.0f;
}
/* HUD */
@SubscribeEvent
public void renderHealthbar(RenderGameOverlayEvent.Pre event) {
if (Loader.isModLoaded(
"rpghud")) // uses different display, displays health correctly by itself.
return;
/* HUD */
@SubscribeEvent
public void renderHealthbar (RenderGameOverlayEvent.Pre event)
{
if(Loader.isModLoaded("rpghud")) // uses different display, displays health correctly by itself.
return;
if (!Loader.isModLoaded("tukmc_Vz") || Loader
.isModLoaded("borderlands"))// Loader check to avoid conflicting
// with a GUI mod (thanks Vazkii!)
{
if (event.type == ElementType.HEALTH) {
updateCounter++;
if (!Loader.isModLoaded("tukmc_Vz") || Loader.isModLoaded("borderlands"))// Loader check to avoid conflicting
// with a GUI mod (thanks Vazkii!)
{
if (event.type == ElementType.HEALTH)
{
updateCounter++;
ScaledResolution scaledresolution = new ScaledResolution(this.mc,
this.mc.displayWidth, this.mc.displayHeight);
int scaledWidth = scaledresolution.getScaledWidth();
int scaledHeight = scaledresolution.getScaledHeight();
int xBasePos = scaledWidth / 2 - 91;
int yBasePos = scaledHeight - 39;
ScaledResolution scaledresolution = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight);
int scaledWidth = scaledresolution.getScaledWidth();
int scaledHeight = scaledresolution.getScaledHeight();
int xBasePos = scaledWidth / 2 - 91;
int yBasePos = scaledHeight - 39;
boolean highlight = mc.thePlayer.hurtResistantTime / 3 % 2 == 1;
boolean highlight = mc.thePlayer.hurtResistantTime / 3 % 2 == 1;
if (mc.thePlayer.hurtResistantTime < 10) {
highlight = false;
}
if (mc.thePlayer.hurtResistantTime < 10)
{
highlight = false;
}
IAttributeInstance attrMaxHealth = this.mc.thePlayer
.getEntityAttribute(SharedMonsterAttributes.maxHealth);
int health = MathHelper.ceiling_float_int(mc.thePlayer.getHealth());
int healthLast = MathHelper.ceiling_float_int(mc.thePlayer.prevHealth);
float healthMax = (float) attrMaxHealth.getAttributeValue();
if (healthMax > 20)
healthMax = 20;
float absorb = this.mc.thePlayer.getAbsorptionAmount();
IAttributeInstance attrMaxHealth = this.mc.thePlayer.getEntityAttribute(SharedMonsterAttributes.maxHealth);
int health = MathHelper.ceiling_float_int(mc.thePlayer.getHealth());
int healthLast = MathHelper.ceiling_float_int(mc.thePlayer.prevHealth);
float healthMax = (float) attrMaxHealth.getAttributeValue();
if (healthMax > 20)
healthMax = 20;
float absorb = this.mc.thePlayer.getAbsorptionAmount();
int healthRows = MathHelper.ceiling_float_int((healthMax + absorb) / 2.0F / 10.0F);
int rowHeight = Math.max(10 - (healthRows - 2), 3);
int healthRows = MathHelper.ceiling_float_int((healthMax + absorb) / 2.0F / 10.0F);
int rowHeight = Math.max(10 - (healthRows - 2), 3);
this.rand.setSeed((long) (updateCounter * 312871));
this.rand.setSeed((long) (updateCounter * 312871));
int left = scaledWidth / 2 - 91;
int top = scaledHeight - GuiIngameForge.left_height;
int left = scaledWidth / 2 - 91;
int top = scaledHeight - GuiIngameForge.left_height;
if (!GuiIngameForge.renderExperiance) {
top += 7;
yBasePos += 7;
}
if (!GuiIngameForge.renderExperiance)
{
top += 7;
yBasePos += 7;
}
int regen = -1;
if (mc.thePlayer.isPotionActive(Potion.regeneration)) {
regen = updateCounter % 25;
}
int regen = -1;
if (mc.thePlayer.isPotionActive(Potion.regeneration))
{
regen = updateCounter % 25;
}
final int TOP = 9 * (mc.theWorld.getWorldInfo().isHardcoreModeEnabled() ? 5 : 0);
final int BACKGROUND = (highlight ? 25 : 16);
int MARGIN = 16;
if (mc.thePlayer.isPotionActive(Potion.poison))
MARGIN += 36;
else if (mc.thePlayer.isPotionActive(Potion.wither))
MARGIN += 72;
float absorbRemaining = absorb;
final int TOP = 9 * (mc.theWorld.getWorldInfo().isHardcoreModeEnabled() ? 5 : 0);
final int BACKGROUND = (highlight ? 25 : 16);
int MARGIN = 16;
if (mc.thePlayer.isPotionActive(Potion.poison))
MARGIN += 36;
else if (mc.thePlayer.isPotionActive(Potion.wither))
MARGIN += 72;
float absorbRemaining = absorb;
for (int i = MathHelper.ceiling_float_int((healthMax + absorb) / 2.0F) - 1;
i >= 0; --i) {
int b0 = (highlight ? 1 : 0);
int row = MathHelper.ceiling_float_int((float) (i + 1) / 10.0F) - 1;
int x = left + i % 10 * 8;
int y = top - row * rowHeight;
for (int i = MathHelper.ceiling_float_int((healthMax + absorb) / 2.0F) - 1; i >= 0; --i)
{
int b0 = (highlight ? 1 : 0);
int row = MathHelper.ceiling_float_int((float) (i + 1) / 10.0F) - 1;
int x = left + i % 10 * 8;
int y = top - row * rowHeight;
if (health <= 4)
y += rand.nextInt(2);
if (i == regen)
y -= 2;
if (health <= 4)
y += rand.nextInt(2);
if (i == regen)
y -= 2;
drawTexturedModalRect(x, y, BACKGROUND, TOP, 9, 9);
drawTexturedModalRect(x, y, BACKGROUND, TOP, 9, 9);
if (highlight) {
if (i * 2 + 1 < healthLast)
drawTexturedModalRect(x, y, MARGIN + 54, TOP, 9, 9); // 6
else if (i * 2 + 1 == healthLast)
drawTexturedModalRect(x, y, MARGIN + 63, TOP, 9, 9); // 7
}
if (highlight)
{
if (i * 2 + 1 < healthLast)
drawTexturedModalRect(x, y, MARGIN + 54, TOP, 9, 9); // 6
else if (i * 2 + 1 == healthLast)
drawTexturedModalRect(x, y, MARGIN + 63, TOP, 9, 9); // 7
}
if (absorbRemaining > 0.0F) {
if (absorbRemaining == absorb && absorb % 2.0F == 1.0F)
drawTexturedModalRect(x, y, MARGIN + 153, TOP, 9, 9); // 17
else
drawTexturedModalRect(x, y, MARGIN + 144, TOP, 9, 9); // 16
absorbRemaining -= 2.0F;
}
else {
if (i * 2 + 1 < health)
drawTexturedModalRect(x, y, MARGIN + 36, TOP, 9, 9); // 4
else if (i * 2 + 1 == health)
drawTexturedModalRect(x, y, MARGIN + 45, TOP, 9, 9); // 5
}
}
if (absorbRemaining > 0.0F)
{
if (absorbRemaining == absorb && absorb % 2.0F == 1.0F)
drawTexturedModalRect(x, y, MARGIN + 153, TOP, 9, 9); // 17
else
drawTexturedModalRect(x, y, MARGIN + 144, TOP, 9, 9); // 16
absorbRemaining -= 2.0F;
}
else
{
if (i * 2 + 1 < health)
drawTexturedModalRect(x, y, MARGIN + 36, TOP, 9, 9); // 4
else if (i * 2 + 1 == health)
drawTexturedModalRect(x, y, MARGIN + 45, TOP, 9, 9); // 5
}
}
int potionOffset = 0;
PotionEffect potion = mc.thePlayer.getActivePotionEffect(Potion.wither);
if (potion != null)
potionOffset = 18;
potion = mc.thePlayer.getActivePotionEffect(Potion.poison);
if (potion != null)
potionOffset = 9;
int potionOffset = 0;
PotionEffect potion = mc.thePlayer.getActivePotionEffect(Potion.wither);
if (potion != null)
potionOffset = 18;
potion = mc.thePlayer.getActivePotionEffect(Potion.poison);
if (potion != null)
potionOffset = 9;
if (mc.theWorld.getWorldInfo().isHardcoreModeEnabled())
potionOffset += 27;
// Extra hearts
this.mc.getTextureManager().bindTexture(hearts);
// Extra hearts
this.mc.getTextureManager().bindTexture(hearts);
int hp = MathHelper.ceiling_float_int(this.mc.thePlayer.getHealth());
for (int iter = 0; iter < hp / 20; iter++)
{
int renderHearts = (hp - 20 * (iter + 1)) / 2;
if (renderHearts > 10)
renderHearts = 10;
for (int i = 0; i < renderHearts; i++)
{
int y = 0;
if (i == regen)
y -= 2;
this.drawTexturedModalRect(xBasePos + 8 * i, yBasePos + y, 0 + 18 * iter, potionOffset, 9, 9);
}
if (hp % 2 == 1 && renderHearts < 10)
{
this.drawTexturedModalRect(xBasePos + 8 * renderHearts, yBasePos, 9 + 18 * iter, potionOffset, 9, 9);
}
}
int hp = MathHelper.ceiling_float_int(this.mc.thePlayer.getHealth());
for (int iter = 0; iter < hp / 20; iter++) {
int renderHearts = (hp - 20 * (iter + 1)) / 2;
if (renderHearts > 10)
renderHearts = 10;
for (int i = 0; i < renderHearts; i++) {
int y = 0;
if (i == regen)
y -= 2;
this.drawTexturedModalRect(xBasePos + 8 * i, yBasePos + y, 0 + 18 * iter,
potionOffset, 9, 9);
}
if (hp % 2 == 1 && renderHearts < 10) {
this.drawTexturedModalRect(xBasePos + 8 * renderHearts, yBasePos,
9 + 18 * iter, potionOffset, 9, 9);
}
}
this.mc.getTextureManager().bindTexture(icons);
GuiIngameForge.left_height += 10;
if (absorb > 0)
GuiIngameForge.left_height += 10;
this.mc.getTextureManager().bindTexture(icons);
GuiIngameForge.left_height += 10;
if (absorb > 0)
GuiIngameForge.left_height += 10;
event.setCanceled(true);
if (event.type == ElementType.CROSSHAIRS && gs.thirdPersonView != 0)
{
event.setCanceled(true);
}
}
}
}
event.setCanceled(true);
if (event.type == ElementType.CROSSHAIRS && gs.thirdPersonView != 0) {
event.setCanceled(true);
}
}
}
}
public void drawTexturedModalRect (int par1, int par2, int par3, int par4, int par5, int par6)
{
float f = 0.00390625F;
float f1 = 0.00390625F;
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.addVertexWithUV((double) (par1 + 0), (double) (par2 + par6), (double) this.zLevel, (double) ((float) (par3 + 0) * f), (double) ((float) (par4 + par6) * f1));
tessellator.addVertexWithUV((double) (par1 + par5), (double) (par2 + par6), (double) this.zLevel, (double) ((float) (par3 + par5) * f), (double) ((float) (par4 + par6) * f1));
tessellator.addVertexWithUV((double) (par1 + par5), (double) (par2 + 0), (double) this.zLevel, (double) ((float) (par3 + par5) * f), (double) ((float) (par4 + 0) * f1));
tessellator.addVertexWithUV((double) (par1 + 0), (double) (par2 + 0), (double) this.zLevel, (double) ((float) (par3 + 0) * f), (double) ((float) (par4 + 0) * f1));
tessellator.draw();
}
public void drawTexturedModalRect(int par1, int par2, int par3, int par4, int par5, int par6) {
float f = 0.00390625F;
float f1 = 0.00390625F;
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator
.addVertexWithUV((double) (par1 + 0), (double) (par2 + par6), (double) this.zLevel,
(double) ((float) (par3 + 0) * f), (double) ((float) (par4 + par6) * f1));
tessellator.addVertexWithUV((double) (par1 + par5), (double) (par2 + par6),
(double) this.zLevel, (double) ((float) (par3 + par5) * f),
(double) ((float) (par4 + par6) * f1));
tessellator
.addVertexWithUV((double) (par1 + par5), (double) (par2 + 0), (double) this.zLevel,
(double) ((float) (par3 + par5) * f), (double) ((float) (par4 + 0) * f1));
tessellator.addVertexWithUV((double) (par1 + 0), (double) (par2 + 0), (double) this.zLevel,
(double) ((float) (par3 + 0) * f), (double) ((float) (par4 + 0) * f1));
tessellator.draw();
}
double zLevel = 0;
double zLevel = 0;
/* Armor rendering */
@SubscribeEvent
public void adjustArmor (RenderPlayerEvent.SetArmorModel event)
{
switch (event.slot)
{
case 1:
ArmorProxyClient.vest.onGround = event.renderer.modelBipedMain.onGround;
ArmorProxyClient.vest.isRiding = event.renderer.modelBipedMain.isRiding;
ArmorProxyClient.vest.isChild = event.renderer.modelBipedMain.isChild;
ArmorProxyClient.vest.isSneak = event.renderer.modelBipedMain.isSneak;
case 2:
ArmorProxyClient.wings.onGround = event.renderer.modelBipedMain.onGround;
ArmorProxyClient.wings.isRiding = event.renderer.modelBipedMain.isRiding;
ArmorProxyClient.wings.isChild = event.renderer.modelBipedMain.isChild;
ArmorProxyClient.wings.isSneak = event.renderer.modelBipedMain.isSneak;
/* Armor rendering */
@SubscribeEvent
public void adjustArmor(RenderPlayerEvent.SetArmorModel event) {
switch (event.slot) {
case 1:
ArmorProxyClient.vest.onGround = event.renderer.modelBipedMain.onGround;
ArmorProxyClient.vest.isRiding = event.renderer.modelBipedMain.isRiding;
ArmorProxyClient.vest.isChild = event.renderer.modelBipedMain.isChild;
ArmorProxyClient.vest.isSneak = event.renderer.modelBipedMain.isSneak;
case 2:
ArmorProxyClient.wings.onGround = event.renderer.modelBipedMain.onGround;
ArmorProxyClient.wings.isRiding = event.renderer.modelBipedMain.isRiding;
ArmorProxyClient.wings.isChild = event.renderer.modelBipedMain.isChild;
ArmorProxyClient.wings.isSneak = event.renderer.modelBipedMain.isSneak;
ArmorProxyClient.glove.onGround = event.renderer.modelBipedMain.onGround;
ArmorProxyClient.glove.isRiding = event.renderer.modelBipedMain.isRiding;
ArmorProxyClient.glove.isChild = event.renderer.modelBipedMain.isChild;
ArmorProxyClient.glove.isSneak = event.renderer.modelBipedMain.isSneak;
ArmorProxyClient.glove.heldItemLeft = event.renderer.modelBipedMain.heldItemLeft;
ArmorProxyClient.glove.heldItemRight = event.renderer.modelBipedMain.heldItemRight;
ArmorProxyClient.glove.onGround = event.renderer.modelBipedMain.onGround;
ArmorProxyClient.glove.isRiding = event.renderer.modelBipedMain.isRiding;
ArmorProxyClient.glove.isChild = event.renderer.modelBipedMain.isChild;
ArmorProxyClient.glove.isSneak = event.renderer.modelBipedMain.isSneak;
ArmorProxyClient.glove.heldItemLeft = event.renderer.modelBipedMain.heldItemLeft;
ArmorProxyClient.glove.heldItemRight = event.renderer.modelBipedMain.heldItemRight;
ArmorProxyClient.belt.onGround = event.renderer.modelBipedMain.onGround;
ArmorProxyClient.belt.isRiding = event.renderer.modelBipedMain.isRiding;
ArmorProxyClient.belt.isChild = event.renderer.modelBipedMain.isChild;
ArmorProxyClient.belt.isSneak = event.renderer.modelBipedMain.isSneak;
ArmorProxyClient.belt.onGround = event.renderer.modelBipedMain.onGround;
ArmorProxyClient.belt.isRiding = event.renderer.modelBipedMain.isRiding;
ArmorProxyClient.belt.isChild = event.renderer.modelBipedMain.isChild;
ArmorProxyClient.belt.isSneak = event.renderer.modelBipedMain.isSneak;
renderArmorExtras(event);
renderArmorExtras(event);
break;
case 3:
ArmorProxyClient.bootbump.onGround = event.renderer.modelBipedMain.onGround;
ArmorProxyClient.bootbump.isRiding = event.renderer.modelBipedMain.isRiding;
ArmorProxyClient.bootbump.isChild = event.renderer.modelBipedMain.isChild;
ArmorProxyClient.bootbump.isSneak = event.renderer.modelBipedMain.isSneak;
break;
}
}
break;
case 3:
ArmorProxyClient.bootbump.onGround = event.renderer.modelBipedMain.onGround;
ArmorProxyClient.bootbump.isRiding = event.renderer.modelBipedMain.isRiding;
ArmorProxyClient.bootbump.isChild = event.renderer.modelBipedMain.isChild;
ArmorProxyClient.bootbump.isSneak = event.renderer.modelBipedMain.isSneak;
break;
}
}
void renderArmorExtras (RenderPlayerEvent.SetArmorModel event)
{
float partialTick = event.partialRenderTick;
void renderArmorExtras(RenderPlayerEvent.SetArmorModel event) {
float partialTick = event.partialRenderTick;
EntityPlayer player = event.entityPlayer;
EntityPlayer player = event.entityPlayer;
// todo: synchronize extra armor with other clients. Until then, only draw locally
if(player != Minecraft.getMinecraft().thePlayer)
return;
// todo: synchronize extra armor with other clients. Until then, only draw locally
if (player != Minecraft.getMinecraft().thePlayer)
return;
float posX = (float) (player.lastTickPosX
+ (player.posX - player.lastTickPosX) * partialTick);
float posY = (float) (player.lastTickPosY
+ (player.posY - player.lastTickPosY) * partialTick);
float posZ = (float) (player.lastTickPosZ
+ (player.posZ - player.lastTickPosZ) * partialTick);
float posX = (float) (player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTick);
float posY = (float) (player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTick);
float posZ = (float) (player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTick);
float yawOffset = this
.interpolateRotation(player.prevRenderYawOffset, player.renderYawOffset,
partialTick);
float yawRotation = this
.interpolateRotation(player.prevRotationYawHead, player.rotationYawHead,
partialTick);
float pitch;
final float zeropointsixtwofive = 0.0625F;
float yawOffset = this.interpolateRotation(player.prevRenderYawOffset, player.renderYawOffset, partialTick);
float yawRotation = this.interpolateRotation(player.prevRotationYawHead, player.rotationYawHead, partialTick);
float pitch;
final float zeropointsixtwofive = 0.0625F;
if (player.isRiding() && player.ridingEntity instanceof EntityLivingBase) {
EntityLivingBase entitylivingbase1 = (EntityLivingBase) player.ridingEntity;
yawOffset = this.interpolateRotation(entitylivingbase1.prevRenderYawOffset,
entitylivingbase1.renderYawOffset, partialTick);
pitch = MathHelper.wrapAngleTo180_float(yawRotation - yawOffset);
if (player.isRiding() && player.ridingEntity instanceof EntityLivingBase)
{
EntityLivingBase entitylivingbase1 = (EntityLivingBase) player.ridingEntity;
yawOffset = this.interpolateRotation(entitylivingbase1.prevRenderYawOffset, entitylivingbase1.renderYawOffset, partialTick);
pitch = MathHelper.wrapAngleTo180_float(yawRotation - yawOffset);
if (pitch < -85.0F) {
pitch = -85.0F;
}
if (pitch < -85.0F)
{
pitch = -85.0F;
}
if (pitch >= 85.0F) {
pitch = 85.0F;
}
if (pitch >= 85.0F)
{
pitch = 85.0F;
}
yawOffset = yawRotation - pitch;
yawOffset = yawRotation - pitch;
if (pitch * pitch > 2500.0F) {
yawOffset += pitch * 0.2F;
}
}
if (pitch * pitch > 2500.0F)
{
yawOffset += pitch * 0.2F;
}
}
pitch = this.handleRotationFloat(player, partialTick);
float bodyRotation = player.prevRotationPitch
+ (player.rotationPitch - player.prevRotationPitch) * partialTick;
float limbSwing = player.prevLimbSwingAmount
+ (player.limbSwingAmount - player.prevLimbSwingAmount) * partialTick;
float limbSwingMod = player.limbSwing - player.limbSwingAmount * (1.0F - partialTick);
//TPlayerStats stats = TPlayerStats.get(player);
ArmorExtended armor = ArmorProxyClient.armorExtended; //TODO: Do this for every player, not just the client
if (armor.inventory[1] != null) {
Item item = armor.inventory[1].getItem();
ModelBiped model = item.getArmorModel(player, armor.inventory[1], 4);
pitch = this.handleRotationFloat(player, partialTick);
float bodyRotation = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * partialTick;
float limbSwing = player.prevLimbSwingAmount + (player.limbSwingAmount - player.prevLimbSwingAmount) * partialTick;
float limbSwingMod = player.limbSwing - player.limbSwingAmount * (1.0F - partialTick);
//TPlayerStats stats = TPlayerStats.get(player);
ArmorExtended armor = ArmorProxyClient.armorExtended; //TODO: Do this for every player, not just the client
if (armor.inventory[1] != null)
{
Item item = armor.inventory[1].getItem();
ModelBiped model = item.getArmorModel(player, armor.inventory[1], 4);
if (item instanceof IAccessoryModel) {
this.mc.getTextureManager().bindTexture(
((IAccessoryModel) item).getWearbleTexture(player, armor.inventory[1], 1));
model.setLivingAnimations(player, limbSwingMod, limbSwing, partialTick);
model.render(player, limbSwingMod, limbSwing, pitch, yawRotation - yawOffset,
bodyRotation, zeropointsixtwofive);
}
}
if (item instanceof IAccessoryModel)
{
this.mc.getTextureManager().bindTexture(((IAccessoryModel) item).getWearbleTexture(player, armor.inventory[1], 1));
model.setLivingAnimations(player, limbSwingMod, limbSwing, partialTick);
model.render(player, limbSwingMod, limbSwing, pitch, yawRotation - yawOffset, bodyRotation, zeropointsixtwofive);
}
}
if (armor.inventory[3] != null) {
Item item = armor.inventory[3].getItem();
ModelBiped model = item.getArmorModel(player, armor.inventory[3], 5);
if (armor.inventory[3] != null)
{
Item item = armor.inventory[3].getItem();
ModelBiped model = item.getArmorModel(player, armor.inventory[3], 5);
if (item instanceof IAccessoryModel) {
this.mc.getTextureManager().bindTexture(
((IAccessoryModel) item).getWearbleTexture(player, armor.inventory[1], 1));
model.setLivingAnimations(player, limbSwingMod, limbSwing, partialTick);
model.render(player, limbSwingMod, limbSwing, pitch, yawRotation - yawOffset,
bodyRotation, zeropointsixtwofive);
}
}
}
if (item instanceof IAccessoryModel)
{
this.mc.getTextureManager().bindTexture(((IAccessoryModel) item).getWearbleTexture(player, armor.inventory[1], 1));
model.setLivingAnimations(player, limbSwingMod, limbSwing, partialTick);
model.render(player, limbSwingMod, limbSwing, pitch, yawRotation - yawOffset, bodyRotation, zeropointsixtwofive);
}
}
}
private float interpolateRotation(float par1, float par2, float par3) {
float f3;
private float interpolateRotation (float par1, float par2, float par3)
{
float f3;
for (f3 = par2 - par1; f3 < -180.0F; f3 += 360.0F) {
;
}
for (f3 = par2 - par1; f3 < -180.0F; f3 += 360.0F)
{
;
}
while (f3 >= 180.0F) {
f3 -= 360.0F;
}
while (f3 >= 180.0F)
{
f3 -= 360.0F;
}
return par1 + par3 * f3;
}
return par1 + par3 * f3;
}
protected float handleRotationFloat (EntityLivingBase par1EntityLivingBase, float par2)
{
return (float) par1EntityLivingBase.ticksExisted + par2;
}
protected float handleRotationFloat(EntityLivingBase par1EntityLivingBase, float par2) {
return (float) par1EntityLivingBase.ticksExisted + par2;
}
}
+180 -149
View File
@@ -1,183 +1,214 @@
package tconstruct.client;
import cpw.mods.fml.common.gameevent.TickEvent.Type;
import cpw.mods.fml.client.registry.ClientRegistry;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent;
import mantle.common.network.AbstractPacket;
import modwarriors.notenoughkeys.api.Api;
import modwarriors.notenoughkeys.api.KeyBindingPressedEvent;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.potion.Potion;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import tconstruct.TConstruct;
import tconstruct.armor.*;
import tconstruct.armor.ArmorProxyClient;
import tconstruct.armor.ArmorProxyCommon;
import tconstruct.armor.PlayerAbilityHelper;
import tconstruct.armor.items.TravelGear;
import tconstruct.util.network.*;
import tconstruct.util.network.AccessoryInventoryPacket;
import tconstruct.util.network.BeltPacket;
import tconstruct.util.network.DoubleJumpPacket;
import tconstruct.util.network.GogglePacket;
public class ArmorControls 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;
public class ArmorControls {
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
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;
int currentTab = 1;
// boolean onStilts = false;
// boolean onStilts = false;
public ArmorControls()
{
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 final KeyBinding[] keys;
private static KeyBinding[] getVanillaKeyBindings ()
{
mc = Minecraft.getMinecraft();
jumpKey = mc.gameSettings.keyBindJump;
invKey = mc.gameSettings.keyBindInventory;
return new KeyBinding[] { jumpKey, invKey };
}
public ArmorControls() {
getVanillaKeyBindings();
this.keys = new KeyBinding[] {
ArmorControls.armorKey,
ArmorControls.toggleGoggles,
ArmorControls.beltSwap,
ArmorControls.zoomKey,
null, null
};
@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 == jumpKey) // Double jump
{
if (mc.thePlayer.capabilities.isCreativeMode)
return;
public void registerKeys() {
// Register bindings
for (KeyBinding key : this.keys) {
if (key != null)
ClientRegistry.registerKeyBinding(key);
}
// Add mc keys
this.keys[4] = ArmorControls.jumpKey;
this.keys[5] = ArmorControls.invKey;
}
if (jumping && midairJumps > 0)
{
mc.thePlayer.motionY = 0.42D;
mc.thePlayer.fallDistance = 0;
private static KeyBinding[] getVanillaKeyBindings() {
mc = Minecraft.getMinecraft();
jumpKey = mc.gameSettings.keyBindJump;
invKey = mc.gameSettings.keyBindInventory;
return new KeyBinding[] { jumpKey, invKey };
}
if (mc.thePlayer.isPotionActive(Potion.jump))
{
mc.thePlayer.motionY += (double) ((float) (mc.thePlayer.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F);
}
@SubscribeEvent
public void mouseEvent(InputEvent.MouseInputEvent event) {
if (!Api.isLoaded())
this.checkKeys();
}
midairJumps--;
resetFallDamage();
}
@SubscribeEvent
public void keyEvent(InputEvent.KeyInputEvent event) {
if (!Api.isLoaded())
this.checkKeys();
}
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");
}
}
}
@SubscribeEvent
public void keyEventSpecial(KeyBindingPressedEvent event) {
this.keyPressed(event.keyBinding);
}
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;
PlayerAbilityHelper.toggleGoggles(mc.thePlayer, activeGoggles);
toggleGoggles();
}
}
if (kb == beltSwap)
{
if (ArmorProxyClient.armorExtended.inventory[3] != null)
{
PlayerAbilityHelper.swapBelt(mc.thePlayer, ArmorProxyClient.armorExtended);
toggleBelt();
}
}
if (kb == zoomKey)
zoom = !zoom;
}
}
}
private void checkKeys() {
for (KeyBinding key : this.keys) {
if (this.isKeyActive(key.getKeyCode())) {
this.keyPressed(key);
}
}
}
@Override
public void keyUp (Type types, KeyBinding kb, boolean tickEnd)
{
// landOnGround();
}
private boolean isKeyActive(int keyCode) {
if (keyCode < 0)
return Mouse.isButtonDown(keyCode + 100);
else
return Keyboard.isKeyDown(keyCode);
}
public void landOnGround ()
{
midairJumps = 0;
jumping = false;
}
private void keyPressed(KeyBinding key) {
if (key == ArmorControls.armorKey) {
openArmorGui();
}
if (key == ArmorControls.jumpKey) {
if (mc.thePlayer.capabilities.isCreativeMode)
return;
public void resetControls ()
{
midairJumps = 0;
jumping = false;
climbing = false;
onGround = false;
}
if (jumping && midairJumps > 0) {
mc.thePlayer.motionY = 0.42D;
mc.thePlayer.fallDistance = 0;
void resetFallDamage ()
{
AbstractPacket packet = new DoubleJumpPacket();
updateServer(packet);
}
if (mc.thePlayer.isPotionActive(Potion.jump)) {
mc.thePlayer.motionY += (double) (
(float) (mc.thePlayer.getActivePotionEffect(Potion.jump).getAmplifier()
+ 1) * 0.1F);
}
public static void openArmorGui ()
{
AbstractPacket packet = new AccessoryInventoryPacket(ArmorProxyCommon.armorGuiID);
updateServer(packet);
}
midairJumps--;
resetFallDamage();
}
public static void openKnapsackGui ()
{
AbstractPacket packet = new AccessoryInventoryPacket(ArmorProxyCommon.knapsackGuiID);
updateServer(packet);
}
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 (key == ArmorControls.toggleGoggles) {
ItemStack goggles = mc.thePlayer.getCurrentArmor(3);
if (goggles != null && goggles
.getItem() instanceof TravelGear) //TODO: Genericize this
{
activeGoggles = !activeGoggles;
PlayerAbilityHelper.toggleGoggles(mc.thePlayer, activeGoggles);
toggleGoggles();
}
}
if (key == ArmorControls.beltSwap) {
if (ArmorProxyClient.armorExtended.inventory[3] != null) {
PlayerAbilityHelper.swapBelt(mc.thePlayer, ArmorProxyClient.armorExtended);
toggleBelt();
}
}
if (key == ArmorControls.zoomKey) {
zoom = !zoom;
}
}
}
private void toggleGoggles ()
{
AbstractPacket packet = new GogglePacket(activeGoggles);
updateServer(packet);
}
public void landOnGround() {
midairJumps = 0;
jumping = false;
}
private void toggleBelt ()
{
AbstractPacket packet = new BeltPacket();
updateServer(packet);
}
public void resetControls() {
midairJumps = 0;
jumping = false;
climbing = false;
onGround = false;
}
static void updateServer (AbstractPacket abstractPacket)
{
TConstruct.packetPipeline.sendToServer(abstractPacket);
}
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);
}
}
@@ -1,142 +0,0 @@
package tconstruct.client;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import cpw.mods.fml.common.gameevent.TickEvent.Type;
import cpw.mods.fml.relauncher.Side;
import java.util.EnumSet;
import net.minecraft.client.settings.KeyBinding;
import org.lwjgl.input.*;
public abstract class TKeyHandler
{
public KeyBinding[] keyBindings;
public KeyBinding[] vKeyBindings;
public boolean[] keyDown;
public boolean[] repeatings;
public boolean[] vRepeatings;
public boolean isDummy;
/**
* Pass an array of keybindings and a repeat flag for each one
*
* @param keyBindings
* @param repeatings
*/
public TKeyHandler(KeyBinding[] keyBindings, boolean[] repeatings, KeyBinding[] vanillaKeys, boolean[] vanillaRepeatings)
{
assert keyBindings.length == repeatings.length : "You need to pass two arrays of identical length";
assert vanillaKeys.length == vanillaRepeatings.length : "You need to pass two arrays of identical length";
this.keyBindings = keyBindings;
this.repeatings = repeatings;
this.vKeyBindings = vanillaKeys;
this.vRepeatings = vanillaRepeatings;
this.keyDown = new boolean[keyBindings.length + vanillaKeys.length];
}
/**
* Register the keys into the system. You will do your own keyboard
* management elsewhere. No events will fire if you use this method
*
* @param keyBindings
*/
public TKeyHandler(KeyBinding[] keyBindings)
{
this.keyBindings = keyBindings;
this.isDummy = true;
}
public KeyBinding[] getKeyBindings ()
{
return this.keyBindings;
}
@SubscribeEvent
public void onTick (ClientTickEvent event)
{
if (event.side == Side.CLIENT)
{
if (event.phase == Phase.START)
keyTick(event.type, false);
else if (event.phase == Phase.END)
keyTick(event.type, true);
}
}
public void keyTick (Type type, boolean tickEnd)
{
for (int i = 0; i < keyBindings.length; i++)
{
KeyBinding keyBinding = keyBindings[i];
int keyCode = keyBinding.getKeyCode();
boolean state = (keyCode < 0 ? Mouse.isButtonDown(keyCode + 100) : Keyboard.isKeyDown(keyCode));
if (state != keyDown[i] || (state && repeatings[i]))
{
if (state)
{
keyDown(type, keyBinding, tickEnd, state != keyDown[i]);
}
else
{
keyUp(type, keyBinding, tickEnd);
}
if (tickEnd)
{
keyDown[i] = state;
}
}
}
for (int i = 0; i < vKeyBindings.length; i++)
{
KeyBinding keyBinding = vKeyBindings[i];
int keyCode = keyBinding.getKeyCode();
boolean state = (keyCode < 0 ? Mouse.isButtonDown(keyCode + 100) : Keyboard.isKeyDown(keyCode));
if (state != keyDown[i + keyBindings.length] || (state && vRepeatings[i]))
{
if (state)
{
keyDown(type, keyBinding, tickEnd, state != keyDown[i + keyBindings.length]);
}
else
{
keyUp(type, keyBinding, tickEnd);
}
if (tickEnd)
{
keyDown[i + keyBindings.length] = state;
}
}
}
}
/**
* Called when the key is first in the down position on any tick from the
* {@link #ticks()} set. Will be called subsequently with isRepeat set to
* true
*
* @see #keyUp(EnumSet, KeyBinding, boolean)
*
* @param types
* the type(s) of tick that fired when this key was first down
* @param tickEnd
* was it an end or start tick which fired the key
* @param isRepeat
* is it a repeat key event
*/
public abstract void keyDown (Type types, KeyBinding kb, boolean tickEnd, boolean isRepeat);
/**
* Fired once when the key changes state from down to up
*
* @see #keyDown(EnumSet, KeyBinding, boolean, boolean)
*
* @param types
* the type(s) of tick that fired when this key was first down
* @param tickEnd
* was it an end or start tick which fired the key
*/
public abstract void keyUp (Type types, KeyBinding kb, boolean tickEnd);
}