2013-07-26 21:18:53 -07:00
|
|
|
package tconstruct.client;
|
|
|
|
|
|
2013-10-19 20:40:00 +01:00
|
|
|
import cpw.mods.fml.common.Loader;
|
2014-01-01 08:54:06 -05:00
|
|
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
2013-09-21 19:55:57 +10:00
|
|
|
import cpw.mods.fml.relauncher.*;
|
2013-11-29 23:16:32 -05:00
|
|
|
|
2013-08-01 20:54:56 -07:00
|
|
|
import java.util.Random;
|
2013-11-29 23:16:32 -05:00
|
|
|
|
2013-07-26 21:18:53 -07:00
|
|
|
import net.minecraft.block.Block;
|
|
|
|
|
import net.minecraft.client.Minecraft;
|
2013-09-21 19:55:57 +10:00
|
|
|
import net.minecraft.client.audio.SoundManager;
|
2013-07-26 21:18:53 -07:00
|
|
|
import net.minecraft.client.gui.ScaledResolution;
|
|
|
|
|
import net.minecraft.client.model.ModelBiped;
|
|
|
|
|
import net.minecraft.client.renderer.Tessellator;
|
2013-12-31 16:37:46 -05:00
|
|
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
2013-11-19 20:57:52 -08:00
|
|
|
import net.minecraft.client.renderer.texture.TextureMap;
|
2013-09-21 19:55:57 +10:00
|
|
|
import net.minecraft.entity.*;
|
2014-01-01 08:54:06 -05:00
|
|
|
import net.minecraft.entity.ai.attributes.IAttributeInstance;
|
2013-12-31 16:37:46 -05:00
|
|
|
import net.minecraft.init.Items;
|
2013-12-05 00:03:01 -08:00
|
|
|
import net.minecraft.item.Item;
|
2013-09-21 19:55:57 +10:00
|
|
|
import net.minecraft.potion.*;
|
|
|
|
|
import net.minecraft.util.*;
|
2013-12-05 00:03:01 -08:00
|
|
|
import net.minecraftforge.client.ForgeHooksClient;
|
2013-08-01 20:54:56 -07:00
|
|
|
import net.minecraftforge.client.GuiIngameForge;
|
2013-09-21 19:55:57 +10:00
|
|
|
import net.minecraftforge.client.event.*;
|
2013-08-01 20:54:56 -07:00
|
|
|
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
|
2013-08-07 19:06:26 -07:00
|
|
|
import net.minecraftforge.client.event.sound.SoundLoadEvent;
|
2013-09-21 19:55:57 +10:00
|
|
|
import net.minecraftforge.fluids.*;
|
2013-07-26 21:18:53 -07:00
|
|
|
import tconstruct.TConstruct;
|
|
|
|
|
import tconstruct.client.armor.WingModel;
|
|
|
|
|
import tconstruct.common.TContent;
|
2013-11-29 23:16:32 -05:00
|
|
|
import tconstruct.common.TRepo;
|
2013-07-26 21:18:53 -07:00
|
|
|
import tconstruct.util.player.TPlayerStats;
|
|
|
|
|
|
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
|
|
|
public class TClientEvents
|
|
|
|
|
{
|
|
|
|
|
Minecraft mc = Minecraft.getMinecraft();
|
|
|
|
|
|
|
|
|
|
/* Sounds */
|
2013-07-28 19:56:01 -07:00
|
|
|
|
2013-08-07 19:06:26 -07:00
|
|
|
boolean initSounds;
|
2013-07-28 19:56:01 -07:00
|
|
|
|
2014-01-01 08:54:06 -05:00
|
|
|
@SubscribeEvent
|
2013-07-26 21:18:53 -07:00
|
|
|
public void onSound (SoundLoadEvent event)
|
|
|
|
|
{
|
2013-07-28 19:56:01 -07:00
|
|
|
if (!initSounds)
|
2013-07-26 21:18:53 -07:00
|
|
|
{
|
2013-07-28 19:56:01 -07:00
|
|
|
initSounds = true;
|
|
|
|
|
try
|
|
|
|
|
{
|
2013-09-21 19:55:57 +10:00
|
|
|
SoundManager soundmanager = event.manager;
|
|
|
|
|
soundmanager.addSound("tinker:frypan_hit.ogg");
|
|
|
|
|
soundmanager.addSound("tinker:little_saw.ogg");
|
|
|
|
|
soundmanager.addSound("tinker:launcher_clank.ogg");
|
2013-10-12 23:46:35 +01:00
|
|
|
TConstruct.logger.info("Successfully loaded sounds.");
|
2013-07-28 19:56:01 -07:00
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
2014-01-08 00:45:09 -05:00
|
|
|
TConstruct.logger.error("Failed to register one or more sounds");
|
2013-07-28 19:56:01 -07:00
|
|
|
}
|
2013-07-26 21:18:53 -07:00
|
|
|
}
|
2013-08-11 12:23:49 -07:00
|
|
|
}
|
2013-07-26 21:18:53 -07:00
|
|
|
|
|
|
|
|
/* Liquids */
|
2013-11-19 20:57:52 -08:00
|
|
|
|
2013-12-31 16:37:46 -05:00
|
|
|
IIcon[] stillIcons = new IIcon[2];
|
|
|
|
|
IIcon[] flowIcons = new IIcon[2];
|
2013-11-19 20:57:52 -08:00
|
|
|
|
2014-01-01 08:54:06 -05:00
|
|
|
@SubscribeEvent
|
2013-11-19 20:57:52 -08:00
|
|
|
public void preStitch (TextureStitchEvent.Pre event)
|
|
|
|
|
{
|
|
|
|
|
TextureMap register = event.map;
|
|
|
|
|
if (register.textureType == 0)
|
|
|
|
|
{
|
|
|
|
|
stillIcons[0] = register.registerIcon("tinker:liquid_pigiron");
|
|
|
|
|
flowIcons[0] = register.registerIcon("tinker:liquid_pigiron");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-01 08:54:06 -05:00
|
|
|
@SubscribeEvent
|
2013-07-26 21:18:53 -07:00
|
|
|
public void postStitch (TextureStitchEvent.Post event)
|
|
|
|
|
{
|
2013-11-19 20:57:52 -08:00
|
|
|
if (event.map.textureType == 0)
|
2013-07-26 21:18:53 -07:00
|
|
|
{
|
2013-11-29 23:16:32 -05:00
|
|
|
for (int i = 0; i < TRepo.fluidBlocks.length; i++)
|
2013-11-19 20:57:52 -08:00
|
|
|
{
|
2013-11-29 23:16:32 -05:00
|
|
|
TRepo.fluids[i].setIcons(TRepo.fluidBlocks[i].getIcon(0, 0), TRepo.fluidBlocks[i].getIcon(2, 0));
|
2013-11-19 20:57:52 -08:00
|
|
|
}
|
2013-11-29 23:16:32 -05:00
|
|
|
TRepo.pigIronFluid.setIcons(stillIcons[0], flowIcons[0]);
|
2013-07-26 21:18:53 -07:00
|
|
|
}
|
|
|
|
|
}
|
2013-07-28 19:56:01 -07:00
|
|
|
|
|
|
|
|
private static final ResourceLocation hearts = new ResourceLocation("tinker", "textures/gui/newhearts.png");
|
|
|
|
|
private static final ResourceLocation icons = new ResourceLocation("textures/gui/icons.png");
|
2013-08-01 20:54:56 -07:00
|
|
|
public static int left_height = 39;
|
|
|
|
|
public static int right_height = 39;
|
|
|
|
|
Random rand = new Random();
|
|
|
|
|
int updateCounter = 0;
|
2013-07-26 21:18:53 -07:00
|
|
|
|
|
|
|
|
/* HUD */
|
2014-01-01 08:54:06 -05:00
|
|
|
@SubscribeEvent
|
2013-08-01 20:54:56 -07:00
|
|
|
public void renderHealthbar (RenderGameOverlayEvent.Pre event)
|
2013-07-26 21:18:53 -07:00
|
|
|
{
|
2013-11-23 09:31:19 -05:00
|
|
|
if (!Loader.isModLoaded("tukmc_Vz"))// Loader check to avoid conflicting with a GUI mod (thanks Vazkii!)
|
2013-07-26 21:18:53 -07:00
|
|
|
{
|
2013-11-23 09:31:19 -05:00
|
|
|
if (event.type == ElementType.HEALTH)
|
2013-08-01 20:54:56 -07:00
|
|
|
{
|
2013-11-23 09:31:19 -05:00
|
|
|
updateCounter++;
|
2013-08-01 20:54:56 -07:00
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
ScaledResolution scaledresolution = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight);
|
|
|
|
|
int scaledWidth = scaledresolution.getScaledWidth();
|
|
|
|
|
int scaledHeight = scaledresolution.getScaledHeight();
|
|
|
|
|
int xBasePos = scaledWidth / 2 - 91;
|
|
|
|
|
int yBasePos = scaledHeight - 39;
|
|
|
|
|
TPlayerStats stats = TConstruct.playerTracker.getPlayerStats(mc.thePlayer.username);
|
2013-08-01 20:54:56 -07:00
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
boolean highlight = mc.thePlayer.hurtResistantTime / 3 % 2 == 1;
|
2013-08-01 20:54:56 -07:00
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
if (mc.thePlayer.hurtResistantTime < 10)
|
|
|
|
|
{
|
|
|
|
|
highlight = false;
|
|
|
|
|
}
|
2013-08-01 20:54:56 -07:00
|
|
|
|
2014-01-01 08:54:06 -05:00
|
|
|
IAttributeInstance attrMaxHealth = this.mc.thePlayer.getEntityAttribute(SharedMonsterAttributes.maxHealth);
|
2013-11-23 09:31:19 -05:00
|
|
|
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();
|
2013-08-01 20:54:56 -07:00
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
int healthRows = MathHelper.ceiling_float_int((healthMax + absorb) / 2.0F / 10.0F);
|
|
|
|
|
int rowHeight = Math.max(10 - (healthRows - 2), 3);
|
2013-08-01 20:54:56 -07:00
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
this.rand.setSeed((long) (updateCounter * 312871));
|
2013-08-01 20:54:56 -07:00
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
int left = scaledWidth / 2 - 91;
|
|
|
|
|
int top = scaledHeight - left_height;
|
2013-08-01 20:54:56 -07:00
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
int regen = -1;
|
|
|
|
|
if (mc.thePlayer.isPotionActive(Potion.regeneration))
|
2013-08-01 20:54:56 -07:00
|
|
|
{
|
2013-11-23 09:31:19 -05:00
|
|
|
regen = updateCounter % 25;
|
2013-08-01 20:54:56 -07:00
|
|
|
}
|
|
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
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)
|
2013-08-01 20:54:56 -07:00
|
|
|
{
|
2013-11-23 09:31:19 -05:00
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
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 (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;
|
|
|
|
|
}
|
2013-08-01 20:54:56 -07:00
|
|
|
else
|
2013-11-23 09:31:19 -05:00
|
|
|
{
|
|
|
|
|
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
|
|
|
|
|
}
|
2013-08-01 20:54:56 -07:00
|
|
|
}
|
|
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
PotionEffect potion = mc.thePlayer.getActivePotionEffect(Potion.wither);
|
|
|
|
|
if (potion != null)
|
|
|
|
|
return;
|
|
|
|
|
potion = mc.thePlayer.getActivePotionEffect(Potion.poison);
|
|
|
|
|
if (potion != null)
|
|
|
|
|
return;
|
2013-08-01 20:54:56 -07:00
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
//Extra hearts
|
|
|
|
|
this.mc.getTextureManager().bindTexture(hearts);
|
2013-07-26 21:18:53 -07:00
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
int hp = MathHelper.ceiling_float_int(this.mc.thePlayer.getHealth());
|
|
|
|
|
for (int iter = 0; iter < hp / 20; iter++)
|
2013-07-26 21:18:53 -07:00
|
|
|
{
|
2013-11-23 09:31:19 -05:00
|
|
|
int renderHearts = (hp - 20 * (iter + 1)) / 2;
|
|
|
|
|
if (renderHearts > 10)
|
|
|
|
|
renderHearts = 10;
|
|
|
|
|
for (int i = 0; i < renderHearts; i++)
|
|
|
|
|
{
|
|
|
|
|
this.drawTexturedModalRect(xBasePos + 8 * i, yBasePos, 0 + 18 * iter, 0, 8, 8);
|
|
|
|
|
}
|
|
|
|
|
if (hp % 2 == 1 && renderHearts < 10)
|
|
|
|
|
{
|
|
|
|
|
this.drawTexturedModalRect(xBasePos + 8 * renderHearts, yBasePos, 9 + 18 * iter, 0, 8, 8);
|
|
|
|
|
}
|
2013-07-26 21:18:53 -07:00
|
|
|
}
|
|
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
this.mc.getTextureManager().bindTexture(icons);
|
2013-08-01 20:54:56 -07:00
|
|
|
GuiIngameForge.left_height += 10;
|
2013-11-23 09:31:19 -05:00
|
|
|
if (absorb > 0)
|
|
|
|
|
GuiIngameForge.left_height += 10;
|
2013-11-29 23:16:32 -05:00
|
|
|
|
2013-11-23 09:31:19 -05:00
|
|
|
event.setCanceled(true);
|
|
|
|
|
}
|
2013-07-31 13:08:18 -07:00
|
|
|
}
|
2013-07-26 21:18:53 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
2013-12-05 00:03:01 -08:00
|
|
|
|
2014-01-01 08:54:06 -05:00
|
|
|
@SubscribeEvent
|
2013-12-05 00:03:01 -08:00
|
|
|
public void fovModifier(FOVUpdateEvent event)
|
|
|
|
|
{
|
|
|
|
|
float f = 1.0F;
|
|
|
|
|
|
|
|
|
|
if (event.entity.capabilities.isFlying)
|
|
|
|
|
{
|
|
|
|
|
f *= 1.1F;
|
|
|
|
|
}
|
|
|
|
|
|
2014-01-08 00:45:09 -05:00
|
|
|
if (event.entity.isUsingItem() && event.entity.getItemInUse() == Items.bow)
|
2013-12-05 00:03:01 -08:00
|
|
|
{
|
|
|
|
|
int i = event.entity.getItemInUseDuration();
|
|
|
|
|
float f1 = (float) i / 20.0F;
|
|
|
|
|
|
|
|
|
|
if (f1 > 1.0F)
|
|
|
|
|
{
|
|
|
|
|
f1 = 1.0F;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
f1 *= f1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
f *= 1.0F - f1 * 0.15F;
|
|
|
|
|
}
|
|
|
|
|
event.newfov = f;
|
|
|
|
|
}
|
2013-07-26 21:18:53 -07:00
|
|
|
|
|
|
|
|
/* Armor */
|
|
|
|
|
ModelBiped model = new ModelBiped(5f);
|
|
|
|
|
WingModel wings = new WingModel();
|
|
|
|
|
|
|
|
|
|
/*static
|
|
|
|
|
{
|
|
|
|
|
model.bipedHead.showModel = false;
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
private float interpolateRotation (float par1, float par2, float par3)
|
|
|
|
|
{
|
|
|
|
|
float f3;
|
|
|
|
|
|
|
|
|
|
for (f3 = par2 - par1; f3 < -180.0F; f3 += 360.0F)
|
|
|
|
|
{
|
|
|
|
|
;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while (f3 >= 180.0F)
|
|
|
|
|
{
|
|
|
|
|
f3 -= 360.0F;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return par1 + par3 * f3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected float handleRotationFloat (EntityLiving par1EntityLiving, float par2)
|
|
|
|
|
{
|
|
|
|
|
return (float) par1EntityLiving.ticksExisted + par2;
|
|
|
|
|
}
|
|
|
|
|
}
|