TurnBasedMinecraftMod/src/main/java/com/burnedkirby/TurnBasedMinecraft/client/EntitySelectionButton.java

100 lines
5.1 KiB
Java
Raw Normal View History

2019-11-25 06:29:25 +00:00
package com.burnedkirby.TurnBasedMinecraft.client;
2020-11-12 08:10:01 +00:00
import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
2019-10-21 07:13:11 +00:00
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.entity.Entity;
2019-10-21 07:13:11 +00:00
import net.minecraft.entity.LivingEntity;
2020-11-12 08:10:01 +00:00
import net.minecraft.util.text.StringTextComponent;
2020-11-12 08:10:01 +00:00
public class EntitySelectionButton extends Button {
2019-10-21 07:13:11 +00:00
private int entityID;
private boolean isSideA;
2020-11-12 08:10:01 +00:00
2019-10-21 07:13:11 +00:00
public EntitySelectionButton(int x, int y, int widthIn, int heightIn, String buttonText, int entityID, boolean isSideA, Button.IPressable onPress) {
2020-11-12 08:10:01 +00:00
super(x, y, widthIn, heightIn, new StringTextComponent(buttonText), onPress);
this.entityID = entityID;
this.isSideA = isSideA;
}
2020-11-12 08:10:01 +00:00
2019-10-21 07:13:11 +00:00
public int getID() {
2020-11-12 08:10:01 +00:00
return entityID;
2019-10-21 07:13:11 +00:00
}
2020-11-12 08:10:01 +00:00
2019-10-21 07:13:11 +00:00
public boolean getIsSideA() {
2020-11-12 08:10:01 +00:00
return isSideA;
}
@Override
2020-11-12 08:10:01 +00:00
public void func_230430_a_(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
super.func_230430_a_(matrixStack, mouseX, mouseY, partialTicks);
2019-10-21 07:13:11 +00:00
Entity e = Minecraft.getInstance().world.getEntityByID(entityID);
2020-11-12 08:10:01 +00:00
if (e != null && e instanceof LivingEntity && ((LivingEntity) e).isAlive()) {
int health = (int) (((LivingEntity) e).getHealth() + 0.5f);
int xpos = getX();
int xoffset;
2020-11-12 08:10:01 +00:00
if (isSideA) {
xpos += getWidth() + 4;
xoffset = 4;
2019-10-21 07:13:11 +00:00
} else {
xpos -= 6;
xoffset = -4;
}
2020-11-12 08:10:01 +00:00
if (health > 200) {
fill(matrixStack, xpos, getY() + getHeight() * 4 / 5, xpos + 2, getY() + getHeight(), 0xFFFF0000);
fill(matrixStack, xpos, getY() + getHeight() * 3 / 5, xpos + 2, getY() + getHeight() * 4 / 5, 0xFFFFFF00);
fill(matrixStack, xpos, getY() + getHeight() * 2 / 5, xpos + 2, getY() + getHeight() * 3 / 5, 0xFF00FF00);
fill(matrixStack, xpos, getY() + getHeight() / 5, xpos + 2, getY() + getHeight() * 2 / 5, 0xFF00FFFF);
fill(matrixStack, xpos, getY(), xpos + 2, getY() + getHeight() / 5, 0xFF0000FF);
int healthHeight = ((health - 200) * getHeight() / 100);
fill(matrixStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFFFFFFFF);
} else if (health > 100) {
fill(matrixStack, xpos, getY() + getHeight() * 4 / 5, xpos + 2, getY() + getHeight(), 0xFFFF0000);
fill(matrixStack, xpos, getY() + getHeight() * 3 / 5, xpos + 2, getY() + getHeight() * 4 / 5, 0xFFFFFF00);
fill(matrixStack, xpos, getY() + getHeight() * 2 / 5, xpos + 2, getY() + getHeight() * 3 / 5, 0xFF00FF00);
fill(matrixStack, xpos, getY() + getHeight() / 5, xpos + 2, getY() + getHeight() * 2 / 5, 0xFF00FFFF);
int healthHeight = ((health - 100) * getHeight() / 100);
fill(matrixStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFF0000FF);
} else if (health > 50) {
fill(matrixStack, xpos, getY() + getHeight() * 4 / 5, xpos + 2, getY() + getHeight(), 0xFFFF0000);
fill(matrixStack, xpos, getY() + getHeight() * 3 / 5, xpos + 2, getY() + getHeight() * 4 / 5, 0xFFFFFF00);
fill(matrixStack, xpos, getY() + getHeight() * 2 / 5, xpos + 2, getY() + getHeight() * 3 / 5, 0xFF00FF00);
int healthHeight = ((health - 50) * getHeight() / 50);
fill(matrixStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFF00FFFF);
} else if (health > 20) {
fill(matrixStack, xpos, getY() + getHeight() * 4 / 5, xpos + 2, getY() + getHeight(), 0xFFFF0000);
fill(matrixStack, xpos, getY() + getHeight() * 3 / 5, xpos + 2, getY() + getHeight() * 4 / 5, 0xFFFFFF00);
int healthHeight = ((health - 20) * getHeight() / 30);
fill(matrixStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFF00FF00);
} else if (health > 10) {
fill(matrixStack, xpos, getY() + getHeight() * 4 / 5, xpos + 2, getY() + getHeight(), 0xFFFF0000);
int healthHeight = ((health - 10) * getHeight() / 10);
fill(matrixStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFFFFFF00);
2019-10-21 07:13:11 +00:00
} else {
2020-11-12 08:10:01 +00:00
int healthHeight = (health * getHeight() / 10);
fill(matrixStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFFFF0000);
}
}
}
2020-11-12 08:10:01 +00:00
private int getX() {
return field_230690_l_;
}
private int getY() {
return field_230691_m_;
}
private int getWidth() {
return field_230688_j_;
}
private int getHeight() {
return field_230689_k_;
}
private void fill(MatrixStack matrixStack, int x, int y, int width, int height, int color) {
func_238467_a_(matrixStack, x, y, width, height, color);
}
}