Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 18 Фев 2024
- Сообщения
- 5
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Привет, сливаю переписанный таргет худ с зенита:
А вот код:
А вот код:
Код:
package cloud.dev.implement.features.draggables;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.RenderPhase;
import net.minecraft.client.render.entity.EntityRenderer;
import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.render.entity.state.LivingEntityRenderState;
import net.minecraft.client.render.item.ItemRenderState;
import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.client.texture.AbstractTexture;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.ModelTransformationMode;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.MathHelper;
import cloud.dev.api.feature.draggable.AbstractDraggable;
import cloud.dev.api.system.animation.Animation;
import cloud.dev.api.system.animation.Direction;
import cloud.dev.api.system.animation.implement.DecelerateAnimation;
import cloud.dev.api.system.font.FontRenderer;
import cloud.dev.api.system.font.Fonts;
import cloud.dev.api.system.shape.ShapeProperties;
import cloud.dev.common.util.color.ColorUtil;
import cloud.dev.common.util.item.ItemUtil;
import cloud.dev.common.util.math.MathUtil;
import cloud.dev.common.util.other.StopWatch;
import cloud.dev.common.util.entity.PlayerIntersectionUtil;
import cloud.dev.common.util.render.Render2DUtil;
import cloud.dev.common.util.render.ScissorManager;
import cloud.dev.core.Main;
import cloud.dev.implement.features.modules.combat.Aura;
import cloud.dev.implement.features.modules.combat.TriggerBot;
import java.util.List;
import java.util.stream.StreamSupport;
public class TargetHud extends AbstractDraggable {
private final Animation animation = new DecelerateAnimation().setMs(200).setValue(1);
private final StopWatch stopWatch = new StopWatch();
private LivingEntity lastTarget;
private Item lastItem = Items.AIR;
private float health;
public TargetHud() {
super("Target Hud", 10, 40, 100, 36,true);
}
@Override
public boolean visible() {
return scaleAnimation.isDirection(Direction.FORWARDS);
}
@Override
public void tick() {
LivingEntity auraTarget = Aura.getInstance().getTarget();
LivingEntity triggerBotTarget = TriggerBot.getInstance().getTarget();
if (auraTarget != null) {
lastTarget = auraTarget;
startAnimation();
} else if (triggerBotTarget != null) {
lastTarget = triggerBotTarget;
startAnimation();
stopWatch.reset();
} else if (PlayerIntersectionUtil.isChat(mc.currentScreen)) {
lastTarget = mc.player;
startAnimation();
} else if (stopWatch.finished(500)) stopAnimation();
}
@Override
public void drawDraggable(DrawContext context) {
if (lastTarget != null) {
MatrixStack matrix = context.getMatrices();
drawUsingItem(context, matrix);
drawArmor(context, matrix);
drawMain(context, matrix);
drawFace(context);
}
}
private void drawMain(DrawContext context, MatrixStack matrix) {
FontRenderer fontn = Fonts.getSize(18, Fonts.Type.BOLD);
FontRenderer font = Fonts.getSize(18);
float hp = PlayerIntersectionUtil.getHealth(lastTarget);
float widthHp = 86;
String stringHp = PlayerIntersectionUtil.getHealthString(hp);
health = MathHelper.clamp(MathUtil.interpolateSmooth(3, health, Math.round(hp / lastTarget.getMaxHealth() * widthHp)), 2, widthHp);
blur.render(ShapeProperties.create(matrix, getX(), getY(), getWidth(), getHeight()).round(5).softness(1)
.thickness(2).outlineColor(ColorUtil.getOutline()).color(ColorUtil.getRect(0.7F)).build());
if (font.getStringWidth(lastTarget.getName().getString()) > 60) {
ScissorManager scissorManager = Main.getInstance().getScissorManager();
scissorManager.push(matrix.peek().getPositionMatrix(), getX(), getY(), getWidth() - 1, getHeight());
font.drawGradientString(matrix, lastTarget.getName().getString(), getX() + 34, getY() + 8, ColorUtil.getText(), ColorUtil.getText(0.6F));
scissorManager.pop();
} else font.drawString(matrix, lastTarget.getName().getString(), getX() + 32, getY() + 8, ColorUtil.getText());
rectangle.render(ShapeProperties.create(matrix, getX() + 6.3f, getY() + 27F, widthHp, 6F)
.round(2.75F).color(0xFF060712).build());
rectangle.render(ShapeProperties.create(matrix, getX() + 6.3f, getY() + 27F, health, 6F)
.softness(6).round(3).color(ColorUtil.roundClientColor(0.2F)).build());
// тут на ваше решение
rectangle.render(ShapeProperties.create(matrix, getX() + 6.3f, getY() + 27F, health, 6F)
.round(2.75F).color(ColorUtil.roundClientColor(1)).build());
float width = Fonts.getSize(14).getStringWidth(stringHp);
Fonts.getSize(14).drawString(matrix, stringHp + " HP", getX() + 32, getY() + 19, ColorUtil.getText());
}
private void drawArmor(DrawContext context, MatrixStack matrix) {
List<ItemStack> items = StreamSupport.stream(lastTarget.getEquippedItems().spliterator(), false).filter(s -> !s.isEmpty()).toList();
if (!items.isEmpty()) {
float x = 312312;
float y = getY() - 13;
float itemX = -10.5F;
matrix.push();
matrix.translate(x, y, -200);
blur.render(ShapeProperties.create(matrix, 0, 0, items.size() * 11, 11).round(2.5F).softness(1)
.thickness(2).outlineColor(ColorUtil.getOutline()).color(ColorUtil.getRect(0.7F)).build());
for (ItemStack stack : items) {
Render2DUtil.defaultDrawStack(context, stack, itemX += 11, 0.5F, false, true, 0.5F);
}
matrix.pop();
}
}
private void drawUsingItem(DrawContext context, MatrixStack matrix) {
animation.setDirection(lastTarget.isUsingItem() ? Direction.FORWARDS : Direction.BACKWARDS);
if (!lastTarget.getActiveItem().isEmpty() && lastTarget.getActiveItem().getCount() != 0) {
lastItem = lastTarget.getActiveItem().getItem();
}
if (!animation.isFinished(Direction.BACKWARDS) && !lastItem.equals(Items.AIR)) {
int size = 24;
float anim = animation.getOutput().floatValue();
float progress = (lastTarget.getItemUseTime() + tickCounter.getTickDelta(false)) / ItemUtil.maxUseTick(lastItem) * 360;
float x = getX() - (size + 5) * anim;
float y = getY() + 6;
ScissorManager scissorManager = Main.getInstance().getScissorManager();
scissorManager.push(matrix.peek().getPositionMatrix(), getX() - 50, getY(), 50, getHeight());
MathUtil.setAlpha(anim, () -> {
blur.render(ShapeProperties.create(matrix, x, y, size, size).round(12).softness(1)
.thickness(2).outlineColor(ColorUtil.getOutline()).color(ColorUtil.getRect(0.7F)).build());
arc.render(ShapeProperties.create(matrix, x, y, size, size).round(0.4F).thickness(0.2f).end(progress)
.color(ColorUtil.fade(0), ColorUtil.fade(200), ColorUtil.fade(0), ColorUtil.fade(200)).build());
Render2DUtil.defaultDrawStack(context, lastItem.getDefaultStack(), x + 3, y + 3, false, false, 1);
});
scissorManager.pop();
}
}
private void drawFace(DrawContext context) {
EntityRenderer<? super LivingEntity, ?> baseRenderer = mc.getEntityRenderDispatcher().getRenderer(lastTarget);
if (!(baseRenderer instanceof LivingEntityRenderer<?, ?, ?>)) {
return;
}
@SuppressWarnings("unchecked")
LivingEntityRenderer<LivingEntity, LivingEntityRenderState, ?> renderer = (LivingEntityRenderer<LivingEntity, LivingEntityRenderState, ?>) baseRenderer;
LivingEntityRenderState state = renderer.getAndUpdateRenderState(lastTarget, tickCounter.getTickDelta(false));
Identifier textureLocation = renderer.getTexture(state);
AbstractTexture abstractTexture = mc.getTextureManager().getTexture(textureLocation);
/* MinecraftTextureHelper minecraftTextureHelper = MinecraftTextureHelper.INSTANCE;
RenderPhase.Texture texture = minecraftTextureHelper.getOrCreateTexture(abstractTexture);
MinecraftTextureHelper.UV uv = minecraftTextureHelper.getFaceUV(currentTarget.getClass()); */
Render2DUtil.drawTexture(context, textureLocation, getX() + 5.7f, getY() + 4.5F, 21, 3, 8, 8, 64, ColorUtil.getRect(1), ColorUtil.multRed(-1, 1 + lastTarget.hurtTime / 4F));
}
}
Последнее редактирование: