seppuku/src/main/java/me/rigamortis/seppuku/impl/gui/hud/component/BattleInfoComponent.java

182 lines
10 KiB
Java

package me.rigamortis.seppuku.impl.gui.hud.component;
import me.rigamortis.seppuku.Seppuku;
import me.rigamortis.seppuku.api.gui.hud.component.DraggableHudComponent;
import me.rigamortis.seppuku.api.texture.Texture;
import me.rigamortis.seppuku.api.util.ColorUtil;
import me.rigamortis.seppuku.api.util.RenderUtil;
import me.rigamortis.seppuku.impl.gui.hud.GuiHudEditor;
import me.rigamortis.seppuku.impl.module.combat.CrystalAuraModule;
import me.rigamortis.seppuku.impl.module.combat.KillAuraModule;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
/**
* @author noil/uoil
*/
public final class BattleInfoComponent extends DraggableHudComponent {
private CrystalAuraModule crystalAuraModule;
private KillAuraModule killAuraModule;
private AbstractClientPlayer currentOpponent;
private final Texture donorsTexture;
public BattleInfoComponent() {
super("BattleInfo");
this.setW(117);
this.setH(48);
this.donorsTexture = new Texture("john.jpg");
}
@Override
public void render(int mouseX, int mouseY, float partialTicks) {
super.render(mouseX, mouseY, partialTicks);
if (mc.world != null && mc.player != null) {
if (this.crystalAuraModule == null)
this.crystalAuraModule = (CrystalAuraModule) Seppuku.INSTANCE.getModuleManager().find(CrystalAuraModule.class);
if (this.killAuraModule == null)
this.killAuraModule = (KillAuraModule) Seppuku.INSTANCE.getModuleManager().find(KillAuraModule.class);
// local vars
int itemSpacingOffset = 2;
String targetType = "target";
// grid
if (!(mc.currentScreen instanceof GuiHudEditor)) {
// background
RenderUtil.drawRect(this.getX(), this.getY(), this.getX() + this.getW(), this.getY() + this.getH(), 0x75101010);
}
float closestDistance = 10000.0f;
EntityPlayer closestTarget = null;
for (EntityPlayer player : mc.world.playerEntities) {
if (player == mc.player || !(player instanceof AbstractClientPlayer))
continue;
float distanceToLocal = mc.player.getDistance(player);
if (distanceToLocal < closestDistance) {
closestDistance = distanceToLocal;
closestTarget = player;
}
}
if (this.crystalAuraModule.getCurrentAttackEntity() != null) {
this.currentOpponent = (AbstractClientPlayer) this.crystalAuraModule.getCurrentAttackPlayer();
targetType = "crystal aura";
} else if (this.killAuraModule.getCurrentTarget() != null) {
if (this.killAuraModule.getCurrentTarget() instanceof AbstractClientPlayer) {
this.currentOpponent = (AbstractClientPlayer) this.killAuraModule.getCurrentTarget();
targetType = "kill aura";
}
} else if (mc.objectMouseOver != null && mc.objectMouseOver.entityHit != null) {
if (mc.objectMouseOver.entityHit instanceof AbstractClientPlayer && mc.objectMouseOver.entityHit.isEntityAlive()) {
this.currentOpponent = (AbstractClientPlayer) mc.objectMouseOver.entityHit;
targetType = "mouse over";
}
} else {
this.currentOpponent = (AbstractClientPlayer) closestTarget;
targetType = "nearby" + " " + ((closestDistance < 10000.0f) ? (int) closestDistance + "m" : "");
}
if (this.currentOpponent != null) {
if (this.currentOpponent.isEntityAlive()) {
// head bg
RenderUtil.drawRect(this.getX() + 1, this.getY() + 1, this.getX() + 27, this.getY() + 27, 0x75101010);
// reset colors
GlStateManager.color(1, 1, 1, 1);
// head
if (Seppuku.INSTANCE.getCapeManager().find(this.currentOpponent) != null) {
//RenderUtil.drawTexture(this.getX() + 2, this.getY() + 2, 24, 24, 5f / 64f, 4f / 64f, 8f / 64f, 8f / 64f);
this.donorsTexture.render(this.getX() + 2, this.getY() + 2, 24, 24);
} else {
mc.getTextureManager().bindTexture(this.currentOpponent.getLocationSkin());
RenderUtil.drawTexture(this.getX() + 2, this.getY() + 2, 24, 24, 8f / 64f, 8f / 64f, 16f / 64f, 16f / 64f);
}
// armor and items
GlStateManager.pushMatrix();
RenderHelper.enableGUIStandardItemLighting();
for (int i = 3; i >= 0; i--) {
final ItemStack stack = this.currentOpponent.inventoryContainer.getSlot(8 - i).getStack();
RenderUtil.drawRect((int) this.getX() + itemSpacingOffset, (int) this.getY() + 29, (int) this.getX() + itemSpacingOffset + 18, (int) this.getY() + 29 + 17, 0x75101010);
if (!stack.isEmpty()) {
mc.getRenderItem().renderItemAndEffectIntoGUI(stack, (int) this.getX() + itemSpacingOffset + 1, (int) this.getY() + 29);
mc.getRenderItem().renderItemOverlays(mc.fontRenderer, stack, (int) this.getX() + itemSpacingOffset + 1, (int) this.getY() + 29);
}
itemSpacingOffset += 19;
}
final ItemStack mainHandStack = this.currentOpponent.getHeldItem(EnumHand.MAIN_HAND);
RenderUtil.drawRect((int) this.getX() + itemSpacingOffset, (int) this.getY() + 29, (int) this.getX() + itemSpacingOffset + 18, (int) this.getY() + 29 + 17, 0x75101010);
if (!mainHandStack.isEmpty()) {
mc.getRenderItem().renderItemAndEffectIntoGUI(mainHandStack, (int) this.getX() + itemSpacingOffset + 1, (int) this.getY() + 29);
mc.getRenderItem().renderItemOverlays(mc.fontRenderer, mainHandStack, (int) this.getX() + itemSpacingOffset + 1, (int) this.getY() + 29);
}
itemSpacingOffset += 19;
final ItemStack offHandStack = this.currentOpponent.getHeldItem(EnumHand.OFF_HAND);
RenderUtil.drawRect((int) this.getX() + itemSpacingOffset, (int) this.getY() + 29, (int) this.getX() + itemSpacingOffset + 18, (int) this.getY() + 29 + 17, 0x75101010);
if (!offHandStack.isEmpty()) {
mc.getRenderItem().renderItemAndEffectIntoGUI(offHandStack, (int) this.getX() + itemSpacingOffset + 1, (int) this.getY() + 29);
mc.getRenderItem().renderItemOverlays(mc.fontRenderer, offHandStack, (int) this.getX() + itemSpacingOffset + 1, (int) this.getY() + 29);
}
RenderHelper.disableStandardItemLighting();
GlStateManager.popMatrix();
// hp bg
RenderUtil.drawRect(this.getX() + 28, this.getY() + 2 + mc.fontRenderer.FONT_HEIGHT * 2, this.getX() + this.getW() - 2, this.getY() + 2 + mc.fontRenderer.FONT_HEIGHT * 2 + 8, 0x75101010);
// hp
final float hpWidth = ((this.currentOpponent.getHealth() * ((this.getX() + this.getW() - 2 - 1) - (this.getX() + 29))) / this.currentOpponent.getMaxHealth());
RenderUtil.drawSideGradientRect(this.getX() + 29, this.getY() + 2 + mc.fontRenderer.FONT_HEIGHT * 2 + 1, this.getX() + this.getW() - 2 - 1, this.getY() + 2 + mc.fontRenderer.FONT_HEIGHT * 2 + 7, 0x3000FF00, 0x300000FF);
RenderUtil.drawRect(this.getX() + 29, this.getY() + 2 + mc.fontRenderer.FONT_HEIGHT * 2 + 1, ((this.getX() + 29) - (this.getX() + this.getW() - 2 - 1)) + (this.getX() + this.getW() - 2 - 1) + hpWidth, this.getY() + 2 + mc.fontRenderer.FONT_HEIGHT * 2 + 7, ColorUtil.getHealthColor(this.currentOpponent));
RenderUtil.drawGradientRect(this.getX() + 29, this.getY() + 2 + mc.fontRenderer.FONT_HEIGHT * 2 + 1, this.getX() + this.getW() - 2 - 1, this.getY() + 2 + mc.fontRenderer.FONT_HEIGHT * 2 + 7, 0x00000000, 0x50000000);
//if (this.currentOpponent instanceof AbstractClientPlayer) {
//final AbstractClientPlayer abstractClientPlayer = (AbstractClientPlayer) this.currentOpponent;
//Minecraft.getMinecraft().getTextureManager().bindTexture(abstractClientPlayer.getLocationSkin());
//RenderUtil.drawTexture(this.getX(), this.getY(), 20, 20, 1, 0, 1, 1);
// }
// entity name
String entityName = this.currentOpponent.getName();
int entityNameWidth = mc.fontRenderer.getStringWidth(entityName);
if (entityNameWidth > this.getW() - 30) {
//entityName = this.currentOpponent.getName().substring(0, this.currentOpponent.getName().length() - 2) + "..";
this.setW(32 + mc.fontRenderer.getStringWidth(entityName));
} else if (entityNameWidth < 117 - 30) {
this.setW(117);
}
mc.fontRenderer.drawStringWithShadow(entityName, this.getX() + 28, this.getY() + 2, 0xFFEEEEEE);
// target type
mc.fontRenderer.drawStringWithShadow("[" + targetType + "]", this.getX() + 28, this.getY() + 2 + mc.fontRenderer.FONT_HEIGHT, 0xFF999999);
} else {
this.currentOpponent = null;
this.setW(117);
}
} else {
mc.fontRenderer.drawStringWithShadow("Waiting for target...", this.getX() + 2, this.getY() + 2, 0xFFAAAAAA);
}
//if (this.isMouseInside(mouseX, mouseY)) { // mouse is inside
// draw extra info
//}
} else {
mc.fontRenderer.drawStringWithShadow("(battle info)", this.getX(), this.getY(), 0xFFAAAAAA);
}
}
}