GuiSpriteScaling.java

net.minecraft.client.resources.metadata.gui.GuiSpriteScaling

信息

  • 全限定名:net.minecraft.client.resources.metadata.gui.GuiSpriteScaling
  • 类型:public interface
  • 包:net.minecraft.client.resources.metadata.gui
  • 源码路径:src/main/java/net/minecraft/client/resources/metadata/gui/GuiSpriteScaling.java
  • 起始行号:L15
  • 职责:

    TODO

字段/常量

  • CODEC

    • 类型: Codec<GuiSpriteScaling>
    • 修饰符: package-private
    • 源码定位: L16
    • 说明:

      TODO

  • DEFAULT

    • 类型: GuiSpriteScaling
    • 修饰符: package-private
    • 源码定位: L17
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.resources.metadata.gui.GuiSpriteScaling.NineSlice

    • 类型: record
    • 修饰符: public
    • 源码定位: L22
    • 说明:

      TODO

  • net.minecraft.client.resources.metadata.gui.GuiSpriteScaling.NineSlice.Border

    • 类型: record
    • 修饰符: public
    • 源码定位: L55
    • 说明:

      TODO

  • net.minecraft.client.resources.metadata.gui.GuiSpriteScaling.Stretch

    • 类型: record
    • 修饰符: public
    • 源码定位: L82
    • 说明:

      TODO

  • net.minecraft.client.resources.metadata.gui.GuiSpriteScaling.Tile

    • 类型: record
    • 修饰符: public
    • 源码定位: L92
    • 说明:

      TODO

  • net.minecraft.client.resources.metadata.gui.GuiSpriteScaling.Type

    • 类型: enum
    • 修饰符: public static
    • 源码定位: L108
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

