Начинающий
- Статус
- Оффлайн
- Регистрация
- 22 Мар 2022
- Сообщения
- 349
- Реакции
- 8
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
ну вот прикол с ректом, текст рисуется нормально а рект уебан
я уже хз что тут не так
Код:
package dev.faith.module.impl.visual;
import com.darkmagician6.eventapi.EventTarget;
import dev.faith.module.api.Category;
import dev.faith.module.api.Function;
import dev.faith.module.api.Module;
import dev.faith.event.impl.render.EventRender2D;
import dev.faith.util.impl.render.RenderUtil;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.phys.Vec3;
import net.minecraft.util.Mth;
import org.joml.Matrix4f;
import org.joml.Vector3f;
import org.joml.Vector4f;
@Function(name = "Tags", category = Category.VISUAL)
public class Tags extends Module {
public Tags() {
super();
setDesc("Отображает теги над игроками с их ником и здоровьем");
}
@EventTarget
public void onRender2D(EventRender2D event) {
Minecraft mc = Minecraft.getInstance();
if (!this.isToggled() || mc.level == null || mc.player == null) return;
GuiGraphics guiGraphics = event.getGuiGraphics();
float partialTicks = event.getDeltaTracker().getGameTimeDeltaPartialTick(false);
for (Player player : mc.level.players()) {
if (player == mc.player) continue;
double distance = player.distanceTo(mc.player);
if (distance > 50) continue;
String playerName = player.getName().getString();
float health = player.getHealth();
String tagText = String.format("%s HP: %.1f", playerName, health);
Vec3 playerPos = getInterpolatedPosition(player, partialTicks);
Vector3f screenPos = worldToScreen(mc, playerPos);
if (screenPos == null) {
continue;
}
float x = screenPos.x();
float y = screenPos.y();
float scale = Math.min(1.0f + (float)(distance * 0.01f), 1.3f);
float textWidth = fontManager.SFPRO[0].getStringWidth(tagText);
float textHeight = fontManager.SFPRO[0].getSize();
float padding = 2;
float rectWidth = textWidth + padding * 2;
float rectHeight = textHeight + padding * 2;
guiGraphics.pose().pushPose();
guiGraphics.pose().translate(x, y, 0);
guiGraphics.pose().scale(scale, scale, 1.0f);
guiGraphics.pose().translate(-x, -y, 0);
float rectX = x - rectWidth / 2;
float rectY = y - rectHeight / 2;
int backgroundColor = 0x80000000;
RenderUtil.drawRoundedRect(guiGraphics,
rectX,
rectY,
rectX + rectWidth,
rectY + rectHeight,
2,
backgroundColor
);
int textColor;
float healthPercent = player.getHealth() / player.getMaxHealth();
if (healthPercent > 0.6f) {
textColor = 0xFF00FF00;
} else if (healthPercent > 0.3f) {
textColor = 0xFFFFFF00;
} else {
textColor = 0xFFFF0000;
}
fontManager.SFPRO[0].drawString(guiGraphics, tagText, x - textWidth / 2, y - textHeight / 2, textColor);
guiGraphics.pose().popPose();
}
}
private Vec3 getInterpolatedPosition(Player player, float partialTicks) {
return new Vec3(
Mth.lerp(partialTicks, player.xOld, player.getX()),
Mth.lerp(partialTicks, player.yOld, player.getY()) + player.getBbHeight() + 0.5,
Mth.lerp(partialTicks, player.zOld, player.getZ())
);
}
private Vector3f worldToScreen(Minecraft mc, Vec3 worldPos) {
try {
Matrix4f modelViewMatrix = getModelViewMatrix(mc);
Matrix4f projectionMatrix = mc.gameRenderer.getProjectionMatrix(mc.options.fov().get());
Vector4f pos = new Vector4f((float) worldPos.x, (float) worldPos.y, (float) worldPos.z, 1.0f);
pos.mul(modelViewMatrix);
pos.mul(projectionMatrix);
if (pos.w <= 0) {
return null;
}
pos.div(pos.w);
if (Math.abs(pos.x) > 1.0f || Math.abs(pos.y) > 1.0f || Math.abs(pos.z) > 1.0f) {
return null;
}
int screenWidth = mc.getWindow().getGuiScaledWidth();
int screenHeight = mc.getWindow().getGuiScaledHeight();
float screenX = (pos.x * 0.5f + 0.5f) * screenWidth;
float screenY = (1.0f - (pos.y * 0.5f + 0.5f)) * screenHeight;
return new Vector3f(screenX, screenY, pos.z);
} catch (Exception e) {
return null;
}
}
private Matrix4f getModelViewMatrix(Minecraft mc) {
Camera camera = mc.gameRenderer.getMainCamera();
Vec3 cameraPos = camera.getPosition();
Matrix4f matrix = new Matrix4f();
matrix.rotateX((float) Math.toRadians(camera.getXRot()));
matrix.rotateY((float) Math.toRadians(camera.getYRot() + 180.0f));[ATTACH type="full"]307826[/ATTACH]
matrix.translate((float) -cameraPos.x, (float) -cameraPos.y, (float) -cameraPos.z);
return matrix;
}
}
я уже хз что тут не так