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;
}
}
}引用的其他类
- StringRepresentable
- 引用位置:
方法调用 - 关联成员:
StringRepresentable.fromEnum()
- 引用位置: