Advertisement
Guest User

Untitled

a guest
Mar 7th, 2016
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 39.60 KB | None | 0 0
  1. package com.flansmod.client;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import net.minecraft.block.Block;
  7. import net.minecraft.block.material.Material;
  8. import net.minecraft.client.Minecraft;
  9. import net.minecraft.client.entity.AbstractClientPlayer;
  10. import net.minecraft.client.entity.EntityOtherPlayerMP;
  11. import net.minecraft.client.entity.EntityPlayerSP;
  12. import net.minecraft.client.gui.FontRenderer;
  13. import net.minecraft.client.gui.ScaledResolution;
  14. import net.minecraft.client.model.ModelBase;
  15. import net.minecraft.client.model.ModelBiped;
  16. import net.minecraft.client.renderer.ActiveRenderInfo;
  17. import net.minecraft.client.renderer.EntityRenderer;
  18. import net.minecraft.client.renderer.GlStateManager;
  19. import net.minecraft.client.renderer.ItemRenderer;
  20. import net.minecraft.client.renderer.OpenGlHelper;
  21. import net.minecraft.client.renderer.RenderHelper;
  22. import net.minecraft.client.renderer.Tessellator;
  23. import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
  24. import net.minecraft.client.renderer.entity.RenderItem;
  25. import net.minecraft.client.renderer.entity.RenderPlayer;
  26. import net.minecraft.client.renderer.entity.RendererLivingEntity;
  27. import net.minecraft.entity.Entity;
  28. import net.minecraft.entity.EntityLivingBase;
  29. import net.minecraft.entity.player.EntityPlayer;
  30. import net.minecraft.item.EnumAction;
  31. import net.minecraft.item.ItemStack;
  32. import net.minecraft.util.BlockPos;
  33. import net.minecraft.util.MathHelper;
  34. import net.minecraft.util.ResourceLocation;
  35. import net.minecraftforge.client.IItemRenderer.ItemRenderType;
  36. import net.minecraftforge.client.event.RenderGameOverlayEvent;
  37. import net.minecraftforge.client.event.RenderHandEvent;
  38. import net.minecraftforge.client.event.RenderItemInFrameEvent;
  39. import net.minecraftforge.client.event.RenderLivingEvent;
  40. import net.minecraftforge.client.event.RenderPlayerEvent;
  41. import net.minecraftforge.client.event.RenderWorldEvent;
  42. import net.minecraftforge.client.event.RenderWorldLastEvent;
  43. import net.minecraftforge.client.event.EntityViewRenderEvent.CameraSetup;
  44. import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
  45. import net.minecraftforge.fml.client.FMLClientHandler;
  46. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  47. import net.minecraftforge.fml.relauncher.Side;
  48.  
  49. import org.lwjgl.opengl.GL11;
  50. import org.lwjgl.opengl.GL12;
  51. import org.lwjgl.util.glu.Project;
  52.  
  53. import com.flansmod.api.IControllable;
  54. import com.flansmod.client.gui.GuiTeamScores;
  55. import com.flansmod.client.model.InstantBulletRenderer;
  56. import com.flansmod.client.model.ModelGun;
  57. import com.flansmod.client.model.RenderGun;
  58. import com.flansmod.common.FlansMod;
  59. import com.flansmod.common.PlayerData;
  60. import com.flansmod.common.PlayerHandler;
  61. import com.flansmod.common.driveables.EntityDriveable;
  62. import com.flansmod.common.driveables.EntitySeat;
  63. import com.flansmod.common.guns.GunType;
  64. import com.flansmod.common.guns.ItemGun;
  65. import com.flansmod.common.network.PacketTeamInfo;
  66. import com.flansmod.common.network.PacketTeamInfo.PlayerScoreData;
  67. import com.flansmod.common.teams.ItemTeamArmour;
  68. import com.flansmod.common.teams.Team;
  69. import com.flansmod.common.types.InfoType;
  70.  
  71. public class ClientRenderHooks
  72. {
  73. public static final ResourceLocation offHand = new ResourceLocation("flansmod","gui/offHand.png");
  74. public static final ResourceLocation hitMarker = new ResourceLocation("flansmod", "gui/hitMarker.png");
  75. private Minecraft mc;
  76. private float fovModifierHandPrev, fovModifierHand;
  77. private float equippedProgress, prevEquippedProgress;
  78. private ItemStack itemToRender;
  79. private int equippedItemSlot;
  80. private float partialTicks;
  81.  
  82. private static RenderItem itemRenderer = Minecraft.getMinecraft().getRenderItem();
  83. private static List<KillMessage> killMessages = new ArrayList<KillMessage>();
  84.  
  85. public ClientRenderHooks()
  86. {
  87. mc = Minecraft.getMinecraft();
  88. }
  89.  
  90. /** Render guns in 3D in item frames */
  91. public void renderItemFrame(RenderItemInFrameEvent event)
  92. {
  93. if(event.item.getItem() instanceof ItemGun)
  94. {
  95. GunType type = ((ItemGun)event.item.getItem()).GetType();
  96. if(type.model != null)
  97. {
  98. event.setCanceled(true);
  99.  
  100. int rotation = event.entityItemFrame.getRotation();
  101. GlStateManager.rotate(-rotation * 45F, 0F, 0F, 1F);
  102. RenderHelper.enableStandardItemLighting();
  103. GlStateManager.rotate(rotation * 45F, 0F, 0F, 1F);
  104. GlStateManager.pushMatrix();
  105. float scale = 0.75F;
  106. GlStateManager.scale(scale, scale, scale);
  107. GlStateManager.translate(0.15F, -0.15F, 0F);
  108. ClientProxy.gunRenderer.renderItem(ItemRenderType.ENTITY, event.item);
  109. GlStateManager.popMatrix();
  110. }
  111. }
  112. }
  113.  
  114. /** When Minecraft would render a 2D gun item, instead cancel it and render the gun properly. Render the offhand gun too. */
  115. public void renderHeldItem(RenderHandEvent event)
  116. {
  117. EntityPlayer player = mc.thePlayer;
  118. if(itemToRender != null && itemToRender.getItem() instanceof ItemGun && ((ItemGun)itemToRender.getItem()).GetType().model != null)
  119. {
  120. //Cancel the hand render event so that we can do our own.
  121. event.setCanceled(true);
  122.  
  123. //Render the gun in hand
  124. ItemStack stack = itemToRender;
  125. GunType type = ((ItemGun)stack.getItem()).GetType();
  126. float partialTicks = event.partialTicks;
  127. int pass = event.renderPass;
  128. EntityRenderer renderer = mc.entityRenderer;
  129. float farPlaneDistance = mc.gameSettings.renderDistanceChunks * 16F;
  130. ItemRenderer itemRenderer = mc.getItemRenderer();
  131.  
  132. GlStateManager.clear(256);
  133. GlStateManager.matrixMode(5889);
  134. GlStateManager.loadIdentity();
  135.  
  136. float f1 = 0.07F;
  137. if(mc.gameSettings.anaglyph)
  138. GlStateManager.translate((float)(-(pass * 2 - 1)) * f1, 0.0F, 0.0F);
  139.  
  140. Project.gluPerspective(getFOVModifier(partialTicks), (float)mc.displayWidth / (float)mc.displayHeight, 0.05F, farPlaneDistance * 2.0F);
  141. GlStateManager.matrixMode(5888);
  142. GlStateManager.loadIdentity();
  143.  
  144. if(mc.gameSettings.anaglyph)
  145. GlStateManager.translate((float)(pass * 2 - 1) * 0.1F, 0.0F, 0.0F);
  146.  
  147. GlStateManager.pushMatrix();
  148. hurtCameraEffect(partialTicks);
  149.  
  150. if(mc.gameSettings.viewBobbing)
  151. setupViewBobbing(partialTicks);
  152.  
  153. boolean flag = mc.getRenderViewEntity() instanceof EntityLivingBase && ((EntityLivingBase)mc.getRenderViewEntity()).isPlayerSleeping();
  154.  
  155. if(mc.gameSettings.thirdPersonView == 0 && !flag && !mc.gameSettings.hideGUI && !mc.playerController.isSpectator())
  156. {
  157. renderer.enableLightmap();
  158. renderItemInFirstPerson(stack, itemRenderer, partialTicks);
  159. renderer.disableLightmap();
  160. }
  161.  
  162. GlStateManager.popMatrix();
  163.  
  164. if(mc.gameSettings.thirdPersonView == 0 && !flag)
  165. {
  166. itemRenderer.renderOverlays(partialTicks);
  167. hurtCameraEffect(partialTicks);
  168. }
  169.  
  170. if(mc.gameSettings.viewBobbing)
  171. {
  172. setupViewBobbing(partialTicks);
  173. }
  174. }
  175. }
  176.  
  177. private void renderItemInFirstPerson(ItemStack stack, ItemRenderer renderer, float partialTicks)
  178. {
  179. float f1 = 1.0F - (prevEquippedProgress + (equippedProgress - prevEquippedProgress) * partialTicks);
  180. EntityPlayerSP entityplayersp = this.mc.thePlayer;
  181. float f2 = entityplayersp.getSwingProgress(partialTicks);
  182. float f3 = entityplayersp.prevRotationPitch + (entityplayersp.rotationPitch - entityplayersp.prevRotationPitch) * partialTicks;
  183. float f4 = entityplayersp.prevRotationYaw + (entityplayersp.rotationYaw - entityplayersp.prevRotationYaw) * partialTicks;
  184.  
  185. //Setup lighting
  186. GlStateManager.disableLighting();
  187. GlStateManager.pushMatrix();
  188. GlStateManager.rotate(f3, 1.0F, 0.0F, 0.0F);
  189. GlStateManager.rotate(f4, 0.0F, 1.0F, 0.0F);
  190. RenderHelper.enableStandardItemLighting();
  191. GlStateManager.popMatrix();
  192.  
  193. //Do lighting
  194. int i = this.mc.theWorld.getCombinedLight(new BlockPos(entityplayersp.posX, entityplayersp.posY + (double)entityplayersp.getEyeHeight(), entityplayersp.posZ), 0);
  195. OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)(i & 65535), (float)(i >> 16));
  196.  
  197. //Do hand rotations
  198. float f5 = entityplayersp.prevRenderArmPitch + (entityplayersp.renderArmPitch - entityplayersp.prevRenderArmPitch) * partialTicks;
  199. float f6 = entityplayersp.prevRenderArmYaw + (entityplayersp.renderArmYaw - entityplayersp.prevRenderArmYaw) * partialTicks;
  200. GlStateManager.rotate((entityplayersp.rotationPitch - f5) * 0.1F, 1.0F, 0.0F, 0.0F);
  201. GlStateManager.rotate((entityplayersp.rotationYaw - f6) * 0.1F, 0.0F, 1.0F, 0.0F);
  202.  
  203. GlStateManager.enableRescaleNormal();
  204. GlStateManager.pushMatrix();
  205.  
  206. //Do vanilla weapon swing
  207. float f7 = -0.4F * MathHelper.sin(MathHelper.sqrt_float(f2) * (float)Math.PI);
  208. float f8 = 0.2F * MathHelper.sin(MathHelper.sqrt_float(f2) * (float)Math.PI * 2.0F);
  209. float f9 = -0.2F * MathHelper.sin(f2 * (float)Math.PI);
  210. GlStateManager.translate(f7, f8, f9);
  211.  
  212. GlStateManager.translate(0.56F, -0.52F, -0.71999997F);
  213. GlStateManager.translate(0.0F, f1 * -0.6F, 0.0F);
  214. GlStateManager.rotate(45.0F, 0.0F, 1.0F, 0.0F);
  215. float f10 = MathHelper.sin(f2 * f2 * (float)Math.PI);
  216. float f11 = MathHelper.sin(MathHelper.sqrt_float(f2) * (float)Math.PI);
  217. GlStateManager.rotate(f10 * -20.0F, 0.0F, 1.0F, 0.0F);
  218. GlStateManager.rotate(f11 * -20.0F, 0.0F, 0.0F, 1.0F);
  219. GlStateManager.rotate(f11 * -80.0F, 1.0F, 0.0F, 0.0F);
  220. GlStateManager.scale(0.4F, 0.4F, 0.4F);
  221.  
  222. ClientProxy.gunRenderer.renderItem(ItemRenderType.EQUIPPED_FIRST_PERSON, stack, mc.theWorld, mc.thePlayer);
  223.  
  224. GlStateManager.popMatrix();
  225. GlStateManager.disableRescaleNormal();
  226. RenderHelper.disableStandardItemLighting();
  227. }
  228.  
  229.  
  230. private void hurtCameraEffect(float partialTicks)
  231. {
  232. if (this.mc.getRenderViewEntity() instanceof EntityLivingBase)
  233. {
  234. EntityLivingBase entitylivingbase = (EntityLivingBase)this.mc.getRenderViewEntity();
  235. float f1 = (float)entitylivingbase.hurtTime - partialTicks;
  236. float f2;
  237.  
  238. if (entitylivingbase.getHealth() <= 0.0F)
  239. {
  240. f2 = (float)entitylivingbase.deathTime + partialTicks;
  241. GlStateManager.rotate(40.0F - 8000.0F / (f2 + 200.0F), 0.0F, 0.0F, 1.0F);
  242. }
  243.  
  244. if (f1 < 0.0F)
  245. {
  246. return;
  247. }
  248.  
  249. f1 /= (float)entitylivingbase.maxHurtTime;
  250. f1 = MathHelper.sin(f1 * f1 * f1 * f1 * (float)Math.PI);
  251. f2 = entitylivingbase.attackedAtYaw;
  252. GlStateManager.rotate(-f2, 0.0F, 1.0F, 0.0F);
  253. GlStateManager.rotate(-f1 * 14.0F, 0.0F, 0.0F, 1.0F);
  254. GlStateManager.rotate(f2, 0.0F, 1.0F, 0.0F);
  255. }
  256. }
  257.  
  258. private void setupViewBobbing(float partialTicks)
  259. {
  260. if (this.mc.getRenderViewEntity() instanceof EntityPlayer)
  261. {
  262. EntityPlayer entityplayer = (EntityPlayer)this.mc.getRenderViewEntity();
  263. float f1 = entityplayer.distanceWalkedModified - entityplayer.prevDistanceWalkedModified;
  264. float f2 = -(entityplayer.distanceWalkedModified + f1 * partialTicks);
  265. float f3 = entityplayer.prevCameraYaw + (entityplayer.cameraYaw - entityplayer.prevCameraYaw) * partialTicks;
  266. float f4 = entityplayer.prevCameraPitch + (entityplayer.cameraPitch - entityplayer.prevCameraPitch) * partialTicks;
  267. GlStateManager.translate(MathHelper.sin(f2 * (float)Math.PI) * f3 * 0.5F, -Math.abs(MathHelper.cos(f2 * (float)Math.PI) * f3), 0.0F);
  268. GlStateManager.rotate(MathHelper.sin(f2 * (float)Math.PI) * f3 * 3.0F, 0.0F, 0.0F, 1.0F);
  269. GlStateManager.rotate(Math.abs(MathHelper.cos(f2 * (float)Math.PI - 0.2F) * f3) * 5.0F, 1.0F, 0.0F, 0.0F);
  270. GlStateManager.rotate(f4, 1.0F, 0.0F, 0.0F);
  271. }
  272. }
  273.  
  274. private float getFOVModifier(float partialTicks)
  275. {
  276. Entity entity = this.mc.getRenderViewEntity();
  277. float f1 = 70.0F;
  278.  
  279. if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).getHealth() <= 0.0F)
  280. {
  281. float f2 = (float)((EntityLivingBase)entity).deathTime + partialTicks;
  282. f1 /= (1.0F - 500.0F / (f2 + 500.0F)) * 2.0F + 1.0F;
  283. }
  284.  
  285. Block block = ActiveRenderInfo.getBlockAtEntityViewpoint(this.mc.theWorld, entity, partialTicks);
  286.  
  287. if (block.getMaterial() == Material.water)
  288. f1 = f1 * 60.0F / 70.0F;
  289.  
  290. return f1;
  291. }
  292.  
  293. public void update()
  294. {
  295. for(int i = 0; i < killMessages.size(); i++)
  296. {
  297. killMessages.get(i).timer--;
  298. if(killMessages.get(i).timer == 0)
  299. {
  300. killMessages.remove(i);
  301. }
  302. }
  303.  
  304. //Update the FOV Modifier
  305. float fovModifier = 1.0F;
  306. if (mc.getRenderViewEntity() instanceof AbstractClientPlayer)
  307. {
  308. AbstractClientPlayer abstractclientplayer = (AbstractClientPlayer)this.mc.getRenderViewEntity();
  309. fovModifier = abstractclientplayer.getFovModifier();
  310. }
  311. //Adjust FOV modifier
  312. fovModifierHandPrev = fovModifierHand;
  313. fovModifierHand += (fovModifier - fovModifierHand) * 0.5F;
  314. //Limit FOV modifier to a certain range
  315. if (fovModifierHand > 1.5F)
  316. fovModifierHand = 1.5F;
  317. if (fovModifierHand < 0.1F)
  318. fovModifierHand = 0.1F;
  319.  
  320. //And update the itemToRender, for item switching
  321.  
  322. prevEquippedProgress = equippedProgress;
  323. EntityPlayerSP thePlayer = mc.thePlayer;
  324. if(thePlayer != null)
  325. {
  326. ItemStack itemstack = thePlayer.inventory.getCurrentItem();
  327. boolean equippedGun = false;
  328.  
  329. if(itemToRender != null && itemstack != null)
  330. {
  331. if (!itemToRender.getIsItemStackEqual(itemstack))
  332. {
  333. if (!itemToRender.getItem().shouldCauseReequipAnimation(itemToRender, itemstack, equippedItemSlot != thePlayer.inventory.currentItem))
  334. {
  335. itemToRender = itemstack;
  336. equippedItemSlot = thePlayer.inventory.currentItem;
  337. return;
  338. }
  339. equippedGun = true;
  340. }
  341. }
  342. else if(itemToRender == null && itemstack == null)
  343. {
  344. equippedGun = false;
  345. }
  346. else
  347. {
  348. equippedGun = true;
  349. }
  350.  
  351. float maxChange = 0.4F;
  352. float targetProgress = equippedGun ? 0.0F : 1.0F;
  353. float difference = MathHelper.clamp_float(targetProgress - equippedProgress, -maxChange, maxChange);
  354. equippedProgress += difference;
  355.  
  356. if(equippedProgress < 0.1F)
  357. {
  358. itemToRender = itemstack;
  359. equippedItemSlot = thePlayer.inventory.currentItem;
  360. }
  361.  
  362. //Render debug boxes for player snapshots
  363. PlayerData data = PlayerHandler.getPlayerData(thePlayer);
  364. if(FlansMod.DEBUG && data != null)
  365. {
  366. if(data.snapshots[0] != null)
  367. data.snapshots[0].renderSnapshot();
  368. }
  369. }
  370. }
  371.  
  372. public void SetPartialTick(float dT)
  373. {
  374. partialTicks = dT;
  375. }
  376.  
  377. public void renderThirdPersonWeapons(RenderLivingEvent.Post event)
  378. {
  379. ModelBase mainModel = event.renderer.getMainModel();
  380. EntityLivingBase entity = event.entity;
  381.  
  382. if(entity.getEquipmentInSlot(0) != null && entity.getEquipmentInSlot(0).getItem() instanceof ItemGun && mainModel instanceof ModelBiped)
  383. {
  384. ModelBiped biped = (ModelBiped)mainModel;
  385. ItemStack stack = entity.getEquipmentInSlot(0);
  386. GunType type = ((ItemGun)stack.getItem()).GetType();
  387. if(type.model == null)
  388. return;
  389. ModelGun gunModel = type.model;
  390.  
  391. GlStateManager.pushMatrix();
  392. GlStateManager.disableCull();
  393. mainModel.swingProgress = entity.getSwingProgress(partialTicks);
  394. mainModel.isRiding = entity.isRiding();
  395. mainModel.isChild = entity.isChild();
  396.  
  397. float f2 = this.interpolateRotation(entity.prevRenderYawOffset, entity.renderYawOffset, partialTicks);
  398. float f3 = this.interpolateRotation(entity.prevRotationYawHead, entity.rotationYawHead, partialTicks);
  399. float f4 = f3 - f2;
  400. float f5;
  401.  
  402.  
  403. if(Math.abs(entity.prevRenderYawOffset - entity.renderYawOffset) > 30F)
  404. f2 = entity.renderYawOffset;
  405. if(Math.abs(entity.prevRotationYawHead - entity.rotationYawHead) > 30F)
  406. f3 = entity.rotationYawHead;
  407. f4 = f3 - f2;
  408.  
  409. //System.out.println(entity.prevRenderYawOffset + " " + entity.renderYawOffset);
  410.  
  411. if (entity.isRiding() && entity.ridingEntity instanceof EntityLivingBase)
  412. {
  413. EntityLivingBase entitylivingbase1 = (EntityLivingBase)entity.ridingEntity;
  414. f2 = this.interpolateRotation(entitylivingbase1.prevRenderYawOffset, entitylivingbase1.renderYawOffset, partialTicks);
  415. f4 = f3 - f2;
  416. f5 = MathHelper.wrapAngleTo180_float(f4);
  417.  
  418. if (f5 < -85.0F)
  419. {
  420. f5 = -85.0F;
  421. }
  422.  
  423. if (f5 >= 85.0F)
  424. {
  425. f5 = 85.0F;
  426. }
  427.  
  428. f2 = f3 - f5;
  429.  
  430. if (f5 * f5 > 2500.0F)
  431. {
  432. f2 += f5 * 0.2F;
  433. }
  434. }
  435.  
  436. float f9 = entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks;
  437. if(Math.abs(entity.prevRotationPitch - entity.rotationPitch) > 5F)
  438. f9 = entity.rotationPitch;
  439. GlStateManager.translate(event.x, event.y, event.z);
  440.  
  441. f5 = entity.ticksExisted + partialTicks;
  442. //this.rotateCorpse(entity, f5, f2, partialTicks);
  443. GlStateManager.rotate(180.0F - f2, 0.0F, 1.0F, 0.0F);
  444. GlStateManager.enableRescaleNormal();
  445. GlStateManager.scale(-1.0F, -1.0F, 1.0F);
  446. //this.preRenderCallback(entity, partialTicks);
  447. float f6 = 0.0625F;
  448. GlStateManager.translate(0.0F, -1.5078125F, 0.0F);
  449. float f7 = entity.prevLimbSwingAmount + (entity.limbSwingAmount - entity.prevLimbSwingAmount) * partialTicks;
  450. float f8 = entity.limbSwing - entity.limbSwingAmount * (1.0F - partialTicks);
  451.  
  452. if (entity.isChild())
  453. {
  454. f8 *= 3.0F;
  455. }
  456.  
  457. if (f7 > 1.0F)
  458. {
  459. f7 = 1.0F;
  460. }
  461.  
  462. GlStateManager.enableAlpha();
  463.  
  464. //biped.isSneak = false;
  465. biped.heldItemRight = 1;
  466. biped.setLivingAnimations(entity, f8, f7, partialTicks);
  467. biped.setRotationAngles(f8, f7, f5, f4, f9, 0.0625F, entity);
  468.  
  469. //Render main hand gun
  470. {
  471. GlStateManager.pushMatrix();
  472.  
  473. biped.bipedRightArm.postRender(0.0625F);
  474.  
  475. GlStateManager.translate(-0.05F, 0.4F, 0.05F);
  476.  
  477. ClientProxy.gunRenderer.renderItem(ItemRenderType.EQUIPPED, stack, mc.theWorld, mc.thePlayer);
  478. GlStateManager.popMatrix();
  479. }
  480.  
  481. //Render off hand gun
  482. if(entity instanceof EntityPlayer)
  483. {
  484. PlayerData data = PlayerHandler.getPlayerData((EntityPlayer)entity, Side.CLIENT);
  485. ItemStack gunStack = null;
  486.  
  487. //Check current stack is a one handed gun
  488. if(entity instanceof EntityOtherPlayerMP)
  489. {
  490. gunStack = data.offHandGunStack;
  491. }
  492. else if(entity instanceof EntityPlayerSP)
  493. {
  494. if(type.oneHanded && data.offHandGunSlot != 0)
  495. gunStack = ((EntityPlayer)entity).inventory.getStackInSlot(data.offHandGunSlot - 1);
  496. }
  497.  
  498. if(gunStack != null && gunStack.getItem() instanceof ItemGun)
  499. {
  500. GunType gunType = ((ItemGun)gunStack.getItem()).GetType();
  501.  
  502. //Render!
  503. GlStateManager.pushMatrix();
  504. biped.bipedLeftArm.postRender(0.0625F);
  505. GlStateManager.rotate(-90F, 1F, 0F, 0F);
  506. GlStateManager.rotate(-90F, 0F, 1F, 0F);
  507.  
  508. GlStateManager.translate(0.6F, 0F, -0.05F);
  509. ClientProxy.gunRenderer.renderOffHandGun((EntityPlayer)entity, gunStack);
  510. GlStateManager.popMatrix();
  511. }
  512. }
  513.  
  514. GlStateManager.depthMask(true);
  515. GlStateManager.disableRescaleNormal();
  516. GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
  517. GlStateManager.enableTexture2D();
  518. GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
  519. GlStateManager.enableCull();
  520. GlStateManager.popMatrix();
  521. }
  522. }
  523.  
  524. private float interpolateRotation(float x, float y, float dT)
  525. {
  526. float f3;
  527.  
  528. for(f3 = y - x; f3 < -180.0F; f3 += 360.0F) { }
  529. for( ; f3 >= 180.0F; f3 -= 360.0F) { }
  530.  
  531. return x + dT * f3;
  532. }
  533.  
  534. //Handle player hiding / name tag removal for teams
  535. public void renderPlayer(RenderPlayerEvent.Pre event)
  536. {
  537. PlayerData data = PlayerHandler.getPlayerData(event.entityPlayer, Side.CLIENT);
  538.  
  539. RendererLivingEntity.NAME_TAG_RANGE = 64F;
  540. RendererLivingEntity.NAME_TAG_RANGE_SNEAK = 32F;
  541. if(event.entity instanceof EntityPlayer && FlansModClient.teamInfo != null && FlansModClient.teamInfo.gametype != null && !"No Gametype".equals(FlansModClient.teamInfo.gametype))
  542. {
  543. PlayerScoreData rendering = FlansModClient.teamInfo.getPlayerScoreData(event.entity.getName());
  544. PlayerScoreData thePlayer = FlansModClient.teamInfo.getPlayerScoreData(mc.thePlayer.getName());
  545.  
  546. Team renderingTeam = rendering == null ? Team.spectators : rendering.team.team;
  547. Team thePlayerTeam = thePlayer == null ? Team.spectators : thePlayer.team.team;
  548.  
  549. //Do custom skin overrides
  550. //If we have no stored skin, try to get it
  551. if(data.skin == null)
  552. data.skin = ((AbstractClientPlayer)event.entityPlayer).getLocationSkin();
  553. //Only once we have the stored skin may we override
  554. if(data.skin != null)
  555. {
  556. ResourceLocation skin = rendering == null || rendering.playerClass == null ? null : FlansModResourceHandler.getTexture(rendering.playerClass);
  557. //((AbstractClientPlayer)event.entityPlayer).func_152121_a(Type.SKIN, skin == null ? data.skin : skin);
  558. }
  559.  
  560. //Spectators see all
  561. if(thePlayerTeam == Team.spectators)
  562. return;
  563. //Nobody sees spectators
  564. if(renderingTeam == Team.spectators)
  565. {
  566. event.setCanceled(true);
  567. return;
  568. }
  569. //If we are on the other team, don't render the name tag
  570. if(renderingTeam != thePlayerTeam)
  571. {
  572. RendererLivingEntity.NAME_TAG_RANGE = 0F;
  573. RendererLivingEntity.NAME_TAG_RANGE_SNEAK = 0F;
  574. return;
  575. }
  576. //If its DM, don't render the name tag
  577. if(!FlansModClient.teamInfo.sortedByTeam)
  578. {
  579. RendererLivingEntity.NAME_TAG_RANGE = 0F;
  580. RendererLivingEntity.NAME_TAG_RANGE_SNEAK = 0F;
  581. }
  582. }
  583. }
  584.  
  585. public void cameraSetup(CameraSetup event)
  586. {
  587. if(mc.thePlayer.ridingEntity instanceof IControllable)
  588. {
  589. IControllable cont = (IControllable)mc.thePlayer.ridingEntity;
  590. float roll = interpolateRotation(cont.getPrevPlayerRoll(), cont.getPlayerRoll(), (float)event.renderPartialTicks);
  591. if(((EntitySeat)mc.thePlayer.ridingEntity).driveable != null){
  592. EntityDriveable ent = ((EntitySeat)mc.thePlayer.ridingEntity).driveable;
  593.  
  594. if(ent.getDriveableType().canRoll){
  595. roll = 0F;
  596. }
  597. }
  598.  
  599. event.roll = roll;
  600. }
  601. }
  602.  
  603. public void ModifyHUD(RenderGameOverlayEvent event)
  604. {
  605. Minecraft mc = Minecraft.getMinecraft();
  606.  
  607. //Remove crosshairs if looking down the sights of a gun
  608. if(event.type == ElementType.CROSSHAIRS && FlansModClient.currentScope != null)
  609. {
  610. event.setCanceled(true);
  611. return;
  612. }
  613.  
  614. ScaledResolution scaledresolution = new ScaledResolution(FlansModClient.minecraft, FlansModClient.minecraft.displayWidth, FlansModClient.minecraft.displayHeight);
  615. int i = scaledresolution.getScaledWidth();
  616. int j = scaledresolution.getScaledHeight();
  617.  
  618. Tessellator tessellator = Tessellator.getInstance();
  619.  
  620. if(!event.isCancelable() && event.type == ElementType.HELMET)
  621. {
  622. //Scopes and helmet overlays
  623. String overlayTexture = null;
  624. if (FlansModClient.currentScope != null && FlansModClient.currentScope.hasZoomOverlay() && FMLClientHandler.instance().getClient().currentScreen == null && FlansModClient.zoomProgress > 0.8F)
  625. {
  626. overlayTexture = FlansModClient.currentScope.getZoomOverlay();
  627. }
  628. else if(mc.thePlayer != null)
  629. {
  630. ItemStack stack = mc.thePlayer.inventory.armorInventory[3];
  631. if(stack != null && stack.getItem() instanceof ItemTeamArmour)
  632. {
  633. overlayTexture = ((ItemTeamArmour)stack.getItem()).type.overlay;
  634. }
  635. }
  636.  
  637. if(overlayTexture != null)
  638. {
  639. FlansModClient.minecraft.entityRenderer.setupOverlayRendering();
  640. GL11.glEnable(3042 /* GL_BLEND */);
  641. GL11.glDisable(2929 /* GL_DEPTH_TEST */);
  642. GL11.glDepthMask(false);
  643. GL11.glBlendFunc(770, 771);
  644. GL11.glColor4f(1F, 1F, 1F, 1.0F);
  645. GL11.glDisable(3008 /* GL_ALPHA_TEST */);
  646.  
  647. mc.renderEngine.bindTexture(FlansModResourceHandler.getScope(overlayTexture));
  648.  
  649. tessellator.getWorldRenderer().startDrawingQuads();
  650. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 2 * j, j, -90D, 0.0D, 1.0D);
  651. tessellator.getWorldRenderer().addVertexWithUV(i / 2 + 2 * j, j, -90D, 1.0D, 1.0D);
  652. tessellator.getWorldRenderer().addVertexWithUV(i / 2 + 2 * j, 0.0D, -90D, 1.0D, 0.0D);
  653. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 2 * j, 0.0D, -90D, 0.0D, 0.0D);
  654. tessellator.draw();
  655. GL11.glDepthMask(true);
  656. GL11.glEnable(2929 /* GL_DEPTH_TEST */);
  657. GL11.glEnable(3008 /* GL_ALPHA_TEST */);
  658. GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
  659. }
  660. }
  661.  
  662. if(event.isCancelable() && event.type == ElementType.CROSSHAIRS)
  663. {
  664. if(FlansModClient.hitMarkerTime > 0)
  665. {
  666. //Off-hand weapon graphics
  667. mc.renderEngine.bindTexture(hitMarker);
  668.  
  669. GlStateManager.enableAlpha();
  670. GlStateManager.enableBlend();
  671. GlStateManager.color(1.0f, 1.0f, 1.0f, Math.max(((float)FlansModClient.hitMarkerTime - 10.0f + partialTicks) / 10.0f, 0.0f));
  672.  
  673.  
  674. ItemStack currentStack = mc.thePlayer.inventory.getCurrentItem();
  675. PlayerData data = PlayerHandler.getPlayerData(mc.thePlayer, Side.CLIENT);
  676. double zLevel = 0D;
  677.  
  678. tessellator.getWorldRenderer().startDrawingQuads();
  679. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 4d, j / 2 + 5d, zLevel, 0D / 16D, 9D / 16D);
  680. tessellator.getWorldRenderer().addVertexWithUV(i / 2 + 5d, j / 2 + 5d, zLevel, 9D / 16D, 9D / 16D);
  681. tessellator.getWorldRenderer().addVertexWithUV(i / 2 + 5d, j / 2 - 4d, zLevel, 9D / 16D, 0D / 16D);
  682. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 4d, j / 2 - 4d, zLevel, 0D / 16D, 0D / 16D);
  683. tessellator.draw();
  684.  
  685.  
  686. GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
  687. GlStateManager.disableAlpha();
  688. GlStateManager.disableBlend();
  689. }
  690.  
  691.  
  692. }
  693.  
  694. if(event.isCancelable() && event.type == ElementType.HOTBAR)
  695. {
  696. //Off-hand weapon graphics
  697. mc.renderEngine.bindTexture(offHand);
  698.  
  699. ItemStack currentStack = mc.thePlayer.inventory.getCurrentItem();
  700. PlayerData data = PlayerHandler.getPlayerData(mc.thePlayer, Side.CLIENT);
  701. double zLevel = 0D;
  702.  
  703. if(currentStack != null && currentStack.getItem() instanceof ItemGun && ((ItemGun)currentStack.getItem()).GetType().oneHanded)
  704. {
  705. for(int n = 0; n < 9; n++)
  706. {
  707. if(data.offHandGunSlot == n + 1)
  708. {
  709. tessellator.getWorldRenderer().startDrawingQuads();
  710. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 88 + 20 * n, j - 3, zLevel, 16D / 64D, 16D / 32D);
  711. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 72 + 20 * n, j - 3, zLevel, 32D / 64D, 16D / 32D);
  712. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 72 + 20 * n, j - 19, zLevel, 32D / 64D, 0D / 32D);
  713. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 88 + 20 * n, j - 19, zLevel, 16D / 64D, 0D / 32D);
  714. tessellator.draw();
  715. }
  716. else if(data.isValidOffHandWeapon(mc.thePlayer, n + 1))
  717. {
  718. tessellator.getWorldRenderer().startDrawingQuads();
  719. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 88 + 20 * n, j - 3, zLevel, 0D / 64D, 16D / 32D);
  720. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 72 + 20 * n, j - 3, zLevel, 16D / 64D, 16D / 32D);
  721. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 72 + 20 * n, j - 19, zLevel, 16D / 64D, 0D / 32D);
  722. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 88 + 20 * n, j - 19, zLevel, 0D / 64D, 0D / 32D);
  723. tessellator.draw();
  724. }
  725. }
  726. }
  727. }
  728. if(!event.isCancelable() && event.type == ElementType.HOTBAR)
  729. {
  730. //Player ammo overlay
  731. if(mc.thePlayer != null)
  732. {
  733. ItemStack stack = mc.thePlayer.inventory.getCurrentItem();
  734. if(stack != null && stack.getItem() instanceof ItemGun)
  735. {
  736. ItemGun gunItem = (ItemGun)stack.getItem();
  737. GunType gunType = gunItem.GetType();
  738. int x = 0;
  739. for(int n = 0; n < gunType.numAmmoItemsInGun; n++)
  740. {
  741. ItemStack bulletStack = ((ItemGun)stack.getItem()).getBulletItemStack(stack, n);
  742. if(bulletStack != null && bulletStack.getItem() != null && bulletStack.getItemDamage() < bulletStack.getMaxDamage())
  743. {
  744. RenderHelper.enableGUIStandardItemLighting();
  745. GL11.glEnable(GL12.GL_RESCALE_NORMAL);
  746. OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F);
  747. drawSlotInventory(mc.fontRendererObj, bulletStack, i / 2 + 16 + x, j - 65);
  748. GL11.glDisable(GL12.GL_RESCALE_NORMAL);
  749. RenderHelper.disableStandardItemLighting();
  750. String s = (bulletStack.getMaxDamage() - bulletStack.getItemDamage()) + "/" + bulletStack.getMaxDamage();
  751. if(bulletStack.getMaxDamage() == 1)
  752. s = "";
  753. mc.fontRendererObj.drawString(s, i / 2 + 32 + x, j - 59, 0x000000);
  754. mc.fontRendererObj.drawString(s, i / 2 + 33 + x, j - 60, 0xffffff);
  755. x += 16 + mc.fontRendererObj.getStringWidth(s);
  756. }
  757. }
  758. //Render secondary gun
  759. PlayerData data = PlayerHandler.getPlayerData(mc.thePlayer, Side.CLIENT);
  760. if(gunType.oneHanded && data.offHandGunSlot != 0)
  761. {
  762. ItemStack offHandStack = mc.thePlayer.inventory.getStackInSlot(data.offHandGunSlot - 1);
  763. if(offHandStack != null && offHandStack.getItem() instanceof ItemGun)
  764. {
  765. GunType offHandGunType = ((ItemGun)offHandStack.getItem()).GetType();
  766. x = 0;
  767. for(int n = 0; n < offHandGunType.numAmmoItemsInGun; n++)
  768. {
  769. ItemStack bulletStack = ((ItemGun)offHandStack.getItem()).getBulletItemStack(offHandStack, n);
  770. if(bulletStack != null && bulletStack.getItem() != null && bulletStack.getItemDamage() < bulletStack.getMaxDamage())
  771. {
  772. //Find the string we are displaying next to the ammo item
  773. String s = (bulletStack.getMaxDamage() - bulletStack.getItemDamage()) + "/" + bulletStack.getMaxDamage();
  774. if(bulletStack.getMaxDamage() == 1)
  775. s = "";
  776.  
  777. //Draw the slot and then move leftwards
  778. RenderHelper.enableGUIStandardItemLighting();
  779. GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
  780. GL11.glEnable(GL12.GL_RESCALE_NORMAL);
  781. OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F);
  782. drawSlotInventory(mc.fontRendererObj, bulletStack, i / 2 - 32 - x, j - 65);
  783. x += 16 + mc.fontRendererObj.getStringWidth(s);
  784.  
  785. //Draw the string
  786. GL11.glDisable(GL12.GL_RESCALE_NORMAL);
  787. RenderHelper.disableStandardItemLighting();
  788. mc.fontRendererObj.drawString(s, i / 2 - 16 - x, j - 59, 0x000000);
  789. mc.fontRendererObj.drawString(s, i / 2 - 17 - x, j - 60, 0xffffff);
  790. }
  791. }
  792. }
  793. }
  794. }
  795. }
  796.  
  797. PacketTeamInfo teamInfo = FlansModClient.teamInfo;
  798.  
  799. if(teamInfo != null && FlansModClient.minecraft.thePlayer != null && (teamInfo.numTeams > 0 || !teamInfo.sortedByTeam) && teamInfo.getPlayerScoreData(FlansModClient.minecraft.thePlayer.getName()) != null)
  800. {
  801. GL11.glEnable(3042 /* GL_BLEND */);
  802. GL11.glDisable(2929 /* GL_DEPTH_TEST */);
  803. GL11.glDepthMask(false);
  804. GL11.glBlendFunc(770, 771);
  805. GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
  806. GL11.glDisable(3008 /* GL_ALPHA_TEST */);
  807.  
  808. mc.renderEngine.bindTexture(GuiTeamScores.texture);
  809.  
  810. tessellator.getWorldRenderer().startDrawingQuads();
  811. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 43, 27, -90D, 85D / 256D, 27D / 256D);
  812. tessellator.getWorldRenderer().addVertexWithUV(i / 2 + 43, 27, -90D, 171D / 256D, 27D / 256D);
  813. tessellator.getWorldRenderer().addVertexWithUV(i / 2 + 43, 0D, -90D, 171D / 256D, 0D / 256D);
  814. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 43, 0D, -90D, 85D / 256D, 0D / 256D);
  815. tessellator.draw();
  816.  
  817. //If we are in a two team gametype, draw the team scores at the top of the screen
  818. if(teamInfo.numTeams == 2 && teamInfo.sortedByTeam)
  819. {
  820. //Draw team 1 colour bit
  821. int colour = teamInfo.teamData[0].team.teamColour;
  822. GL11.glColor4f(((colour >> 16) & 0xff) / 256F, ((colour >> 8) & 0xff) / 256F, (colour & 0xff) / 256F, 1.0F);
  823. tessellator.getWorldRenderer().startDrawingQuads();
  824. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 43, 27, -90D, 0D / 256D, 125D / 256D);
  825. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 19, 27, -90D, 24D / 256D, 125D / 256D);
  826. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 19, 0D, -90D, 24D / 256D, 98D / 256D);
  827. tessellator.getWorldRenderer().addVertexWithUV(i / 2 - 43, 0D, -90D, 0D / 256D, 98D / 256D);
  828. tessellator.draw();
  829. //Draw team 2 colour bit
  830. colour = teamInfo.teamData[1].team.teamColour;
  831. GL11.glColor4f(((colour >> 16) & 0xff) / 256F, ((colour >> 8) & 0xff) / 256F, (colour & 0xff) / 256F, 1.0F);
  832. tessellator.getWorldRenderer().startDrawingQuads();
  833. tessellator.getWorldRenderer().addVertexWithUV(i / 2 + 19, 27, -90D, 62D / 256D, 125D / 256D);
  834. tessellator.getWorldRenderer().addVertexWithUV(i / 2 + 43, 27, -90D, 86D / 256D, 125D / 256D);
  835. tessellator.getWorldRenderer().addVertexWithUV(i / 2 + 43, 0D, -90D, 86D / 256D, 98D / 256D);
  836. tessellator.getWorldRenderer().addVertexWithUV(i / 2 + 19, 0D, -90D, 62D / 256D, 98D / 256D);
  837. tessellator.draw();
  838.  
  839. GL11.glDepthMask(true);
  840. GL11.glEnable(2929 /* GL_DEPTH_TEST */);
  841. GL11.glEnable(3008 /* GL_ALPHA_TEST */);
  842. GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
  843.  
  844. //Draw the team scores
  845. if(teamInfo.teamData[0] != null && teamInfo.teamData[1] != null)
  846. {
  847. mc.fontRendererObj.drawString(teamInfo.teamData[0].score + "", i / 2 - 35, 9, 0x000000);
  848. mc.fontRendererObj.drawString(teamInfo.teamData[0].score + "", i / 2 - 36, 8, 0xffffff);
  849. mc.fontRendererObj.drawString(teamInfo.teamData[1].score + "", i / 2 + 35 - mc.fontRendererObj.getStringWidth(teamInfo.teamData[1].score + ""), 9, 0x000000);
  850. mc.fontRendererObj.drawString(teamInfo.teamData[1].score + "", i / 2 + 34 - mc.fontRendererObj.getStringWidth(teamInfo.teamData[1].score + ""), 8, 0xffffff);
  851. }
  852. }
  853.  
  854. mc.fontRendererObj.drawString(teamInfo.gametype + "", i / 2 + 48, 9, 0x000000);
  855. mc.fontRendererObj.drawString(teamInfo.gametype + "", i / 2 + 47, 8, 0xffffff);
  856. mc.fontRendererObj.drawString(teamInfo.map + "", i / 2 - 47 - mc.fontRendererObj.getStringWidth(teamInfo.map + ""), 9, 0x000000);
  857. mc.fontRendererObj.drawString(teamInfo.map + "", i / 2 - 48 - mc.fontRendererObj.getStringWidth(teamInfo.map + ""), 8, 0xffffff);
  858.  
  859. int secondsLeft = teamInfo.timeLeft / 20;
  860. int minutesLeft = secondsLeft / 60;
  861. secondsLeft = secondsLeft % 60;
  862. String timeLeft = minutesLeft + ":" + (secondsLeft < 10 ? "0" + secondsLeft : secondsLeft);
  863. mc.fontRendererObj.drawString(timeLeft, i / 2 - mc.fontRendererObj.getStringWidth(timeLeft) / 2 - 1, 29, 0x000000);
  864. mc.fontRendererObj.drawString(timeLeft, i / 2 - mc.fontRendererObj.getStringWidth(timeLeft) / 2, 30, 0xffffff);
  865.  
  866.  
  867. GL11.glDepthMask(true);
  868. GL11.glEnable(2929 /* GL_DEPTH_TEST */);
  869. GL11.glEnable(3008 /* GL_ALPHA_TEST */);
  870. GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
  871. String playerUsername = FlansModClient.minecraft.thePlayer.getName();
  872.  
  873. if(teamInfo.getPlayerScoreData(playerUsername) != null)
  874. {
  875. mc.fontRendererObj.drawString(teamInfo.getPlayerScoreData(playerUsername).score + "", i / 2 - 7, 1, 0x000000);
  876. mc.fontRendererObj.drawString(teamInfo.getPlayerScoreData(playerUsername).kills + "", i / 2 - 7, 9, 0x000000);
  877. mc.fontRendererObj.drawString(teamInfo.getPlayerScoreData(playerUsername).deaths + "", i / 2 - 7, 17, 0x000000);
  878. }
  879. }
  880. for(int n = 0; n < killMessages.size(); n++)
  881. {
  882. KillMessage killMessage = killMessages.get(n);
  883. mc.fontRendererObj.drawString("\u00a7" + killMessage.killerName + " " + "\u00a7" + killMessage.killedName, i - mc.fontRendererObj.getStringWidth(killMessage.killerName + " " + killMessage.killedName) - 6, j - 32 - killMessage.line * 16, 0xffffff);
  884. }
  885.  
  886. //Draw icons indicated weapons used
  887. RenderHelper.enableGUIStandardItemLighting();
  888. GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
  889. GL11.glEnable(GL12.GL_RESCALE_NORMAL);
  890.  
  891. OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F);
  892. for(int n = 0; n < killMessages.size(); n++)
  893. {
  894. KillMessage killMessage = killMessages.get(n);
  895. drawSlotInventory(mc.fontRendererObj, new ItemStack(killMessage.weapon.item), i - mc.fontRendererObj.getStringWidth(" " + killMessage.killedName) - 12, j - 36 - killMessage.line * 16);
  896. }
  897. GL11.glDisable(3042 /*GL_BLEND*/);
  898. RenderHelper.disableStandardItemLighting();
  899.  
  900. //DEBUG vehicles
  901. if(mc.thePlayer.ridingEntity instanceof EntitySeat)
  902. {
  903. EntityDriveable ent = ((EntitySeat)mc.thePlayer.ridingEntity).driveable;
  904.  
  905. double dX = ent.posX - ent.prevPosX;
  906. double dY = ent.posY - ent.prevPosY;
  907. double dZ = ent.posZ - ent.prevPosZ;
  908.  
  909. //Convert to chunks per Minecraft hour
  910. float speed = (float)Math.sqrt(dX * dX + dY * dY + dZ * dZ) * 1000F / 16F;
  911.  
  912. speed = (int)(speed * 10F) / 10F;
  913.  
  914. mc.fontRendererObj.drawString("Speed: " + speed + " chunks per hour", 2, 2, 0xffffff);
  915.  
  916. if(FlansMod.DEBUG)
  917. {
  918. mc.fontRendererObj.drawString("Throttle : " + ent.throttle, 2, 12, 0xffffff);
  919. }
  920. }
  921. }
  922. }
  923.  
  924. private void drawSlotInventory(FontRenderer fontRenderer, ItemStack itemstack, int i, int j)
  925. {
  926. if(itemstack == null || itemstack.getItem() == null)
  927. return;
  928. itemRenderer.renderItemIntoGUI(itemstack, i, j);
  929. itemRenderer.renderItemOverlayIntoGUI(fontRenderer, itemstack, i, j, null); //May be something other than null
  930. }
  931.  
  932. public static void addKillMessage(boolean headshot, InfoType infoType, String killer, String killed)
  933. {
  934. for(KillMessage killMessage : killMessages)
  935. {
  936. killMessage.line++;
  937. if(killMessage.line > 10)
  938. killMessage.timer = 0;
  939. }
  940. killMessages.add(new KillMessage(headshot, infoType, killer, killed));
  941. }
  942.  
  943. private static class KillMessage
  944. {
  945. public KillMessage(boolean head, InfoType infoType, String killer, String killed)
  946. {
  947. headshot = head;
  948. killerName = killer;
  949. killedName = killed;
  950. weapon = infoType;
  951. line = 0;
  952. timer = 200;
  953. }
  954.  
  955. public String killerName;
  956. public String killedName;
  957. public InfoType weapon;
  958. public int timer;
  959. public int line;
  960. public boolean headshot;
  961. }
  962. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement