Spaces:
Build error
Build error
package net.minecraft.client.gui.font; | |
import com.mojang.blaze3d.font.SheetGlyphInfo; | |
import com.mojang.blaze3d.platform.NativeImage; | |
import com.mojang.blaze3d.platform.TextureUtil; | |
import java.nio.file.Path; | |
import javax.annotation.Nullable; | |
import net.minecraft.client.gui.font.glyphs.BakedGlyph; | |
import net.minecraft.client.renderer.texture.AbstractTexture; | |
import net.minecraft.client.renderer.texture.Dumpable; | |
import net.minecraft.resources.ResourceLocation; | |
import net.minecraftforge.api.distmarker.Dist; | |
import net.minecraftforge.api.distmarker.OnlyIn; | |
public class FontTexture extends AbstractTexture implements Dumpable { | |
private static final int SIZE = 256; | |
private final GlyphRenderTypes renderTypes; | |
private final boolean colored; | |
private final FontTexture.Node root; | |
public FontTexture(GlyphRenderTypes p_285000_, boolean p_285085_) { | |
this.colored = p_285085_; | |
this.root = new FontTexture.Node(0, 0, 256, 256); | |
TextureUtil.prepareImage(p_285085_ ? NativeImage.InternalGlFormat.RGBA : NativeImage.InternalGlFormat.RED, this.getId(), 256, 256); | |
this.setFilter(false, false); | |
this.renderTypes = p_285000_; | |
} | |
public void close() { | |
this.releaseId(); | |
} | |
public BakedGlyph add(SheetGlyphInfo p_232569_) { | |
if (p_232569_.isColored() != this.colored) { | |
return null; | |
} else { | |
FontTexture.Node fonttexture$node = this.root.insert(p_232569_); | |
if (fonttexture$node != null) { | |
this.bind(); | |
p_232569_.upload(fonttexture$node.x, fonttexture$node.y); | |
float f = 256.0F; | |
float f1 = 256.0F; | |
float f2 = 0.01F; | |
return new BakedGlyph( | |
this.renderTypes, | |
((float)fonttexture$node.x + 0.01F) / 256.0F, | |
((float)fonttexture$node.x - 0.01F + (float)p_232569_.getPixelWidth()) / 256.0F, | |
((float)fonttexture$node.y + 0.01F) / 256.0F, | |
((float)fonttexture$node.y - 0.01F + (float)p_232569_.getPixelHeight()) / 256.0F, | |
p_232569_.getLeft(), | |
p_232569_.getRight(), | |
p_232569_.getTop(), | |
p_232569_.getBottom() | |
); | |
} else { | |
return null; | |
} | |
} | |
} | |
public void dumpContents(ResourceLocation p_285121_, Path p_285511_) { | |
String s = p_285121_.toDebugFileName(); | |
TextureUtil.writeAsPNG(p_285511_, s, this.getId(), 0, 256, 256, p_285145_ -> (p_285145_ & 0xFF000000) == 0 ? -16777216 : p_285145_); | |
} | |
static class Node { | |
final int x; | |
final int y; | |
private final int width; | |
private final int height; | |
private FontTexture.Node left; | |
private FontTexture.Node right; | |
private boolean occupied; | |
Node(int p_95113_, int p_95114_, int p_95115_, int p_95116_) { | |
this.x = p_95113_; | |
this.y = p_95114_; | |
this.width = p_95115_; | |
this.height = p_95116_; | |
} | |
FontTexture.Node insert(SheetGlyphInfo p_232571_) { | |
if (this.left != null && this.right != null) { | |
FontTexture.Node fonttexture$node = this.left.insert(p_232571_); | |
if (fonttexture$node == null) { | |
fonttexture$node = this.right.insert(p_232571_); | |
} | |
return fonttexture$node; | |
} else if (this.occupied) { | |
return null; | |
} else { | |
int i = p_232571_.getPixelWidth(); | |
int j = p_232571_.getPixelHeight(); | |
if (i > this.width || j > this.height) { | |
return null; | |
} else if (i == this.width && j == this.height) { | |
this.occupied = true; | |
return this; | |
} else { | |
int k = this.width - i; | |
int l = this.height - j; | |
if (k > l) { | |
this.left = new FontTexture.Node(this.x, this.y, i, this.height); | |
this.right = new FontTexture.Node(this.x + i + 1, this.y, this.width - i - 1, this.height); | |
} else { | |
this.left = new FontTexture.Node(this.x, this.y, this.width, j); | |
this.right = new FontTexture.Node(this.x, this.y + j + 1, this.width, this.height - j - 1); | |
} | |
return this.left.insert(p_232571_); | |
} | |
} | |
} | |
} | |
} |