GuiSpriteScaling.Type type() @ L19

  • 方法名:type
  • 源码定位:L19
  • 返回类型:GuiSpriteScaling.Type
  • 修饰符:package-private

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public interface GuiSpriteScaling {
    Codec<GuiSpriteScaling> CODEC = GuiSpriteScaling.Type.CODEC.dispatch(GuiSpriteScaling::type, GuiSpriteScaling.Type::codec);
    GuiSpriteScaling DEFAULT = new GuiSpriteScaling.Stretch();
 
    GuiSpriteScaling.Type type();
 
    @OnlyIn(Dist.CLIENT)
    public record NineSlice(int width, int height, GuiSpriteScaling.NineSlice.Border border, boolean stretchInner) implements GuiSpriteScaling {
        public static final MapCodec<GuiSpriteScaling.NineSlice> CODEC = RecordCodecBuilder.<GuiSpriteScaling.NineSlice>mapCodec(
                i -> i.group(
                        ExtraCodecs.POSITIVE_INT.fieldOf("width").forGetter(GuiSpriteScaling.NineSlice::width),
                        ExtraCodecs.POSITIVE_INT.fieldOf("height").forGetter(GuiSpriteScaling.NineSlice::height),
                        GuiSpriteScaling.NineSlice.Border.CODEC.fieldOf("border").forGetter(GuiSpriteScaling.NineSlice::border),
                        Codec.BOOL.optionalFieldOf("stretch_inner", false).forGetter(GuiSpriteScaling.NineSlice::stretchInner)
                    )
                    .apply(i, GuiSpriteScaling.NineSlice::new)
            )
            .validate(GuiSpriteScaling.NineSlice::validate);
 
        private static DataResult<GuiSpriteScaling.NineSlice> validate(GuiSpriteScaling.NineSlice nineSlice) {
            GuiSpriteScaling.NineSlice.Border border = nineSlice.border();
            if (border.left() + border.right() >= nineSlice.width()) {
                return DataResult.error(
                    () -> "Nine-sliced texture has no horizontal center slice: " + border.left() + " + " + border.right() + " >= " + nineSlice.width()
                );
            } else {
                return border.top() + border.bottom() >= nineSlice.height()
                    ? DataResult.error(
                        () -> "Nine-sliced texture has no vertical center slice: " + border.top() + " + " + border.bottom() + " >= " + nineSlice.height()
                    )
                    : DataResult.success(nineSlice);
            }
        }
 
        @Override
        public GuiSpriteScaling.Type type() {
            return GuiSpriteScaling.Type.NINE_SLICE;
        }
 
        @OnlyIn(Dist.CLIENT)
        public record Border(int left, int top, int right, int bottom) {
            private static final Codec<GuiSpriteScaling.NineSlice.Border> VALUE_CODEC = ExtraCodecs.POSITIVE_INT
                .flatComapMap(size -> new GuiSpriteScaling.NineSlice.Border(size, size, size, size), border -> {
                    OptionalInt size = border.unpackValue();
                    return size.isPresent() ? DataResult.success(size.getAsInt()) : DataResult.error(() -> "Border has different side sizes");
                });
            private static final Codec<GuiSpriteScaling.NineSlice.Border> RECORD_CODEC = RecordCodecBuilder.create(
                i -> i.group(
                        ExtraCodecs.NON_NEGATIVE_INT.fieldOf("left").forGetter(GuiSpriteScaling.NineSlice.Border::left),
                        ExtraCodecs.NON_NEGATIVE_INT.fieldOf("top").forGetter(GuiSpriteScaling.NineSlice.Border::top),
                        ExtraCodecs.NON_NEGATIVE_INT.fieldOf("right").forGetter(GuiSpriteScaling.NineSlice.Border::right),
                        ExtraCodecs.NON_NEGATIVE_INT.fieldOf("bottom").forGetter(GuiSpriteScaling.NineSlice.Border::bottom)
                    )
                    .apply(i, GuiSpriteScaling.NineSlice.Border::new)
            );
            private static final Codec<GuiSpriteScaling.NineSlice.Border> CODEC = Codec.either(VALUE_CODEC, RECORD_CODEC)
                .xmap(Either::unwrap, border -> border.unpackValue().isPresent() ? Either.left(border) : Either.right(border));
 
            private OptionalInt unpackValue() {
                return this.left() == this.top() && this.top() == this.right() && this.right() == this.bottom()
                    ? OptionalInt.of(this.left())
                    : OptionalInt.empty();
            }
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public record Stretch() implements GuiSpriteScaling {
        public static final MapCodec<GuiSpriteScaling.Stretch> CODEC = MapCodec.unit(GuiSpriteScaling.Stretch::new);
 
        @Override
        public GuiSpriteScaling.Type type() {
            return GuiSpriteScaling.Type.STRETCH;
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public record Tile(int width, int height) implements GuiSpriteScaling {
        public static final MapCodec<GuiSpriteScaling.Tile> CODEC = RecordCodecBuilder.mapCodec(
            i -> i.group(
                    ExtraCodecs.POSITIVE_INT.fieldOf("width").forGetter(GuiSpriteScaling.Tile::width),
                    ExtraCodecs.POSITIVE_INT.fieldOf("height").forGetter(GuiSpriteScaling.Tile::height)
                )
                .apply(i, GuiSpriteScaling.Tile::new)
        );
 
        @Override
        public GuiSpriteScaling.Type type() {
            return GuiSpriteScaling.Type.TILE;
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    public static enum Type implements StringRepresentable {
        STRETCH("stretch", GuiSpriteScaling.Stretch.CODEC),
        TILE("tile", GuiSpriteScaling.Tile.CODEC),
        NINE_SLICE("nine_slice", GuiSpriteScaling.NineSlice.CODEC);
 
        public static final Codec<GuiSpriteScaling.Type> CODEC = StringRepresentable.fromEnum(GuiSpriteScaling.Type::values);
        private final String key;
        private final MapCodec<? extends GuiSpriteScaling> codec;
 
        private Type(String key, MapCodec<? extends GuiSpriteScaling> codec) {
            this.key = key;
            this.codec = codec;
        }
 
        @Override
        public String getSerializedName() {
            return this.key;
        }
 
        public MapCodec<? extends GuiSpriteScaling> codec() {
            return this.codec;
        }
    }
}

引用的其他类