minecraft-src/com/mojang/blaze3d/font/SpaceProvider.java
2025-07-04 01:41:11 +03:00

57 lines
2 KiB
Java

package com.mojang.blaze3d.font;
import com.mojang.datafixers.util.Either;
import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.ints.IntSet;
import it.unimi.dsi.fastutil.ints.IntSets;
import java.util.Map;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.font.providers.GlyphProviderDefinition;
import net.minecraft.client.gui.font.providers.GlyphProviderType;
import net.minecraft.util.ExtraCodecs;
import org.jetbrains.annotations.Nullable;
@Environment(EnvType.CLIENT)
public class SpaceProvider implements GlyphProvider {
private final Int2ObjectMap<GlyphInfo.SpaceGlyphInfo> glyphs;
public SpaceProvider(Map<Integer, Float> glyphs) {
this.glyphs = new Int2ObjectOpenHashMap<>(glyphs.size());
glyphs.forEach((integer, float_) -> this.glyphs.put(integer.intValue(), () -> float_));
}
@Nullable
@Override
public GlyphInfo getGlyph(int character) {
return this.glyphs.get(character);
}
@Override
public IntSet getSupportedGlyphs() {
return IntSets.unmodifiable(this.glyphs.keySet());
}
@Environment(EnvType.CLIENT)
public record Definition(Map<Integer, Float> advances) implements GlyphProviderDefinition {
public static final MapCodec<SpaceProvider.Definition> CODEC = RecordCodecBuilder.mapCodec(
instance -> instance.group(Codec.unboundedMap(ExtraCodecs.CODEPOINT, Codec.FLOAT).fieldOf("advances").forGetter(SpaceProvider.Definition::advances))
.apply(instance, SpaceProvider.Definition::new)
);
@Override
public GlyphProviderType type() {
return GlyphProviderType.SPACE;
}
@Override
public Either<GlyphProviderDefinition.Loader, GlyphProviderDefinition.Reference> unpack() {
GlyphProviderDefinition.Loader loader = resourceManager -> new SpaceProvider(this.advances);
return Either.left(loader);
}
}
}