Начинающий
- Статус
- Оффлайн
- Регистрация
- 25 Янв 2022
- Сообщения
- 69
- Реакции
- 0
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Проблема с модулями
Сделал новый модуль ходел добавить
зашел в модуль менеждер вписал все как надо
В клик гуи нету, через .bind тоже не кодируется пробовал с разными модулями результат 1
Мб проблема в самом модуле?( приложу ниже )
Сделал новый модуль ходел добавить
зашел в модуль менеждер вписал все как надо
private TrapESP TrapESP;
TrapESP = new TrapESP();
В клик гуи нету, через .bind тоже не кодируется пробовал с разными модулями результат 1
Мб проблема в самом модуле?( приложу ниже )
Claude code:
package biz.chipa.modules.impl.render;
import biz.chipa.chipa;
import biz.chipa.events.DEngineEvent;
import biz.chipa.events.EventChangeWorld;
import biz.chipa.modules.api.Category;
import biz.chipa.modules.api.Module;
import biz.chipa.modules.api.ModuleRegister;
import biz.chipa.modules.settings.impl.BooleanSetting;
import biz.chipa.modules.settings.impl.SliderSetting;
import biz.chipa.utils.client.IMinecraft;
import biz.chipa.utils.client.TimerUtility;
import biz.chipa.utils.render.RectUtility;
import biz.chipa.utils.render.color.ColorUtils;
import com.google.common.eventbus.Subscribe;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import lombok.Getter;
import net.minecraft.client.entity.player.ClientPlayerEntity;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import org.lwjgl.opengl.GL11;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@ModuleRegister(name = "TrapESP", category = Category.Render, description = "ESP для отображения ловушек от Трапки")
public class TrapESP extends Module {
private final List<TrapLocation> traps = new CopyOnWriteArrayList<>();
private final ResourceLocation pickaxeTexture = new ResourceLocation("minecraft", "textures/item/netherite_pickaxe.png");
// Настройки
private final SliderSetting maxDistance = new SliderSetting("Дистанция", 100, 10, 200, 5);
private final SliderSetting trapLifetime = new SliderSetting("Время жизни", 30, 5, 120, 5);
private final BooleanSetting showDistance = new BooleanSetting("Показывать расстояние", true);
private final BooleanSetting showPlayerName = new BooleanSetting("Показывать игрока", true);
private final BooleanSetting showOutline = new BooleanSetting("Контур блока", true);
private final BooleanSetting showIcon = new BooleanSetting("Показывать иконку", true);
// Переменные для отслеживания
private boolean wasUsingItem = false;
private int lastUseTime = 0;
public TrapESP() {
addSettings(maxDistance, trapLifetime, showDistance, showPlayerName, showOutline, showIcon);
}
@Override
public boolean onEnable() {
super.onEnable();
return false;
}
@Override
public boolean onDisable() {
super.onDisable();
traps.clear();
return false;
}
@Subscribe
public void onChange(EventChangeWorld e) {
traps.clear();
}
@Subscribe
public void onRender(DEngineEvent event) {
ClientPlayerEntity player = IMinecraft.mc.player;
if (player == null) return;
// Проверяем использование предмета
checkTrapUsage(player);
if (traps.isEmpty()) return;
MatrixStack matrix = event.getMatrix();
Vector3d playerPos = player.getPositionVec();
// Удаляем старые или далекие ловушки
traps.removeIf(trap ->
trap.isExpired(trapLifetime.get().intValue() * 1000) ||
trap.getDistanceTo(playerPos) > maxDistance.get().intValue()
);
if (traps.isEmpty()) return;
boolean lightEnabled = GL11.glIsEnabled(GL11.GL_LIGHTING);
RenderSystem.pushMatrix();
matrix.push();
setupRenderState(lightEnabled);
for (TrapLocation trap : traps) {
double distance = trap.getDistanceTo(playerPos);
if (distance <= maxDistance.get().intValue()) {
renderTrap(matrix, trap, player, distance);
}
}
cleanupRenderState(lightEnabled, matrix);
}
private void checkTrapUsage(ClientPlayerEntity player) {
// Проверяем, держит ли игрок незеритовую кирку
boolean holdingPickaxe = player.getHeldItemMainhand().getItem() == Items.NETHERITE_PICKAXE ||
player.getHeldItemOffhand().getItem() == Items.NETHERITE_PICKAXE;
if (!holdingPickaxe) {
wasUsingItem = false;
return;
}
// Проверяем использование предмета разными способами
boolean isUsingItem = false;
// Способ 1: проверка активности руки
if (player.isHandActive()) {
isUsingItem = true;
}
// Способ 2: проверка через свинг анимацию
if (player.isSwingInProgress) {
isUsingItem = true;
}
// Способ 3: проверка через правую кнопку мыши (если доступно)
if (IMinecraft.mc.gameSettings != null && IMinecraft.mc.gameSettings.keyBindUseItem.isPressed()) {
isUsingItem = true;
}
// Если предмет начал использоваться
if (isUsingItem && !wasUsingItem) {
int currentTime = player.ticksExisted;
if (currentTime - lastUseTime > 20) { // Защита от спама (1 секунда)
BlockPos pos = player.getPosition();
String playerName = player.getName().getString();
traps.add(new TrapLocation(pos, playerName));
lastUseTime = currentTime;
// Выводим сообщение в чат (опционально)
}
}
wasUsingItem = isUsingItem;
}
// Метод для ручного добавления ловушки (можно вызвать из команды или хоткея)
// Метод для очистки всех ловушек
private void setupRenderState(boolean lightEnabled) {
RenderSystem.enableBlend();
RenderSystem.disableAlphaTest();
RenderSystem.depthMask(false);
RenderSystem.disableCull();
if (lightEnabled) {
RenderSystem.disableLighting();
}
GL11.glShadeModel(GL11.GL_SMOOTH);
RenderSystem.blendFuncSeparate(
GlStateManager.SourceFactor.SRC_ALPHA,
GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA,
GlStateManager.SourceFactor.ONE,
GlStateManager.DestFactor.ZERO
);
}
private void renderTrap(MatrixStack matrix, TrapLocation trap, ClientPlayerEntity player, double distance) {
Vector3d trapPos = new Vector3d(trap.position.getX() + 0.5, trap.position.getY() + 1.5, trap.position.getZ() + 0.5);
// Рендерим текст
renderTrapText(matrix, trapPos, trap, distance);
// Рендерим иконку
if (showIcon.get()) {
renderTrapIcon(matrix, trapPos);
}
// Рендерим контур блока
if (showOutline.get()) {
renderTrapOutline(matrix, trap.position);
}
}
private void renderTrapText(MatrixStack matrix, Vector3d pos, TrapLocation trap, double distance) {
matrix.push();
RectUtility.setupOrientationMatrix(matrix, (float) pos.x, (float) pos.y, (float) pos.z);
matrix.rotate(IMinecraft.mc.getRenderManager().getCameraOrientation());
matrix.scale(-0.025F, -0.025F, 0.025F);
FontRenderer font = IMinecraft.mc.fontRenderer;
// Подготавливаем текст
String trapText = "§c§lТРАПКА";
String distanceText = showDistance.get() ? String.format("§f%.1fm", distance) : "";
String playerText = showPlayerName.get() ? "§7" + trap.playerName : "";
// Вычисляем размеры
int trapWidth = font.getStringWidth(trapText);
int distWidth = showDistance.get() ? font.getStringWidth(distanceText) : 0;
int playerWidth = showPlayerName.get() ? font.getStringWidth(playerText) : 0;
int maxWidth = Math.max(Math.max(trapWidth, distWidth), playerWidth);
// Считаем высоту фона
int lines = 1; // Основной текст
if (showDistance.get()) lines++;
if (showPlayerName.get()) lines++;
int bgHeight = lines * 10;
// Рисуем фон
int bgColor = ColorUtils.reAlphaInt(0x000000, 128);
RectUtility.drawRect(matrix, -maxWidth/2 - 4, -5, maxWidth/2 + 4, bgHeight + 5,
bgColor, bgColor, bgColor, bgColor, false, false);
int yOffset = 0;
// Рендерим текст трапки
font.drawStringWithShadow(matrix, trapText, -trapWidth/2, yOffset, 0xFFFF5555);
yOffset += 10;
// Рендерим расстояние
if (showDistance.get()) {
font.drawStringWithShadow(matrix, distanceText, -distWidth/2, yOffset, 0xFFFFFFFF);
yOffset += 10;
}
// Рендерим имя игрока
if (showPlayerName.get()) {
font.drawStringWithShadow(matrix, playerText, -playerWidth/2, yOffset, 0xFFAAAAAA);
}
matrix.pop();
}
private void renderTrapIcon(MatrixStack matrix, Vector3d pos) {
matrix.push();
RectUtility.setupOrientationMatrix(matrix, (float) pos.x, (float) pos.y + 0.3f, (float) pos.z);
matrix.rotate(IMinecraft.mc.getRenderManager().getCameraOrientation());
matrix.scale(0.3F, 0.3F, 0.3F);
// Рендерим иконку кирки
RectUtility.bindTexture(pickaxeTexture);
int color = ColorUtils.reAlphaInt(0xFF5555, 200);
RectUtility.drawRect(matrix, -0.5f, -0.5f, 0.5f, 0.5f, color, color, color, color, true, true);
matrix.pop();
}
private void renderTrapOutline(MatrixStack matrix, BlockPos pos) {
matrix.push();
// Настройки для линий
RenderSystem.lineWidth(2.0F);
RenderSystem.disableTexture();
double x = pos.getX();
double y = pos.getY();
double z = pos.getZ();
// Цвет контура - красный с прозрачностью
int outlineColor = ColorUtils.reAlphaInt(0xFF5555, 150);
float red = ((outlineColor >> 16) & 0xFF) / 255.0f;
float green = ((outlineColor >> 8) & 0xFF) / 255.0f;
float blue = (outlineColor & 0xFF) / 255.0f;
float alpha = ((outlineColor >> 24) & 0xFF) / 255.0f;
RenderSystem.color4f(red, green, blue, alpha);
GL11.glBegin(GL11.GL_LINES);
// Куб контур
// Нижние линии
GL11.glVertex3d(x, y, z); GL11.glVertex3d(x + 1, y, z);
GL11.glVertex3d(x + 1, y, z); GL11.glVertex3d(x + 1, y, z + 1);
GL11.glVertex3d(x + 1, y, z + 1); GL11.glVertex3d(x, y, z + 1);
GL11.glVertex3d(x, y, z + 1); GL11.glVertex3d(x, y, z);
// Верхние линии
GL11.glVertex3d(x, y + 1, z); GL11.glVertex3d(x + 1, y + 1, z);
GL11.glVertex3d(x + 1, y + 1, z); GL11.glVertex3d(x + 1, y + 1, z + 1);
GL11.glVertex3d(x + 1, y + 1, z + 1); GL11.glVertex3d(x, y + 1, z + 1);
GL11.glVertex3d(x, y + 1, z + 1); GL11.glVertex3d(x, y + 1, z);
// Вертикальные линии
GL11.glVertex3d(x, y, z); GL11.glVertex3d(x, y + 1, z);
GL11.glVertex3d(x + 1, y, z); GL11.glVertex3d(x + 1, y + 1, z);
GL11.glVertex3d(x + 1, y, z + 1); GL11.glVertex3d(x + 1, y + 1, z + 1);
GL11.glVertex3d(x, y, z + 1); GL11.glVertex3d(x, y + 1, z + 1);
GL11.glEnd();
RenderSystem.enableTexture();
RenderSystem.lineWidth(1.0F);
RenderSystem.color4f(1.0f, 1.0f, 1.0f, 1.0f);
matrix.pop();
}
private void cleanupRenderState(boolean lightEnabled, MatrixStack matrix) {
RenderSystem.blendFuncSeparate(
GlStateManager.SourceFactor.SRC_ALPHA,
GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA,
GlStateManager.SourceFactor.ONE,
GlStateManager.DestFactor.ZERO
);
GlStateManager.clearCurrentColor();
GL11.glShadeModel(GL11.GL_FLAT);
if (lightEnabled) {
RenderSystem.enableLighting();
}
RenderSystem.enableCull();
RenderSystem.depthMask(true);
RenderSystem.enableAlphaTest();
matrix.pop();
RenderSystem.popMatrix();
}
// Геттеры для внешнего доступа
public List<TrapLocation> getTraps() {
return traps;
}
public int getTrapsCount() {
return traps.size();
}
@Getter
public static class TrapLocation {
private final BlockPos position;
private final long createTime;
private final String playerName;
private final TimerUtility timer = new TimerUtility();
public TrapLocation(BlockPos pos, String playerName) {
this.position = pos;
this.createTime = System.currentTimeMillis();
this.playerName = playerName;
this.timer.reset();
}
public boolean isExpired(int lifetimeMs) {
return timer.isReached(lifetimeMs);
}
public double getDistanceTo(Vector3d playerPos) {
double dx = position.getX() + 0.5 - playerPos.x;
double dy = position.getY() + 0.5 - playerPos.y;
double dz = position.getZ() + 0.5 - playerPos.z;
return Math.sqrt(dx * dx + dy * dy + dz * dz);
}
}
}