Начинающий
- Статус
- Оффлайн
- Регистрация
- 6 Июн 2024
- Сообщения
- 39
- Реакции
- 0
- Выберите загрузчик игры
- Прочие моды
NameTagsRender:
package killse.dest.client.features.modules.render.nametags;
import killse.dest.api.utils.render.display.BoxRender;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.text.Text;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import org.joml.Vector2f;
import killse.dest.api.utils.render.RenderUtil;
import killse.dest.api.event.events.render.Render2DEvent;
import killse.dest.api.system.configs.FriendManager;
import killse.dest.api.system.interfaces.QuickImports;
import killse.dest.api.utils.color.UIColors;
import killse.dest.api.utils.math.MathUtil;
import killse.dest.api.utils.math.ProjectionUtil;
import killse.dest.api.utils.render.RenderUtil;
import killse.dest.api.utils.render.display.BlurRectRender;
import killse.dest.api.utils.render.fonts.Font;
import killse.dest.api.utils.render.fonts.Fonts;
import killse.dest.client.features.modules.render.InterfaceModule;
import java.awt.*;
public class NameTagsRender implements QuickImports {
private final NameTagsModule module;
private final NameTagsItems nameTagsItems;
private final NameTagsPotions nameTagsPotions;
public NameTagsRender(NameTagsModule module) {
this.module = module;
this.nameTagsItems = new NameTagsItems(module);
this.nameTagsPotions = new NameTagsPotions(module);
}
public void onRender(Render2DEvent.Render2DEventData event) {
for (Entity entity1 : mc.world.getEntities()) {
if (entity1 instanceof PlayerEntity player) {
if (module.entityFilter.isValid(player) ||
player == mc.player && module.targets.isEnabled("Self") && !mc.options.getPerspective().isFirstPerson()) {
renderTag(player, event.context(), event.partialTicks());
}
}
}
}
private void renderTag(Entity entity, DrawContext context, float partialTicks) {
double xI = MathHelper.lerp(partialTicks, entity.prevX, entity.getX());
double yI = MathHelper.lerp(partialTicks, entity.prevY, entity.getY());
double zI = MathHelper.lerp(partialTicks, entity.prevZ, entity.getZ());
if (module.box3d.getValue()) {
render3DBox(entity, xI, yI, zI);
}
Box box = entity.getBoundingBox().offset(xI - entity.getX(), yI - entity.getY(), zI - entity.getZ());
float minX = Float.MAX_VALUE;
float minY = Float.MAX_VALUE;
float maxX = Float.MIN_VALUE;
float maxY = Float.MIN_VALUE;
for (int i = 0; i < 8; i++) {
double cornerX = (i % 2 == 0) ? box.minX : box.maxX;
double cornerY = ((i / 2) % 2 == 0) ? box.minY : box.maxY;
double cornerZ = ((i / 4) % 2 == 0) ? box.minZ : box.maxZ;
Vector2f projected = ProjectionUtil.project(new Vec3d(cornerX, cornerY, cornerZ));
minX = Math.min(minX, projected.x);
minY = Math.min(minY, projected.y);
maxX = Math.max(maxX, projected.x);
maxY = Math.max(maxY, projected.y);
}
float scale = module.scale.getValue();
float x = (minX + maxX) / 2f;
float y = minY - 20f * scale;
boolean inRegion = x > 0 && x < mc.getWindow().getScaledWidth() || y > 0 && y < mc.getWindow().getScaledHeight();
if (inRegion) {
renderName(entity, x, y, context);
if (!(entity instanceof PlayerEntity player)) return;
if (module.information.isEnabled("Items")) {
nameTagsItems.renderItems(player, x, y, context);
}
if (module.information.isEnabled("Potions")) {
nameTagsPotions.renderPotions(player, maxX + 2f * scale, minY, context);
}
if (module.options.isEnabled("Special items")) {
nameTagsItems.renderSpecialItems(player, x, maxY - 2f * scale, context);
}
}
}
private void renderName(Entity entity, float x, float y, DrawContext context) {
MatrixStack matrixStack = context.getMatrices();
Font font = Fonts.SF_MEDIUM;
String name = entity.getName().getString();
Text prefix = null;
if (entity instanceof PlayerEntity player) {
prefix = player.getScoreboardTeam() != null ? player.getScoreboardTeam().getPrefix() : null;
}
float scale = module.scale.getValue();
float size = 8f * scale;
float gap = 2f * scale;
float nameWidth = font.getWidth(name, size);
float prefixWidth = font.getWidth(prefix, size);
boolean hasPrefix = prefixWidth > 0.5 && prefix != null;
float spaceWidth = !hasPrefix ? 0 : font.getWidth(" ", size);
float textWidth = prefixWidth + spaceWidth + nameWidth;
x -= textWidth / 2f + gap;
Color color = !FriendManager.getInstance().contains(entity.getName().getString()) ? module.color.getValue() : module.friendColor.getValue();
RenderUtil.BLUR_RECT.draw(matrixStack, x, y, textWidth + gap * 2f, size + gap * 2f, scale, color, 1f - module.glassy.getValue());
float textX = x + gap;
float textY = y + gap;
if (hasPrefix) {
font.drawText(matrixStack, prefix, textX, textY, size);
textX += prefixWidth + spaceWidth;
}
font.drawText(matrixStack, name, textX, textY, size, module.textColor.getValue());
}
private void render3DBox(Entity entity, double x, double y, double z) {
Box box = entity.getBoundingBox().offset(x - entity.getX(), y - entity.getY(), z - entity.getZ());
Color themeColor = UIColors.primary();
float alpha = module.boxAlpha.getValue();
Color fillColor = new Color(themeColor.getRed(), themeColor.getGreen(), themeColor.getBlue(), (int) (alpha * 255));
Color outlineColor = new Color(themeColor.getRed(), themeColor.getGreen(), themeColor.getBlue(), 255);
float x1 = (float) box.minX;
float y1 = (float) box.minY;
float z1 = (float) box.minZ;
float x2 = (float) box.maxX;
float y2 = (float) box.maxY;
float z2 = (float) box.maxZ;
RenderUtil.BOX.drawBox(x1, y1, z1, x2, y2, z2, 1.5f, fillColor, BoxRender.Render.FILL, 0.0f);
RenderUtil.BOX.drawBox(x1, y1, z1, x2, y2, z2, 1.5f, outlineColor, BoxRender.Render.OUTLINE, 0.0f);
}
}
если че цвет от темы и есть сила заливки