2019-11-25 06:29:25 +00:00
|
|
|
package com.burnedkirby.TurnBasedMinecraft.client;
|
2018-09-11 06:15:31 +00:00
|
|
|
|
2023-03-31 05:22:58 +00:00
|
|
|
import com.burnedkirby.TurnBasedMinecraft.common.CommonProxy;
|
|
|
|
import com.burnedkirby.TurnBasedMinecraft.common.TurnBasedMinecraftMod;
|
2022-05-17 05:47:42 +00:00
|
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
2018-09-14 03:44:45 +00:00
|
|
|
import net.minecraft.client.Minecraft;
|
2023-03-31 05:22:58 +00:00
|
|
|
import net.minecraft.client.gui.components.AbstractButton;
|
|
|
|
import net.minecraft.client.gui.narration.NarratedElementType;
|
|
|
|
import net.minecraft.client.gui.narration.NarrationElementOutput;
|
2022-06-08 02:59:34 +00:00
|
|
|
import net.minecraft.network.chat.Component;
|
2022-05-17 05:47:42 +00:00
|
|
|
import net.minecraft.world.entity.Entity;
|
|
|
|
import net.minecraft.world.entity.LivingEntity;
|
2018-09-11 06:15:31 +00:00
|
|
|
|
2023-03-31 05:22:58 +00:00
|
|
|
public class EntitySelectionButton extends AbstractButton {
|
|
|
|
TBMButtonPress onPress;
|
2019-10-21 07:13:11 +00:00
|
|
|
private int entityID;
|
2018-09-14 03:44:45 +00:00
|
|
|
private boolean isSideA;
|
2020-11-12 08:10:01 +00:00
|
|
|
|
2023-03-31 05:22:58 +00:00
|
|
|
public EntitySelectionButton(int x, int y, int widthIn, int heightIn, String buttonText, int entityID, boolean isSideA, TBMButtonPress onPress) {
|
|
|
|
super(x, y, widthIn, heightIn, Component.literal(buttonText));
|
|
|
|
this.onPress = onPress;
|
2018-09-11 06:15:31 +00:00
|
|
|
this.entityID = entityID;
|
2018-09-14 03:44:45 +00:00
|
|
|
this.isSideA = isSideA;
|
2018-09-11 06:15:31 +00:00
|
|
|
}
|
2020-11-12 08:10:01 +00:00
|
|
|
|
2023-03-31 05:22:58 +00:00
|
|
|
public EntitySelectionButton(int x, int y, int widthIn, int heightIn, Component buttonTextComponent, int entityID, boolean isSideA, TBMButtonPress onPress) {
|
|
|
|
super(x, y, widthIn, heightIn, buttonTextComponent);
|
|
|
|
this.onPress = onPress;
|
2022-06-08 02:59:34 +00:00
|
|
|
this.entityID = entityID;
|
|
|
|
this.isSideA = isSideA;
|
|
|
|
}
|
|
|
|
|
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;
|
2018-09-14 03:44:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2022-05-17 05:47:42 +00:00
|
|
|
public void renderButton(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) {
|
|
|
|
super.renderButton(poseStack, mouseX, mouseY, partialTicks);
|
2021-05-21 05:44:31 +00:00
|
|
|
Entity e = Minecraft.getInstance().level.getEntity(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();
|
2018-09-14 03:44:45 +00:00
|
|
|
int xoffset;
|
2020-11-12 08:10:01 +00:00
|
|
|
if (isSideA) {
|
|
|
|
xpos += getWidth() + 4;
|
2018-09-14 03:44:45 +00:00
|
|
|
xoffset = 4;
|
2019-10-21 07:13:11 +00:00
|
|
|
} else {
|
2018-09-14 03:44:45 +00:00
|
|
|
xpos -= 6;
|
|
|
|
xoffset = -4;
|
|
|
|
}
|
2020-11-12 08:10:01 +00:00
|
|
|
if (health > 200) {
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 4 / 5, xpos + 2, getY() + getHeight(), 0xFFFF0000);
|
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 3 / 5, xpos + 2, getY() + getHeight() * 4 / 5, 0xFFFFFF00);
|
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 2 / 5, xpos + 2, getY() + getHeight() * 3 / 5, 0xFF00FF00);
|
|
|
|
fill(poseStack, xpos, getY() + getHeight() / 5, xpos + 2, getY() + getHeight() * 2 / 5, 0xFF00FFFF);
|
|
|
|
fill(poseStack, xpos, getY(), xpos + 2, getY() + getHeight() / 5, 0xFF0000FF);
|
2020-11-12 08:10:01 +00:00
|
|
|
int healthHeight = ((health - 200) * getHeight() / 100);
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFFFFFFFF);
|
2020-11-12 08:10:01 +00:00
|
|
|
} else if (health > 100) {
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 4 / 5, xpos + 2, getY() + getHeight(), 0xFFFF0000);
|
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 3 / 5, xpos + 2, getY() + getHeight() * 4 / 5, 0xFFFFFF00);
|
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 2 / 5, xpos + 2, getY() + getHeight() * 3 / 5, 0xFF00FF00);
|
|
|
|
fill(poseStack, xpos, getY() + getHeight() / 5, xpos + 2, getY() + getHeight() * 2 / 5, 0xFF00FFFF);
|
2020-11-12 08:10:01 +00:00
|
|
|
int healthHeight = ((health - 100) * getHeight() / 100);
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFF0000FF);
|
2020-11-12 08:10:01 +00:00
|
|
|
} else if (health > 50) {
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 4 / 5, xpos + 2, getY() + getHeight(), 0xFFFF0000);
|
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 3 / 5, xpos + 2, getY() + getHeight() * 4 / 5, 0xFFFFFF00);
|
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 2 / 5, xpos + 2, getY() + getHeight() * 3 / 5, 0xFF00FF00);
|
2020-11-12 08:10:01 +00:00
|
|
|
int healthHeight = ((health - 50) * getHeight() / 50);
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFF00FFFF);
|
2020-11-12 08:10:01 +00:00
|
|
|
} else if (health > 20) {
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 4 / 5, xpos + 2, getY() + getHeight(), 0xFFFF0000);
|
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 3 / 5, xpos + 2, getY() + getHeight() * 4 / 5, 0xFFFFFF00);
|
2020-11-12 08:10:01 +00:00
|
|
|
int healthHeight = ((health - 20) * getHeight() / 30);
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFF00FF00);
|
2020-11-12 08:10:01 +00:00
|
|
|
} else if (health > 10) {
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, xpos, getY() + getHeight() * 4 / 5, xpos + 2, getY() + getHeight(), 0xFFFF0000);
|
2020-11-12 08:10:01 +00:00
|
|
|
int healthHeight = ((health - 10) * getHeight() / 10);
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, 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);
|
2022-05-17 05:47:42 +00:00
|
|
|
fill(poseStack, xpos + xoffset, getY() + getHeight() - healthHeight, xpos + xoffset + 2, getY() + getHeight(), 0xFFFF0000);
|
2018-09-14 03:44:45 +00:00
|
|
|
}
|
|
|
|
}
|
2018-09-11 06:15:31 +00:00
|
|
|
}
|
2020-11-12 08:10:01 +00:00
|
|
|
|
2023-03-31 05:22:58 +00:00
|
|
|
@Override
|
|
|
|
protected void updateWidgetNarration(NarrationElementOutput p_259858_) {
|
|
|
|
p_259858_.add(NarratedElementType.HINT, TurnBasedMinecraftMod.proxy.getEntity(entityID, Minecraft.getInstance().level.dimension()).getName());
|
2020-11-12 08:10:01 +00:00
|
|
|
}
|
|
|
|
|
2023-03-31 05:22:58 +00:00
|
|
|
@Override
|
|
|
|
public void onPress() {
|
|
|
|
onPress.onPress(this);
|
2020-11-12 08:10:01 +00:00
|
|
|
}
|
2018-09-11 06:15:31 +00:00
|
|
|
}
|