LocalTime.java
net.minecraft.client.renderer.item.properties.select.LocalTime
信息
- 全限定名:net.minecraft.client.renderer.item.properties.select.LocalTime
- 类型:public class
- 包:net.minecraft.client.renderer.item.properties.select
- 源码路径:src/main/java/net/minecraft/client/renderer/item/properties/select/LocalTime.java
- 起始行号:L25
- 实现:SelectItemModelProperty
- 职责:
TODO
字段/常量
-
ROOT_LOCALE- 类型:
String - 修饰符:
public static final - 源码定位:
L26 - 说明:
TODO
- 类型:
-
UPDATE_INTERVAL_MS- 类型:
long - 修饰符:
private static final - 源码定位:
L27 - 说明:
TODO
- 类型:
-
VALUE_CODEC- 类型:
Codec<String> - 修饰符:
public static final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
TIME_ZONE_CODEC- 类型:
Codec<TimeZone> - 修饰符:
private static final - 源码定位:
L29 - 说明:
TODO
- 类型:
-
DATA_MAP_CODEC- 类型:
MapCodec<LocalTime.Data> - 修饰符:
private static final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
TYPE- 类型:
SelectItemModelProperty.Type<LocalTime,String> - 修饰符:
public static final - 源码定位:
L41 - 说明:
TODO
- 类型:
-
data- 类型:
LocalTime.Data - 修饰符:
private final - 源码定位:
L44 - 说明:
TODO
- 类型:
-
parsedFormat- 类型:
DateFormat - 修饰符:
private final - 源码定位:
L45 - 说明:
TODO
- 类型:
-
nextUpdateTimeMs- 类型:
long - 修饰符:
private - 源码定位:
L46 - 说明:
TODO
- 类型:
-
lastResult- 类型:
String - 修饰符:
private - 源码定位:
L47 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.renderer.item.properties.select.LocalTime.Data- 类型:
record - 修饰符:
private - 源码定位:
L98 - 说明:
TODO
- 类型:
构造器
private LocalTime(LocalTime.Data data, DateFormat parsedFormat) @ L49
- 构造器名:LocalTime
- 源码定位:L49
- 修饰符:private
参数:
- data: LocalTime.Data
- parsedFormat: DateFormat
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static LocalTime create(String format, String localeId, Optional<TimeZone> timeZone) @ L54
- 方法名:create
- 源码定位:L54
- 返回类型:LocalTime
- 修饰符:public static
参数:
- format: String
- localeId: String
- timeZone: Optional
说明:
TODO
private static DataResult<LocalTime> create(LocalTime.Data data) @ L58
- 方法名:create
- 源码定位:L58
- 返回类型:DataResult
- 修饰符:private static
参数:
- data: LocalTime.Data
说明:
TODO
public String get(ItemStack itemStack, ClientLevel level, LivingEntity owner, int seed, ItemDisplayContext displayContext) @ L73
- 方法名:get
- 源码定位:L73
- 返回类型:String
- 修饰符:public
参数:
- itemStack: ItemStack
- level: ClientLevel
- owner: LivingEntity
- seed: int
- displayContext: ItemDisplayContext
说明:
TODO
private String update() @ L83
- 方法名:update
- 源码定位:L83
- 返回类型:String
- 修饰符:private
参数:
- 无
说明:
TODO
public SelectItemModelProperty.Type<LocalTime,String> type() @ L87
- 方法名:type
- 源码定位:L87
- 返回类型:SelectItemModelProperty.Type<LocalTime,String>
- 修饰符:public
参数:
- 无
说明:
TODO
public Codec<String> valueCodec() @ L92
- 方法名:valueCodec
- 源码定位:L92
- 返回类型:Codec
- 修饰符:public
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class LocalTime implements SelectItemModelProperty<String> {
public static final String ROOT_LOCALE = "";
private static final long UPDATE_INTERVAL_MS = TimeUnit.SECONDS.toMillis(1L);
public static final Codec<String> VALUE_CODEC = Codec.STRING;
private static final Codec<TimeZone> TIME_ZONE_CODEC = VALUE_CODEC.comapFlatMap(s -> {
TimeZone tz = TimeZone.getTimeZone(s);
return tz.equals(TimeZone.UNKNOWN_ZONE) ? DataResult.error(() -> "Unknown timezone: " + s) : DataResult.success(tz);
}, TimeZone::getID);
private static final MapCodec<LocalTime.Data> DATA_MAP_CODEC = RecordCodecBuilder.mapCodec(
i -> i.group(
Codec.STRING.fieldOf("pattern").forGetter(o -> o.format),
Codec.STRING.optionalFieldOf("locale", "").forGetter(o -> o.localeId),
TIME_ZONE_CODEC.optionalFieldOf("time_zone").forGetter(o -> o.timeZone)
)
.apply(i, LocalTime.Data::new)
);
public static final SelectItemModelProperty.Type<LocalTime, String> TYPE = SelectItemModelProperty.Type.create(
DATA_MAP_CODEC.flatXmap(LocalTime::create, d -> DataResult.success(d.data)), VALUE_CODEC
);
private final LocalTime.Data data;
private final DateFormat parsedFormat;
private long nextUpdateTimeMs;
private String lastResult = "";
private LocalTime(LocalTime.Data data, DateFormat parsedFormat) {
this.data = data;
this.parsedFormat = parsedFormat;
}
public static LocalTime create(String format, String localeId, Optional<TimeZone> timeZone) {
return create(new LocalTime.Data(format, localeId, timeZone)).getOrThrow(msg -> new IllegalStateException("Failed to validate format: " + msg));
}
private static DataResult<LocalTime> create(LocalTime.Data data) {
ULocale locale = new ULocale(data.localeId);
Calendar calendar = data.timeZone.<Calendar>map(tz -> Calendar.getInstance(tz, locale)).orElseGet(() -> Calendar.getInstance(locale));
SimpleDateFormat parsedFormat = new SimpleDateFormat(data.format, locale);
parsedFormat.setCalendar(calendar);
try {
parsedFormat.format(new Date());
} catch (Exception var5) {
return DataResult.error(() -> "Invalid time format '" + parsedFormat + "': " + var5.getMessage());
}
return DataResult.success(new LocalTime(data, parsedFormat));
}
public @Nullable String get(ItemStack itemStack, @Nullable ClientLevel level, @Nullable LivingEntity owner, int seed, ItemDisplayContext displayContext) {
long currentTimeMs = Util.getMillis();
if (currentTimeMs > this.nextUpdateTimeMs) {
this.lastResult = this.update();
this.nextUpdateTimeMs = currentTimeMs + UPDATE_INTERVAL_MS;
}
return this.lastResult;
}
private String update() {
return this.parsedFormat.format(new Date());
}
@Override
public SelectItemModelProperty.Type<LocalTime, String> type() {
return TYPE;
}
@Override
public Codec<String> valueCodec() {
return VALUE_CODEC;
}
@OnlyIn(Dist.CLIENT)
private record Data(String format, String localeId, Optional<TimeZone> timeZone) {
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段/实现/方法调用/返回值 - 关联成员:
SelectItemModelProperty.Type.create()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.getMillis()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: