/* * Copyright (c) Forge Development LLC and contributors * SPDX-License-Identifier: LGPL-2.1-only */ package net.minecraftforge.registries; import java.util.Optional; import java.util.function.Function; import net.minecraft.core.DefaultedRegistry; import net.minecraft.core.Holder; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; import org.jetbrains.annotations.Nullable; class NamespacedDefaultedWrapper extends NamespacedWrapper implements DefaultedRegistry { private final ForgeRegistry delegate; private final ResourceLocation defaultKey; private Holder.Reference defaultHolder; NamespacedDefaultedWrapper(ForgeRegistry fowner, Function> intrusiveHolderCallback, RegistryManager stage) { super(fowner, intrusiveHolderCallback, stage); this.delegate = fowner; this.defaultKey = fowner.getDefaultKey(); } // Reading Functions @Override public T get(@Nullable ResourceLocation name) { return this.delegate.getValue(name); //getOrDefault } @Override public Optional> getRandom(RandomSource rand) { if (this.defaultHolder != null) return super.getRandom(rand).or(() -> Optional.of(this.defaultHolder)); return super.getRandom(rand); } @Override public ResourceLocation getDefaultKey() { return this.delegate.getDefaultKey(); } @Nullable @Override Holder.Reference onAdded(RegistryManager stage, int id, ResourceKey key, T newValue, T oldValue) { Holder.Reference newHolder = super.onAdded(stage, id, key, newValue, oldValue); if (newHolder != null && this.defaultKey != null && this.defaultKey.equals(key.location())) this.defaultHolder = newHolder; return newHolder; } }