-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Где проблема в коде ?
FontRender:
package zip.utils.render.font;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.platform.GlStateManager;
import lombok.Setter;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.BufferUtils;
import zip.utils.IMinecraft;
import zip.utils.render.IRender;
import zip.utils.render.Render;
import static org.lwjgl.opengl.GL20.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.nio.ByteBuffer;
public class FontRender implements IMinecraft, IRender {
[USER=1132491]@setter[/USER]
private Font font;
private final int MARGIN = 4;
private boolean fractionalMetrics = false;
[USER=1132491]@setter[/USER]
public CharData[] regular;
[USER=1132491]@setter[/USER]
private CharData[] italic;
[USER=1132491]@setter[/USER]
private CharData[] bold;
public FontRender(String font, int type) {
this(font, 256, type);
}
public FontRender(String font, int countChar, int type) {
final String PATH = "nutshell/fonts/";
try {
setFont(Font.createFont(Font.TRUETYPE_FONT, mc.getResourceManager().getResource(new ResourceLocation(String.format("%s%s", PATH, font))).getInputStream()));
} catch (Exception exception) {
exception.printStackTrace();
}
setRegular(setDataChar(new CharData[countChar], type));
setItalic(setDataChar(new CharData[countChar], type));
setBold(setDataChar(new CharData[countChar], type));
}
private CharData[] setDataChar(CharData[] charData, int type) {
Font font = this.font.deriveFont(type);
BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics1 = (Graphics2D) image.getGraphics();
graphics1.setFont(font);
FontMetrics fontMetrics = graphics1.getFontMetrics();
for (int index = 0; index < charData.length; index++) {
char _char = (char) index;
Rectangle2D bound = fontMetrics.getStringBounds(_char + "", graphics1);
float width = (float) bound.getWidth() + (2 * MARGIN),
height = (float) bound.getHeight();
BufferedImage charImage = new BufferedImage((int) Math.ceil(width), (int) Math.ceil(width), BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics2 = (Graphics2D) charImage.getGraphics();
graphics2.setFont(font);
graphics2.setColor(new Color(255, 255, 255, 0));
graphics2.fillRect(0, 0, charImage.getWidth(), charImage.getHeight());
graphics2.setColor(Color.WHITE);
graphics2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
graphics2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
graphics2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, fractionalMetrics ? RenderingHints.VALUE_FRACTIONALMETRICS_ON : RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
graphics2.drawString(_char + "", MARGIN, fontMetrics.getAscent());
int textureId = GlStateManager.genTexture();
createBindTexture(textureId, charImage);
charData[index] = new CharData(_char, textureId, charImage.getWidth(), charImage.getHeight());
}
return charData;
}
private void createBindTexture(int textureId, BufferedImage image) {
int[] pixels = new int[image.getWidth() * image.getHeight()];
image.getRGB(0, 0, image.getWidth(), image.getHeight(), pixels, 0, image.getWidth());
ByteBuffer buffer = BufferUtils.createByteBuffer(image.getWidth() * image.getHeight() * 4); /* 4-RGBA / 3-RGB */
for (int y = 0; y < image.getHeight(); y++) {
for (int x = 0; x < image.getWidth(); x++) {
int pixel = pixels[y * image.getWidth() + x];
buffer.put((byte) ((pixel >> 16) & 0xFF));
buffer.put((byte) ((pixel >> 8) & 0xFF));
buffer.put((byte) (pixel & 0xFF));
buffer.put((byte) ((pixel >> 24) & 0xFF));
}
}
buffer.flip();
GlStateManager.bindTexture(textureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.getWidth(), image.getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
GlStateManager.bindTexture(0);
}
public void drawChar(MatrixStack matrix, char _char, CharData[] charData, float x, float y) {
CharData _charData = charData[_char];
_charData.bind();
glPushMatrix();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Render.fill(matrix, x, y, _charData.width, _charData.height);
glDisable(GL_BLEND);
glPopMatrix();
}
}
CharData:
package zip.utils.render.font;
import lombok.AllArgsConstructor;
import lombok.Setter;
import static org.lwjgl.opengl.GL20.*;
[USER=1132491]@setter[/USER]
@AllArgsConstructor
public class CharData {
public char _char;
private int textureIn;
public float width, height;
public void bind() {
glBindTexture(GL_TEXTURE_2D, textureIn);
}
}