下面列出了怎么用net.minecraft.util.registry.DefaultedRegistry的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Gets the current {@link Identifier} for the object in the registry if it exists. If the object does not exist in
* the provided registry, {@code fallback} will be returned instead.
*
* @param registry the registry to query. Must NOT be an instance of {@link DefaultedRegistry}, or else this method
* will throw an {@link IllegalArgumentException}.
* @return an {@link Identifier} if the instance is registered or if the fallback is non null, otherwise null
*/
@Nullable
public static <T> Identifier getOrFallback(Registry<T> registry, T instance, @Nullable Identifier fallback) {
if (registry instanceof DefaultedRegistry) {
// While we could just cast here, I want to catch these cases where they come up and fix them in the mixin.
throw new IllegalArgumentException("Used the non-defaulted getOrFallback method with a DefaultedRegistry");
}
Identifier current = registry.getId(instance);
if (current == null) {
return fallback;
} else {
return current;
}
}
@SuppressWarnings("unchecked")
protected <T> void postMutateRegistry(Registry<T> registry) {
if (!(registry instanceof SimpleRegistry)) return;
if (registry instanceof DefaultedRegistry) return;
ISimpleRegistry<T> iregistry = (ISimpleRegistry<T>) registry;
DefaultRegistry<T> defaultRegistry = (DefaultRegistry<T>) DefaultRegistry.DEFAULT_REGISTRIES.get(registry);
if (defaultRegistry == null) return;
for (Map.Entry<Identifier, T> entry : defaultRegistry.defaultEntriesById.entrySet()) {
if (registry.getId(entry.getValue()) == null) {
RegistryKey<T> key = RegistryKey.of(iregistry.getRegistryKey(), entry.getKey());
iregistry.register(entry.getValue(), iregistry.getNextId(), key, false);
}
}
}
@Override
public Identifier getDefaultKey() {
if (vanilla instanceof DefaultedRegistry) {
return ((DefaultedRegistry<V>) vanilla).getDefaultId();
}
return null;
}
/**
* Gets the current {@link Identifier} for the object in the registry if it exists. If the object does not exist in
* the provided registry, {@code fallback} will be returned instead.
*
* @param registry the registry to query. Must be an instance of {@link DefaultedRegistry}.
* @return an {@link Identifier} if the instance is registered or if the fallback is non null, otherwise null
*/
@Nullable
public static <T> Identifier getOrFallback(DefaultedRegistry<T> registry, T instance, @Nullable Identifier fallback) {
Identifier current = registry.getId(instance);
if (current.equals(registry.getDefaultId())) {
return fallback;
} else {
return current;
}
}
public <K> VillagerResourceMetadata.HatType getHatType(Object2ObjectMap<K, HatType> cache, String type, DefaultedRegistry<K> registry, K key) {
if (cache.containsKey(key)) {
return cache.get(key); // People often complain that villagers cause lag,
// so let's do better than Mojang and rather NOT go
// through all the lambda generations if we can avoid it.
}
return loadHatType(cache, type, registry, key);
}
private <K> VillagerResourceMetadata.HatType loadHatType(Map<K, HatType> cache, String type, DefaultedRegistry<K> registry, K key) {
return cache.computeIfAbsent(key, k -> {
try (Resource res = resourceManager.getResource(findTexture(type, registry.getId(k)))) {
VillagerResourceMetadata meta = res.getMetadata(VillagerResourceMetadata.READER);
if (meta != null) {
return meta.getHatType();
}
} catch (IOException e) { }
return HatType.NONE;
});
}
@SuppressWarnings("UnnecessaryQualifiedMemberReference")
@Redirect(method = "Lnet/minecraft/village/TradeOffers$TypeAwareBuyForOneEmeraldFactory;<init>(IIILjava/util/Map;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/registry/DefaultedRegistry;stream()Ljava/util/stream/Stream;"))
private Stream<VillagerType> skipCheck(DefaultedRegistry<VillagerType> defaultedRegistry) {
return Stream.empty(); //skip check
}