- Выберите загрузчик игры
- Fabric
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Добавил 3D Box, добавил выбор между Corner боксом (который был изначально) и Full боксом (добавил).
также добавил вкл/выкл аутлайн бокса.
База зенит старый, не рекод.
Взял из тгк @vibeclient (noad!)
DW - ниже
также добавил вкл/выкл аутлайн бокса.
База зенит старый, не рекод.
Взял из тгк @vibeclient (noad!)
Пожалуйста, авторизуйтесь для просмотра ссылки.
DW - ниже
на селфкод давно так похуй:
package ru.vibeclient.implement.features.modules.render;
import lombok.AccessLevel;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.ContainerComponent;
import net.minecraft.component.type.ItemEnchantmentsComponent;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.entity.Entity;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.TntEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.entry.RegistryEntry;
import java.util.Optional;
import org.joml.*;
import ru.vibeclient.api.event.EventHandler;
import ru.vibeclient.api.feature.module.Module;
import ru.vibeclient.api.feature.module.ModuleCategory;
import ru.vibeclient.api.feature.module.setting.implement.BooleanSetting;
import ru.vibeclient.api.feature.module.setting.implement.MultiSelectSetting;
import ru.vibeclient.api.feature.module.setting.implement.SelectSetting;
import ru.vibeclient.api.feature.module.setting.implement.ValueSetting;
import ru.vibeclient.api.repository.friend.FriendUtils;
import ru.vibeclient.api.system.font.FontRenderer;
import ru.vibeclient.api.system.font.Fonts;
import ru.vibeclient.api.system.shape.ShapeProperties;
import ru.vibeclient.common.util.color.ColorUtil;
import ru.vibeclient.common.util.world.ServerUtil;
import ru.vibeclient.common.util.math.ProjectionUtil;
import ru.vibeclient.common.util.entity.PlayerIntersectionUtil;
import ru.vibeclient.common.util.other.Instance;
import ru.vibeclient.common.util.render.Render2DUtil;
import ru.vibeclient.common.util.render.Render3DUtil;
import ru.vibeclient.implement.events.player.TickEvent;
import ru.vibeclient.implement.events.render.DrawEvent;
import ru.vibeclient.implement.events.render.WorldLoadEvent;
import ru.vibeclient.implement.events.render.WorldRenderEvent;
import ru.vibeclient.implement.features.modules.combat.AntiBot;
import java.lang.Math;
import java.util.*;
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class EntityESP extends Module {
public static EntityESP getInstance() {
return Instance.get(EntityESP.class);
}
Identifier TEXTURE = Identifier.of("textures/container.png");
List<PlayerEntity> players = new ArrayList<>();
Map<RegistryKey<Enchantment>, String> encMap = new HashMap<>();
ValueSetting sizeSetting = new ValueSetting("Tag Size", "Tags size")
.setValue(13).range(10, 20);
public MultiSelectSetting entityType = new MultiSelectSetting("Entity Type", "Entity that will be displayed")
.value("Player", "Item", "TNT");
MultiSelectSetting playerSetting = new MultiSelectSetting("Player Settings", "Settings for players")
.value("Box", "Armor", "Enchants", "NameTags", "Hand Items").visible(() -> entityType.isSelected("Player"));
public SelectSetting boxType = new SelectSetting("Box Type", "Type of Box")
.value("Corner", "Full", "3D Box").visible(() -> playerSetting.isSelected("Box"));
public BooleanSetting flatBoxOutline = new BooleanSetting("Outline", "Outline for flat boxes").visible(() -> playerSetting.isSelected("Box") && (boxType.isSelected("Corner") || boxType.isSelected("Full")));
public ValueSetting boxAlpha = new ValueSetting("Alpha", "Box transparency")
.setValue(1.0F).range(0.1F, 1.0F).visible(() -> boxType.isSelected("3D Box"));
public EntityESP() {
super("EntityESP", "Entity ESP", ModuleCategory.RENDER);
setup(sizeSetting, entityType, playerSetting, boxType, flatBoxOutline, boxAlpha);
encMap.put(Enchantments.BLAST_PROTECTION, "B");
encMap.put(Enchantments.PROTECTION, "P");
encMap.put(Enchantments.SHARPNESS, "S");
encMap.put(Enchantments.EFFICIENCY, "E");
encMap.put(Enchantments.UNBREAKING, "U");
encMap.put(Enchantments.POWER, "P");
encMap.put(Enchantments.THORNS, "T");
encMap.put(Enchantments.MENDING, "M");
encMap.put(Enchantments.DEPTH_STRIDER, "D");
encMap.put(Enchantments.QUICK_CHARGE, "Q");
encMap.put(Enchantments.MULTISHOT, "MS");
encMap.put(Enchantments.PIERCING, "P");
}
@EventHandler
public void onWorldLoad(WorldLoadEvent e) {
players.clear();
}
@EventHandler
public void onTick(TickEvent e) {
players.clear();
if (mc.world != null) {
mc.world.getPlayers().stream()
.filter(player -> player != mc.player)
.forEach(players::add);
}
}
@EventHandler
public void onWorldRender(WorldRenderEvent e) {
if (!entityType.isSelected("Player")) return;
float tickDelta = mc.getRenderTickCounter().getTickDelta(false);
for (PlayerEntity player : players) {
if (player == null) continue;
double interpX = MathHelper.lerp(tickDelta, player.prevX, player.getX());
double interpY = MathHelper.lerp(tickDelta, player.prevY, player.getY());
double interpZ = MathHelper.lerp(tickDelta, player.prevZ, player.getZ());
Vec3d interpCenter = new Vec3d(interpX, interpY, interpZ);
float distance = (float) mc.getEntityRenderDispatcher().camera.getPos().distanceTo(interpCenter);
if (distance < 1) continue;
boolean friend = FriendUtils.isFriend(player);
int baseColor = friend ? ColorUtil.getFriendColor() : ColorUtil.getClientColor();
int alpha = (int) (boxAlpha.getValue() * 255);
int fillColor = (baseColor & 0x00FFFFFF) | (alpha << 24);
int outlineColor = baseColor | 0xFF000000;
if (boxType.isSelected("3D Box")) {
Box interpBox = player.getDimensions(player.getPose()).getBoxAt(interpX, interpY, interpZ);
Render3DUtil.drawBox(interpBox, fillColor, 2, true, true, true); // Fill with through walls by default
Render3DUtil.drawBox(interpBox, outlineColor, 2, true, true, true); // Outline with through walls by default
}
}
}
@EventHandler
public void onDraw(DrawEvent e) {
DrawContext context = e.getDrawContext();
MatrixStack matrix = context.getMatrices();
FontRenderer font = Fonts.getSize(sizeSetting.getInt(), Fonts.Type.DEFAULT);
FontRenderer bigFont = Fonts.getSize(sizeSetting.getInt() + 2, Fonts.Type.DEFAULT);
if (entityType.isSelected("Player")) {
for (PlayerEntity player : players) {
if (player == null) continue;
Vector4d vec4d = ProjectionUtil.getVector4D(player);
float distance = (float) mc.getEntityRenderDispatcher().camera.getPos().distanceTo(player.getBoundingBox().getCenter());
boolean friend = FriendUtils.isFriend(player);
if (distance < 1) continue;
if (ProjectionUtil.cantSee(vec4d)) continue;
if (playerSetting.isSelected("Box")) drawBox(friend, vec4d, player);
if (playerSetting.isSelected("Armor")) drawArmor(context, player, vec4d, font);
if (playerSetting.isSelected("Hand Items")) drawHands(matrix, player, font, vec4d);
MutableText text = getTextPlayer(player, friend);
if (ServerUtil.isAresMine()) {
float startX = (float) ProjectionUtil.centerX(vec4d);
float startY = (float) (vec4d.y);
float width = mc.textRenderer.getWidth(text);
float height = mc.textRenderer.fontHeight;
float posX = startX - width / 2f;
float posY = startY - 11F;
blur.render(ShapeProperties.create(matrix,
posX - 2f,
posY - 0.75f,
width + 4f,
height + 1.5f)
.round(height / 4f)
.color(ColorUtil.HALF_BLACK)
.build());
context.drawText(mc.textRenderer, text, (int)posX, (int)posY + 1, ColorUtil.getColor(255), false);
} else {
drawText(matrix, text, ProjectionUtil.centerX(vec4d), vec4d.y - 2, font);
}
}
}
List<Entity> entities = PlayerIntersectionUtil.streamEntities()
.sorted(Comparator.comparing(ent -> ent instanceof ItemEntity item && item.getStack().getName().getContent().toString().equals("empty")))
.toList();
for (Entity entity : entities) {
if (entity instanceof ItemEntity item && entityType.isSelected("Item")) {
Vector4d vec4d = ProjectionUtil.getVector4D(entity);
ItemStack stack = item.getStack();
ContainerComponent compoundTag = stack.get(DataComponentTypes.CONTAINER);
List<ItemStack> list = compoundTag != null ? compoundTag.stream().toList() : List.of();
if (ProjectionUtil.cantSee(vec4d)) continue;
Text text = item.getStack().getName();
if (stack.getCount() > 1) text = text.copy().append(Formatting.RESET + " [" + Formatting.RED + stack.getCount() + Formatting.GRAY + "x" + Formatting.RESET + "]");
if (!list.isEmpty()) drawShulkerBox(context, stack, list, vec4d);
else drawText(matrix, text, ProjectionUtil.centerX(vec4d), vec4d.y, text.getContent().toString().equals("empty") ? bigFont : font);
} else if (entity instanceof TntEntity tnt && entityType.isSelected("TNT")) {
Vector4d vec4d = ProjectionUtil.getVector4D(entity);
if (ProjectionUtil.cantSee(vec4d)) continue;
drawText(matrix, tnt.getStyledDisplayName(), ProjectionUtil.centerX(vec4d), vec4d.y, font);
}
}
}
private void drawBox(boolean friend, Vector4d vec, PlayerEntity player) {
if (boxType.isSelected("3D Box")) {
return;
}
int client = friend ? ColorUtil.getFriendColor() : ColorUtil.getClientColor();
int black = ColorUtil.HALF_BLACK;
float posX = (float) vec.x;
float posY = (float) vec.y;
float endPosX = (float) vec.z;
float endPosY = (float) vec.w;
float size = (endPosX - posX) / 3;
if (boxType.isSelected("Corner")) {
Render2DUtil.drawQuad(posX - 0.5F, posY - 0.5F, size, 0.5F, client);
Render2DUtil.drawQuad(posX - 0.5F, posY, 0.5F, size + 0.5F, client);
Render2DUtil.drawQuad(posX - 0.5F, endPosY - size - 0.5F, 0.5F, size, client);
Render2DUtil.drawQuad(posX - 0.5F, endPosY - 0.5F, size, 0.5F, client);
Render2DUtil.drawQuad(endPosX - size + 1, posY - 0.5F, size, 0.5F, client);
Render2DUtil.drawQuad(endPosX + 0.5F, posY, 0.5F, size + 0.5F, client);
Render2DUtil.drawQuad(endPosX + 0.5F, endPosY - size - 0.5F, 0.5F, size, client);
Render2DUtil.drawQuad(endPosX - size + 1, endPosY - 0.5F, size, 0.5F, client);
if (flatBoxOutline.isValue()) {
Render2DUtil.drawQuad(posX - 1F, posY - 1, size + 1, 1.5F, black);
Render2DUtil.drawQuad(posX - 1F, posY + 0.5F, 1.5F, size + 0.5F, black);
Render2DUtil.drawQuad(posX - 1F, endPosY - size - 1, 1.5F, size, black);
Render2DUtil.drawQuad(posX - 1F, endPosY - 1, size + 1, 1.5F, black);
Render2DUtil.drawQuad(endPosX - size + 0.5F, posY - 1, size + 1, 1.5F, black);
Render2DUtil.drawQuad(endPosX, posY + 0.5F, 1.5F, size + 0.5F, black);
Render2DUtil.drawQuad(endPosX, endPosY - size - 1, 1.5F, size, black);
Render2DUtil.drawQuad(endPosX - size + 0.5F, endPosY - 1, size + 1, 1.5F, black);
}
} else if (boxType.isSelected("Full")) {
if (flatBoxOutline.isValue()) {
Render2DUtil.drawQuad(posX - 1F, posY - 1F, endPosX - posX + 2F, 1.5F, black);
Render2DUtil.drawQuad(posX - 1F, posY - 1F, 1.5F, endPosY - posY + 2F, black);
Render2DUtil.drawQuad(posX - 1F, endPosY - 1F, endPosX - posX + 2F, 1.5F, black);
Render2DUtil.drawQuad(endPosX - 0.5F, posY - 1F, 1.5F, endPosY - posY + 2F, black);
}
Render2DUtil.drawQuad(posX - 0.5F, posY - 0.5F, endPosX - posX + 1F, 0.5F, client);
Render2DUtil.drawQuad(posX - 0.5F, posY - 0.5F, 0.5F, endPosY - posY + 1F, client);
Render2DUtil.drawQuad(posX - 0.5F, endPosY - 0.5F, endPosX - posX + 1F, 0.5F, client);
Render2DUtil.drawQuad(endPosX, posY - 0.5F, 0.5F, endPosY - posY + 1F, client);
}
}
private void drawArmor(DrawContext context, PlayerEntity player, Vector4d vec, FontRenderer font) {
MatrixStack matrix = context.getMatrices();
List<ItemStack> items = new ArrayList<>();
player.getEquippedItems().forEach(s -> {if (!s.isEmpty()) items.add(s);});
float posX = (float) (ProjectionUtil.centerX(vec) - items.size() * 5.5);
float posY = (float) (vec.y - sizeSetting.getInt() / 1.5 - 15);
float padding = 0.5F;
float offset = -11;
if (!items.isEmpty()) {
matrix.push();
matrix.translate(posX, posY, 0);
blur.render(ShapeProperties.create(matrix,
-padding,
-padding,
items.size() * 11 - 1 + padding * 2,
10 + padding * 2)
.round(2.5F)
.color(ColorUtil.HALF_BLACK)
.build());
for (ItemStack stack : items) {
offset += 11;
Render2DUtil.defaultDrawStack(context, stack, offset, 0, false, false, 0.5F);
if (playerSetting.isSelected("Enchants")) {
ItemEnchantmentsComponent enchants = EnchantmentHelper.getEnchantments(stack);
float enchantY = -font.getFont().getSize() / 1.5F - 2;
for (Map.Entry<RegistryKey<Enchantment>, String> entry : encMap.entrySet()) {
RegistryKey<Enchantment> enchantment = entry.getKey();
String id = entry.getValue();
Optional<RegistryEntry<Enchantment>> registryEntry =
mc.world.getRegistryManager()
.getOptional(RegistryKeys.ENCHANTMENT)
.flatMap(registry -> registry.getEntry(enchantment.getValue()));
if (registryEntry.isPresent() && enchants.getEnchantments().contains(registryEntry.get())) {
int level = enchants.getLevel(registryEntry.get());
MutableText enchantText = Text.literal(id + level);
float textWidth = font.getStringWidth(enchantText);
float textX = offset + 9f - textWidth / 2;
float textY = enchantY + 8;
drawText(matrix, enchantText, textX, textY, font);
enchantY -= font.getFont().getSize() / 1.5F + 1;
}
}
}
}
matrix.pop();
}
}
private void drawHands(MatrixStack matrix, PlayerEntity player, FontRenderer font, Vector4d vec) {
double posY = vec.w;
for (ItemStack stack : player.getHandItems()) {
if (stack.isEmpty()) continue;
MutableText text = Text.empty().append(stack.getName());
if (stack.getCount() > 1) text.append(Formatting.RESET + " [" + Formatting.RED + stack.getCount() + Formatting.GRAY + "x" + Formatting.RESET + "]");
posY += font.getStringHeight(text) / 2 + 3;
drawText(matrix, text, ProjectionUtil.centerX(vec), posY, font);
}
}
private void drawShulkerBox(DrawContext context, ItemStack itemStack, List<ItemStack> stacks, Vector4d vec) {
MatrixStack matrix = context.getMatrices();
int width = 176;
int height = 67;
int color = ColorUtil.multBright(ColorUtil.replAlpha(((BlockItem) itemStack.getItem()).getBlock().getDefaultMapColor().color, 1F), 1);
matrix.push();
matrix.translate(ProjectionUtil.centerX(vec) - (double) width / 4, vec.w + 2, -200 + Math.cos(vec.x));
matrix.scale(0.5F, 0.5F, 1);
context.drawTexture(RenderLayer::getGuiTextured, TEXTURE, 0, 0, 0, 0, width, height, width, height, color);
int posX = 7;
int posY = 6;
for (ItemStack stack : stacks.stream().toList()) {
Render2DUtil.defaultDrawStack(context, stack, posX, posY, false, true, 1);
posX += 18;
if (posX >= 165) {
posY += 18;
posX = 7;
}
}
matrix.pop();
}
private void drawText(MatrixStack matrix, Text text, double startX, double startY, FontRenderer font) {
int paddingX = 2;
float paddingY = 0.75F;
float height = font.getFont().getSize() / 1.5F;
float width = font.getStringWidth(text);
float posX = (float) (startX - width / 2);
float posY = (float) startY - height;
blur.render(ShapeProperties.create(matrix, posX - paddingX, posY - paddingY, width + paddingX * 2, height + paddingY * 2)
.round(height / 4).color(ColorUtil.HALF_BLACK).build());
font.drawText(matrix, text, posX, posY + 3);
}
private MutableText getTextPlayer(PlayerEntity player, boolean friend) {
float health = PlayerIntersectionUtil.getHealth(player);
MutableText text = Text.empty();
if (friend) text.append("[" + Formatting.GREEN + "F" + Formatting.RESET + "] ");
if (AntiBot.getInstance().isBot(player)) text.append("[" + Formatting.DARK_RED + "BOT" + Formatting.RESET + "] ");
if (playerSetting.isSelected("NameTags")) text.append(player.getDisplayName()); else text.append(player.getName());
if (player.getOffHandStack().getItem().equals(Items.PLAYER_HEAD) || player.getOffHandStack().getItem().equals(Items.TOTEM_OF_UNDYING))
text.append(Formatting.RESET + getSphere(player.getOffHandStack()));
if (health >= 0 && health <= player.getMaxHealth())
text.append(Formatting.RESET + " [" + Formatting.RED + PlayerIntersectionUtil.getHealthString(player) + Formatting.RESET + "]");
return text;
}
private String getSphere(ItemStack stack) {
var component = stack.get(DataComponentTypes.CUSTOM_DATA);
if (ServerUtil.isFunTime() && component != null) {
NbtCompound compound = component.copyNbt();
if (compound.getInt("tslevel") != 0) {
return " [" + Formatting.GOLD + compound.getString("don-item").replace("sphere-", "").toUpperCase() + Formatting.RESET + "]";
}
}
return "";
}
}