хелпаните пыж шейдер есп норм не вставет на игрока я просто тот же силуэт но рядом
вот код база нуклир
package darama.module.impl.render;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import darama.control.events.Event;
import darama.control.events.impl.render.EventRender;
import darama.module.TypeList;
import darama.module.api.Annotation;
import darama.module.api.Module;
import darama.module.settings.imp.SliderSetting;
import darama.utils.render.ShaderUtils;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.settings.PointOfView;
import net.minecraft.client.shader.Framebuffer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL30;
import java.awt.Color;
import java.nio.FloatBuffer;
import java.util.ArrayList;
import java.util.List;
import static com.mojang.blaze3d.systems.RenderSystem.glUniform1;
import static darama.ui.clickgui.Panel.getColorByName;
@Annotation(name = "ShaderEsp", type = TypeList.Render, desc = "Шейдерная обводка игроков")
public class ShaderEsp extends Module {
private final SliderSetting radius = new SliderSetting("Радиус", 4f, 1f, 12f, 1f);
private Framebuffer inFB, outFB;
private static final ShaderUtils blurC = new ShaderUtils("blur2c");
public ShaderEsp() {
addSettings(radius);
}
private Framebuffer ensureFB(Framebuffer fb) {
int w = mc.getFramebuffer().framebufferWidth;
int h = mc.getFramebuffer().framebufferHeight;
if (fb == null) {
fb = new Framebuffer(w, h, true, false);
} else if (fb.framebufferWidth != w || fb.framebufferHeight != h) {
fb.resize(w, h, false);
}
fb.setFramebufferColor(0f, 0f, 0f, 0f);
fb.framebufferClear(false);
return fb;
}
@override
public boolean onEvent(Event event) {
if (!(event instanceof EventRender render)) return false;
if (render.isRender3D()) onRender3D(render);
return false;
}
private void onRender3D(EventRender e) {
if (mc.world == null || mc.player == null) return;
List<PlayerEntity> targets = new ArrayList<>();
for (Entity entity : mc.world.getAllEntities()) {
if (!(entity instanceof PlayerEntity p)) continue;
if (!p.isAlive()) continue;
if (p == mc.player && mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON) continue;
targets.add(p);
}
if (targets.isEmpty()) return;
int fbW = mc.getFramebuffer().framebufferWidth;
int fbH = mc.getFramebuffer().framebufferHeight;
inFB = ensureFB(inFB);
outFB = ensureFB(outFB);
inFB.bindFramebuffer(true);
MatrixStack stack = e.matrixStack;
float pt = e.getPartialTicks();
EntityRendererManager erm = mc.getRenderManager();
IRenderTypeBuffer.Impl buf = mc.getRenderTypeBuffers().getBufferSource();
erm.setRenderShadow(false);
for (PlayerEntity p : targets) {
erm.renderEntityStaticNoShadow(p, pt, stack, buf, erm.getPackedLight(p, pt));
}
buf.finish();
erm.setRenderShadow(true);
GlStateManager.matrixMode(5889);
GL11.glPushMatrix();
GlStateManager.loadIdentity();
GlStateManager.ortho(0.0, fbW, fbH, 0.0, 1000.0, 3000.0);
GlStateManager.matrixMode(5888);
GL11.glPushMatrix();
GlStateManager.loadIdentity();
GlStateManager.translatef(0f, 0f, -2000f);
int r = radius.getValue().intValue();
int col = getColorByName("primaryColor");
Color c = new Color(col, true);
float[] rgba = { c.getRed() / 255f, c.getGreen() / 255f, c.getBlue() / 255f, 1f };
float tw = 1f / fbW;
float th = 1f / fbH;
FloatBuffer weights = BufferUtils.createFloatBuffer(256);
for (int i = 0; i <= r; i++) {
weights.put(ShaderUtils.calculateGaussianValue(i, r / 2f));
}
weights.rewind();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL30.GL_ONE, GL30.GL_SRC_ALPHA);
GL30.glAlphaFunc(GL30.GL_GREATER, 0.0001f);
outFB.bindFramebuffer(true);
blurC.attach();
blurC.setUniformf("radius", r);
blurC.setUniformf("exposure", 2.5f);
blurC.setUniform("textureIn", 0);
blurC.setUniform("textureToCheck", 20);
blurC.setUniform("avoidTexture", 0);
blurC.setUniformf("color", rgba[0], rgba[1], rgba[2], rgba[3]);
glUniform1(blurC.getUniform("weights"), weights);
blurC.setUniformf("texelSize", tw, th);
blurC.setUniformf("direction", 1f, 0f);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
inFB.bindFramebufferTexture();
drawFBQuad(inFB);
// Pass 2: blur Y — outFB → main (avoidTexture убирает силуэт)
mc.getFramebuffer().bindFramebuffer(true);
GlStateManager.blendFunc(GL30.GL_SRC_ALPHA, GL30.GL_ONE_MINUS_SRC_ALPHA);
blurC.setUniformf("direction", 0f, 1f);
blurC.setUniform("avoidTexture", 1);
weights.rewind();
glUniform1(blurC.getUniform("weights"), weights);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
outFB.bindFramebufferTexture();
GL30.glActiveTexture(GL30.GL_TEXTURE20);
inFB.bindFramebufferTexture();
GL30.glActiveTexture(GL30.GL_TEXTURE0);
drawFBQuad(outFB);
blurC.detach();
GL30.glActiveTexture(GL30.GL_TEXTURE20);
GlStateManager.bindTexture(0);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
GlStateManager.bindTexture(0);
GlStateManager.disableBlend();
GlStateManager.matrixMode(5889);
GL11.glPopMatrix();
GlStateManager.matrixMode(5888);
GL11.glPopMatrix();
}
private void drawFBQuad(Framebuffer fb) {
float w = fb.framebufferWidth;
float h = fb.framebufferHeight;
float u2 = (float) fb.framebufferWidth / (float) fb.framebufferTextureWidth;
float v2 = (float) fb.framebufferHeight / (float) fb.framebufferTextureHeight;
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0f, 0f); GL11.glVertex2f(0f, h);
GL11.glTexCoord2f(u2, 0f); GL11.glVertex2f(w, h);
GL11.glTexCoord2f(u2, v2); GL11.glVertex2f(w, 0f);
GL11.glTexCoord2f(0f, v2); GL11.glVertex2f(0f, 0f);
GL11.glEnd();
}
}
вот код база нуклир
package darama.module.impl.render;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import darama.control.events.Event;
import darama.control.events.impl.render.EventRender;
import darama.module.TypeList;
import darama.module.api.Annotation;
import darama.module.api.Module;
import darama.module.settings.imp.SliderSetting;
import darama.utils.render.ShaderUtils;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.settings.PointOfView;
import net.minecraft.client.shader.Framebuffer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL30;
import java.awt.Color;
import java.nio.FloatBuffer;
import java.util.ArrayList;
import java.util.List;
import static com.mojang.blaze3d.systems.RenderSystem.glUniform1;
import static darama.ui.clickgui.Panel.getColorByName;
@Annotation(name = "ShaderEsp", type = TypeList.Render, desc = "Шейдерная обводка игроков")
public class ShaderEsp extends Module {
private final SliderSetting radius = new SliderSetting("Радиус", 4f, 1f, 12f, 1f);
private Framebuffer inFB, outFB;
private static final ShaderUtils blurC = new ShaderUtils("blur2c");
public ShaderEsp() {
addSettings(radius);
}
private Framebuffer ensureFB(Framebuffer fb) {
int w = mc.getFramebuffer().framebufferWidth;
int h = mc.getFramebuffer().framebufferHeight;
if (fb == null) {
fb = new Framebuffer(w, h, true, false);
} else if (fb.framebufferWidth != w || fb.framebufferHeight != h) {
fb.resize(w, h, false);
}
fb.setFramebufferColor(0f, 0f, 0f, 0f);
fb.framebufferClear(false);
return fb;
}
@override
public boolean onEvent(Event event) {
if (!(event instanceof EventRender render)) return false;
if (render.isRender3D()) onRender3D(render);
return false;
}
private void onRender3D(EventRender e) {
if (mc.world == null || mc.player == null) return;
List<PlayerEntity> targets = new ArrayList<>();
for (Entity entity : mc.world.getAllEntities()) {
if (!(entity instanceof PlayerEntity p)) continue;
if (!p.isAlive()) continue;
if (p == mc.player && mc.gameSettings.getPointOfView() == PointOfView.FIRST_PERSON) continue;
targets.add(p);
}
if (targets.isEmpty()) return;
int fbW = mc.getFramebuffer().framebufferWidth;
int fbH = mc.getFramebuffer().framebufferHeight;
inFB = ensureFB(inFB);
outFB = ensureFB(outFB);
inFB.bindFramebuffer(true);
MatrixStack stack = e.matrixStack;
float pt = e.getPartialTicks();
EntityRendererManager erm = mc.getRenderManager();
IRenderTypeBuffer.Impl buf = mc.getRenderTypeBuffers().getBufferSource();
erm.setRenderShadow(false);
for (PlayerEntity p : targets) {
erm.renderEntityStaticNoShadow(p, pt, stack, buf, erm.getPackedLight(p, pt));
}
buf.finish();
erm.setRenderShadow(true);
GlStateManager.matrixMode(5889);
GL11.glPushMatrix();
GlStateManager.loadIdentity();
GlStateManager.ortho(0.0, fbW, fbH, 0.0, 1000.0, 3000.0);
GlStateManager.matrixMode(5888);
GL11.glPushMatrix();
GlStateManager.loadIdentity();
GlStateManager.translatef(0f, 0f, -2000f);
int r = radius.getValue().intValue();
int col = getColorByName("primaryColor");
Color c = new Color(col, true);
float[] rgba = { c.getRed() / 255f, c.getGreen() / 255f, c.getBlue() / 255f, 1f };
float tw = 1f / fbW;
float th = 1f / fbH;
FloatBuffer weights = BufferUtils.createFloatBuffer(256);
for (int i = 0; i <= r; i++) {
weights.put(ShaderUtils.calculateGaussianValue(i, r / 2f));
}
weights.rewind();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL30.GL_ONE, GL30.GL_SRC_ALPHA);
GL30.glAlphaFunc(GL30.GL_GREATER, 0.0001f);
outFB.bindFramebuffer(true);
blurC.attach();
blurC.setUniformf("radius", r);
blurC.setUniformf("exposure", 2.5f);
blurC.setUniform("textureIn", 0);
blurC.setUniform("textureToCheck", 20);
blurC.setUniform("avoidTexture", 0);
blurC.setUniformf("color", rgba[0], rgba[1], rgba[2], rgba[3]);
glUniform1(blurC.getUniform("weights"), weights);
blurC.setUniformf("texelSize", tw, th);
blurC.setUniformf("direction", 1f, 0f);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
inFB.bindFramebufferTexture();
drawFBQuad(inFB);
// Pass 2: blur Y — outFB → main (avoidTexture убирает силуэт)
mc.getFramebuffer().bindFramebuffer(true);
GlStateManager.blendFunc(GL30.GL_SRC_ALPHA, GL30.GL_ONE_MINUS_SRC_ALPHA);
blurC.setUniformf("direction", 0f, 1f);
blurC.setUniform("avoidTexture", 1);
weights.rewind();
glUniform1(blurC.getUniform("weights"), weights);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
outFB.bindFramebufferTexture();
GL30.glActiveTexture(GL30.GL_TEXTURE20);
inFB.bindFramebufferTexture();
GL30.glActiveTexture(GL30.GL_TEXTURE0);
drawFBQuad(outFB);
blurC.detach();
GL30.glActiveTexture(GL30.GL_TEXTURE20);
GlStateManager.bindTexture(0);
GL30.glActiveTexture(GL30.GL_TEXTURE0);
GlStateManager.bindTexture(0);
GlStateManager.disableBlend();
GlStateManager.matrixMode(5889);
GL11.glPopMatrix();
GlStateManager.matrixMode(5888);
GL11.glPopMatrix();
}
private void drawFBQuad(Framebuffer fb) {
float w = fb.framebufferWidth;
float h = fb.framebufferHeight;
float u2 = (float) fb.framebufferWidth / (float) fb.framebufferTextureWidth;
float v2 = (float) fb.framebufferHeight / (float) fb.framebufferTextureHeight;
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0f, 0f); GL11.glVertex2f(0f, h);
GL11.glTexCoord2f(u2, 0f); GL11.glVertex2f(w, h);
GL11.glTexCoord2f(u2, v2); GL11.glVertex2f(w, 0f);
GL11.glTexCoord2f(0f, v2); GL11.glVertex2f(0f, 0f);
GL11.glEnd();
}
}