Начинающий
- Статус
- Оффлайн
- Регистрация
- 18 Май 2023
- Сообщения
- 73
- Реакции
- 0
Код:
package mcp.client.module.render;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import mcp.client.events.Subscribe;
import mcp.client.events.impl.Render3DEvent;
import mcp.client.module.settings.Category;
import mcp.client.module.settings.Module;
import mcp.client.settings.BooleanSetting;
import mcp.client.settings.MultiSetting;
import mcp.client.settings.SliderSetting;
import mcp.client.ui.clickgui.other.ModuleCategory;
import mcp.client.utils.fonts.Fonts;
import mcp.client.utils.render.ColorManager;
import mcp.client.utils.render.RenderUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.multiplayer.PlayerInfo;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.core.component.DataComponents;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.animal.Animal;
import net.minecraft.world.entity.monster.Monster;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.enchantment.ItemEnchantments;
import org.lwjgl.opengl.GL11;
import java.util.*;
public class NameTags extends Module {
public final MultiSetting targets = new MultiSetting("Targets", "Players", "Mobs", "Animals");
public final MultiSetting elements = new MultiSetting("Elements", "Armor", "Potions", "Enchants", "Special", "Background");
public final SliderSetting scale = new SliderSetting("Scale", 1.0, 0.5, 2.0);
public final BooleanSetting self = new BooleanSetting("Self", false);
private static final Set<String> ENCHANT_WHITELIST = new HashSet<>(Arrays.asList(
"protection", "fire_protection", "blast_protection", "projectile_protection",
"sharpness", "fire_aspect", "unbreaking", "efficiency", "mending", "power", "punch"
));
public NameTags() {
super("NameTags", Category.RENDER);
addSettings(targets, elements, scale, self);
targets.setEnabled("Players", true);
elements.setEnabled("Armor", true);
elements.setEnabled("Background", true);
elements.setEnabled("Enchants", true);
}
@Subscribe
public void onRender3D(Render3DEvent event) {
Minecraft mc = Minecraft.getInstance();
if (mc.level == null || mc.player == null) return;
for (Entity entity : mc.level.entitiesForRendering()) {
if (!(entity instanceof LivingEntity living)) continue;
if (living == mc.player && (!self.isEnabled() || mc.options.getCameraType().isFirstPerson())) continue;
if (!isValidTarget(living)) continue;
renderTag(event.getPoseStack(), living, event);
}
}
private boolean isValidTarget(LivingEntity entity) {
if (entity instanceof Player) return targets.isEnabled("Players");
if (entity instanceof Monster) return targets.isEnabled("Mobs");
if (entity instanceof Animal) return targets.isEnabled("Animals");
return false;
}
private void renderTag(PoseStack stack, LivingEntity entity, Render3DEvent event) {
Minecraft mc = Minecraft.getInstance();
double x = entity.xo + (entity.getX() - entity.xo) * event.getPartialTicks() - event.getCamX();
double y = entity.yo + (entity.getY() - entity.yo) * event.getPartialTicks() - event.getCamY();
double z = entity.zo + (entity.getZ() - entity.zo) * event.getPartialTicks() - event.getCamZ();
String name = entity.getDisplayName().getString();
String hpText = " " + (int) Math.ceil(entity.getHealth()) + " HP";
if (entity instanceof Player player && mc.getConnection() != null) {
PlayerInfo info = mc.getConnection().getPlayerInfo(player.getUUID());
if (info != null) {
Component tabDisplay = info.getTabListDisplayName();
if (tabDisplay != null) {
name = tabDisplay.getString();
hpText = "";
} else {
name = info.getProfile().getName();
}
}
}
float[] accentRGB = ColorManager.getRGB();
int accent = ((int) (accentRGB[0] * 255) << 16) | ((int) (accentRGB[1] * 255) << 8) | (int) (accentRGB[2] * 255) | (255 << 24);
float fontSize = 10f;
float width = Fonts.INTER_BOLD.getWidth(name + hpText, fontSize) + 10;
float height = 14;
stack.pushPose();
stack.translate(x, y + entity.getBbHeight() + 0.6, z);
stack.mulPose(mc.getEntityRenderDispatcher().cameraOrientation());
float dist = mc.player.distanceTo(entity);
float s = (float) (Math.max(dist / 15.0f, 1.0f) * 0.025f * scale.getValue());
stack.scale(-s, -s, s);
GuiGraphics graphics = new GuiGraphics(mc, mc.renderBuffers().bufferSource());
graphics.pose().last().pose().set(stack.last().pose());
graphics.pose().last().normal().set(stack.last().normal());
RenderSystem.enableBlend();
RenderSystem.disableDepthTest();
float rx = -width / 2f;
if (elements.isEnabled("Background")) {
RenderUtils.drawRoundedRect(graphics, rx, 0, width, height, 3, 0x90000000);
}
Fonts.INTER_BOLD.drawString(graphics, name, rx + 5, 3f, -1, fontSize);
if (!hpText.isEmpty()) {
Fonts.INTER_BOLD.drawString(graphics, hpText, rx + 5 + Fonts.INTER_BOLD.getWidth(name, fontSize), 3f, accent, fontSize);
}
mc.renderBuffers().bufferSource().endBatch();
if (elements.isEnabled("Potions")) {
renderPotions(graphics, entity, width / 2f + 4, 0);
}
if (elements.isEnabled("Armor")) {
renderArmor(graphics, entity, 0, -18);
}
if (elements.isEnabled("Special") && entity instanceof Player player) {
renderSpecial(graphics, player, 0, height + 4);
}
mc.renderBuffers().bufferSource().endBatch();
RenderSystem.enableDepthTest();
stack.popPose();
}
private void renderPotions(GuiGraphics graphics, LivingEntity entity, float x, float y) {
float currentY = y;
for (MobEffectInstance effect : entity.getActiveEffects()) {
String name = effect.getEffect().value().getDisplayName().getString();
if (effect.getAmplifier() > 0) name += " " + (effect.getAmplifier() + 1);
String time = String.format("%d:%02d", (effect.getDuration() / 20) / 60, (effect.getDuration() / 20) % 60);
String text = name + " §7" + time;
Fonts.INTER_BOLD.drawString(graphics, text, x, currentY, -1, 7f);
currentY += 8;
}
}
private void renderArmor(GuiGraphics graphics, LivingEntity entity, float x, float y) {
Minecraft mc = Minecraft.getInstance();
List<ItemStack> items = new ArrayList<>();
items.add(entity.getMainHandItem());
if (entity instanceof Player player) {
for (ItemStack armor : player.getArmorSlots()) items.add(armor);
}
items.add(entity.getOffhandItem());
items.removeIf(ItemStack::isEmpty);
if (items.isEmpty()) return;
float startX = x - (items.size() * 16 + (items.size() - 1) * 2) / 2f;
RenderSystem.enableDepthTest();
RenderSystem.clear(GL11.GL_DEPTH_BUFFER_BIT);
for (int i = 0; i < items.size(); i++) {
ItemStack stack = items.get(i);
float ix = startX + i * 18;
graphics.pose().pushPose();
graphics.pose().translate(ix, y, 0);
mc.getItemRenderer().renderStatic(stack, ItemDisplayContext.GUI, 0xF000F0, OverlayTexture.NO_OVERLAY, graphics.pose(), mc.renderBuffers().bufferSource(), mc.level, 0);
graphics.pose().popPose();
if (elements.isEnabled("Enchants")) {
renderEnchants(graphics, stack, ix, y - 2);
}
}
mc.renderBuffers().bufferSource().endBatch();
RenderSystem.disableDepthTest();
}
private void renderEnchants(GuiGraphics graphics, ItemStack stack, float x, float y) {
ItemEnchantments enchantments = stack.get(DataComponents.ENCHANTMENTS);
if (enchantments == null || enchantments.isEmpty()) return;
float curY = y;
var registry = Minecraft.getInstance().level.registryAccess().lookupOrThrow(Registries.ENCHANTMENT);
for (var entry : enchantments.entrySet()) {
ResourceLocation loc = registry.getKey(entry.getKey().value());
if (loc == null) continue;
String id = loc.getPath();
if (!ENCHANT_WHITELIST.contains(id)) continue;
String shortName = id.substring(0, Math.min(id.length(), 3)).toUpperCase();
Fonts.INTER_BOLD.drawString(graphics, shortName + entry.getIntValue(), x, curY, -1, 5f);
curY -= 6;
}
}
private void renderSpecial(GuiGraphics graphics, Player player, float x, float y) {
List<String> found = new ArrayList<>();
for (int i = 0; i < player.getInventory().getContainerSize(); i++) {
ItemStack stack = player.getInventory().getItem(i);
if (stack.isEmpty()) continue;
String name = stack.getHoverName().getString();
boolean isSpec = name.contains("Сфера") || name.contains("Руна") || name.contains("Шар") ||
name.contains("Талисман") || name.contains("Круш") ||
(name.contains("Крылья") && stack.is(Items.ELYTRA));
if (isSpec && !found.contains(name)) found.add(name);
}
float curY = y;
for (String s : found) {
float tw = Fonts.INTER_BOLD.getWidth(s, 7f);
Fonts.INTER_BOLD.drawString(graphics, s, x - tw / 2f, curY, -1, 7f);
curY += 8;
}
}
}
помогите исправить мне этот пиздец нейросеть написала
дс: sw4g1ioniks
ss(этого пиздеца):
P.S: у меня mcp reborn 1.21.4