RegistrySynchronization.java
net.minecraft.core.RegistrySynchronization
信息
- 全限定名:net.minecraft.core.RegistrySynchronization
- 类型:public class
- 包:net.minecraft.core
- 源码路径:src/main/java/net/minecraft/core/RegistrySynchronization.java
- 起始行号:L21
- 职责:
TODO
字段/常量
NETWORKABLE_REGISTRIES- 类型:
Set<ResourceKey<?extends Registry<?>>> - 修饰符:
private static final - 源码定位:
L22 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.core.RegistrySynchronization.PackedRegistryEntry- 类型:
record - 修饰符:
public - 源码定位:
L91 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static void packRegistries(DynamicOps<Tag> ops, RegistryAccess registries, Set<KnownPack> clientKnownPacks, BiConsumer<ResourceKey<?extends Registry<?>>,List<RegistrySynchronization.PackedRegistryEntry>> output) @ L27
- 方法名:packRegistries
- 源码定位:L27
- 返回类型:void
- 修饰符:public static
参数:
- ops: DynamicOps
- registries: RegistryAccess
- clientKnownPacks: Set
- output: BiConsumer<ResourceKey>,List<RegistrySynchronization.PackedRegistryEntry>>
说明:
TODO
private static <T> void packRegistry(DynamicOps<Tag> ops, RegistryDataLoader.RegistryData<T> registryData, RegistryAccess registries, Set<KnownPack> clientKnownPacks, BiConsumer<ResourceKey<?extends Registry<?>>,List<RegistrySynchronization.PackedRegistryEntry>> output) @ L37
- 方法名:packRegistry
- 源码定位:L37
- 返回类型:
void - 修饰符:private static
参数:
- ops: DynamicOps
- registryData: RegistryDataLoader.RegistryData
- registries: RegistryAccess
- clientKnownPacks: Set
- output: BiConsumer<ResourceKey>,List<RegistrySynchronization.PackedRegistryEntry>>
说明:
TODO
private static Stream<RegistryAccess.RegistryEntry<?>> ownedNetworkableRegistries(RegistryAccess access) @ L73
- 方法名:ownedNetworkableRegistries
- 源码定位:L73
- 返回类型:Stream<RegistryAccess.RegistryEntry<?>>
- 修饰符:private static
参数:
- access: RegistryAccess
说明:
TODO
public static Stream<RegistryAccess.RegistryEntry<?>> networkedRegistries(LayeredRegistryAccess<RegistryLayer> registries) @ L77
- 方法名:networkedRegistries
- 源码定位:L77
- 返回类型:Stream<RegistryAccess.RegistryEntry<?>>
- 修饰符:public static
参数:
- registries: LayeredRegistryAccess
说明:
TODO
public static Stream<RegistryAccess.RegistryEntry<?>> networkSafeRegistries(LayeredRegistryAccess<RegistryLayer> registries) @ L81
- 方法名:networkSafeRegistries
- 源码定位:L81
- 返回类型:Stream<RegistryAccess.RegistryEntry<?>>
- 修饰符:public static
参数:
- registries: LayeredRegistryAccess
说明:
TODO
public static boolean isNetworkable(ResourceKey<?extends Registry<?>> key) @ L87
- 方法名:isNetworkable
- 源码定位:L87
- 返回类型:boolean
- 修饰符:public static
参数:
- key: ResourceKey>
说明:
TODO
代码
public class RegistrySynchronization {
private static final Set<ResourceKey<? extends Registry<?>>> NETWORKABLE_REGISTRIES = RegistryDataLoader.SYNCHRONIZED_REGISTRIES
.stream()
.map(RegistryDataLoader.RegistryData::key)
.collect(Collectors.toUnmodifiableSet());
public static void packRegistries(
DynamicOps<Tag> ops,
RegistryAccess registries,
Set<KnownPack> clientKnownPacks,
BiConsumer<ResourceKey<? extends Registry<?>>, List<RegistrySynchronization.PackedRegistryEntry>> output
) {
RegistryDataLoader.SYNCHRONIZED_REGISTRIES
.forEach(registryEntry -> packRegistry(ops, (RegistryDataLoader.RegistryData<?>)registryEntry, registries, clientKnownPacks, output));
}
private static <T> void packRegistry(
DynamicOps<Tag> ops,
RegistryDataLoader.RegistryData<T> registryData,
RegistryAccess registries,
Set<KnownPack> clientKnownPacks,
BiConsumer<ResourceKey<? extends Registry<?>>, List<RegistrySynchronization.PackedRegistryEntry>> output
) {
registries.lookup(registryData.key())
.ifPresent(
registry -> {
List<RegistrySynchronization.PackedRegistryEntry> packedElements = new ArrayList<>(registry.size());
registry.listElements()
.forEach(
element -> {
boolean canSkipContents = registry.registrationInfo(element.key())
.flatMap(RegistrationInfo::knownPackInfo)
.filter(clientKnownPacks::contains)
.isPresent();
Optional<Tag> contents;
if (canSkipContents) {
contents = Optional.empty();
} else {
Tag encodedElement = registryData.elementCodec()
.encodeStart(ops, element.value())
.getOrThrow(s -> new IllegalArgumentException("Failed to serialize " + element.key() + ": " + s));
contents = Optional.of(encodedElement);
}
packedElements.add(new RegistrySynchronization.PackedRegistryEntry(element.key().identifier(), contents));
}
);
output.accept(registry.key(), packedElements);
}
);
}
private static Stream<RegistryAccess.RegistryEntry<?>> ownedNetworkableRegistries(RegistryAccess access) {
return access.registries().filter(e -> isNetworkable(e.key()));
}
public static Stream<RegistryAccess.RegistryEntry<?>> networkedRegistries(LayeredRegistryAccess<RegistryLayer> registries) {
return ownedNetworkableRegistries(registries.getAccessFrom(RegistryLayer.WORLDGEN));
}
public static Stream<RegistryAccess.RegistryEntry<?>> networkSafeRegistries(LayeredRegistryAccess<RegistryLayer> registries) {
Stream<RegistryAccess.RegistryEntry<?>> staticRegistries = registries.getLayer(RegistryLayer.STATIC).registries();
Stream<RegistryAccess.RegistryEntry<?>> networkedRegistries = networkedRegistries(registries);
return Stream.concat(networkedRegistries, staticRegistries);
}
public static boolean isNetworkable(ResourceKey<? extends Registry<?>> key) {
return NETWORKABLE_REGISTRIES.contains(key);
}
public record PackedRegistryEntry(Identifier id, Optional<Tag> data) {
public static final StreamCodec<ByteBuf, RegistrySynchronization.PackedRegistryEntry> STREAM_CODEC = StreamCodec.composite(
Identifier.STREAM_CODEC,
RegistrySynchronization.PackedRegistryEntry::id,
ByteBufCodecs.TAG.apply(ByteBufCodecs::optional),
RegistrySynchronization.PackedRegistryEntry::data,
RegistrySynchronization.PackedRegistryEntry::new
);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
StreamCodec.composite()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: