Гайд Как сделать лютое Shader меню

Начинающий
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
107
Реакции[?]
0
Поинты[?]
0
Всем привет! Прочитая данный гайд вы узнаете как поставить лютый шейдер в MainMenu на базе (делал на базе Minced 1.7)

И так приступаем

Создаем в папке ui файл Shader.java и вставляем данный код:
(в строке
71 нужно указать путь к assets где будет наш шейдер)


Java:
package ru.idel.Scally.ui;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Objects;
import java.util.stream.Collectors;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL20;


public class Shader {
     Minecraft mc = Minecraft.getMinecraft();
     private final int programId;
     private final ScaledResolution sr = new ScaledResolution(this.mc);
     public static final String VERTEX_SORUCE = getShaderSource("vertex.vsh");
     private final long initTime;

     public Shader(String fragmentShaderName) {
         int programId = GL20.glCreateProgram();
         try {
             int vertexShader = GL20.glCreateShader(35633);
             GL20.glShaderSource(vertexShader, VERTEX_SORUCE);
             GL20.glCompileShader(vertexShader);
             int isVertexCompiled = GL20.glGetShaderi(vertexShader, 35713);

             if (isVertexCompiled == 0) {
                 GL20.glDeleteShader(vertexShader);
                 System.err.println("Vertex shader couldn't compile. It has been deleted.");
             }

             int fragmentShader = GL20.glCreateShader(35632);
             GL20.glShaderSource(fragmentShader, getShaderSource(fragmentShaderName));
             GL20.glCompileShader(fragmentShader);
             int isFragmentCompiled = GL20.glGetShaderi(fragmentShader, 35713);
             if (isFragmentCompiled == 0) {
                 GL20.glDeleteShader(fragmentShader);
                 System.err.println("Fragment shader couldn't compile. It has been deleted.");
             }

             GL20.glAttachShader(programId, vertexShader);
             GL20.glAttachShader(programId, fragmentShader);
             GL20.glLinkProgram(programId);
         } catch (Exception e) {
             e.printStackTrace();
         }
         this.programId = programId;
         this.initTime = System.currentTimeMillis();
     }

     public void draw(float mouseX, float mouseY) {
         GL20.glUseProgram(this.programId);
         GL20.glUniform2f(GL20.glGetUniformLocation(this.programId, "resolution"), this.sr.getScaledWidth(), this.sr.getScaledHeight());
         GL20.glUniform2f(GL20.glGetUniformLocation(this.programId, "mouse"), mouseX, mouseY);
         GL20.glUniform1f(GL20.glGetUniformLocation(this.programId, "time"), (float) (System.currentTimeMillis() - this.initTime) / 1000.0F);
         GL11.glBegin(7);
         GL11.glVertex2d(0.0D, 0.0D);
         GL11.glVertex2d(0.0D, this.sr.getScaledHeight());
         GL11.glVertex2d(this.sr.getScaledWidth(), this.sr.getScaledHeight());
         GL11.glVertex2d(this.sr.getScaledWidth(), 0.0D);
         GL11.glEnd();
         GL20.glUseProgram(0);
     }


     public static String getShaderSource(String fileName) {
         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Objects.<InputStream>requireNonNull(Shader.class
        /* сдесь указываем путь где хранится шейдер */ .getResourceAsStream("/assets/minecraft/idelclient/shaders/" + fileName))));
         String source = bufferedReader.lines().filter(str -> !str.isEmpty()).map(str -> str = str.replace("\t", "")).collect(Collectors.joining("\n"));
         try {
             bufferedReader.close();
         } catch (IOException iOException) {
         }

         return source;
     }
}
После того как создали класс переходим в класс с нашим MainMenu и вставляем следующие строки:


Java:
        this.shaderH = new Shader(" ");
        ScaledResolution sr = new ScaledResolution(this.mc);
        this.width = sr.getScaledWidth();
        this.height = sr.getScaledHeight();
        this.initAnimation = (Animation)new DecelerateAnimation(300, 1.0D);
У вас может быть ошибка в this.shaderH просто пишем private Shader shaderH;

дальше после public void drawScreen вставляем данный код:


Java:
        ScaledResolution res = new ScaledResolution(this.mc);
        Gui.drawRect(0.0D, 0.0D, res.getScaledWidth(), res.getScaledHeight(), -1);
        this.shaderH.draw(mouseX / 300.0F, (res.getScaledHeight() - mouseY) / 300.0F);
        ScaledResolution sr = new ScaledResolution(this.mc);
        new ScaledResolution(this.mc);
        new ScaledResolution(this.mc);
После этого мы удаляем строку с фоном через картинку RenderUtils.drawImage

Дальше осталось зайди в ваши assets и закинуть по пути, который вы указали в Shader.java и закинуть ваш шейдер.fsh

В коде MainMenu меняем "ваше_название_шейдера.fsh" на название файла вашего шейдера :roflanEbalo:


Если вы все сделали верно то ваш шейдер будет работать
По вопросам:

Discord: Scally.JohON0#5061
tg: @xxxjohono

взял от сюда:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
1 Окт 2022
Сообщения
211
Реакции[?]
2
Поинты[?]
1K
Полезно.
 
Сверху Снизу