Files
MinecraftForge/src/main/java/net/minecraftforge/registries/NamespacedDefaultedWrapper.java
T

58 lines
1.9 KiB
Java
Raw Normal View History

/*
* Copyright (c) Forge Development LLC and contributors
* SPDX-License-Identifier: LGPL-2.1-only
*/
2017-06-19 15:02:18 -07:00
package net.minecraftforge.registries;
2019-05-23 16:02:15 -07:00
import java.util.Optional;
2022-03-01 14:59:27 -06:00
import java.util.function.Function;
2017-06-19 15:02:18 -07:00
2022-11-22 13:32:47 -06:00
import net.minecraft.core.DefaultedRegistry;
2022-03-01 14:59:27 -06:00
import net.minecraft.core.Holder;
2021-07-17 00:08:49 -05:00
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
2022-11-22 13:32:47 -06:00
import net.minecraft.util.RandomSource;
2022-06-07 15:31:26 -05:00
import org.jetbrains.annotations.Nullable;
2020-06-19 10:58:45 -04:00
2024-04-30 10:56:00 -07:00
class NamespacedDefaultedWrapper<T> extends NamespacedWrapper<T> implements DefaultedRegistry<T> {
private final ForgeRegistry<T> delegate;
2022-11-22 13:32:47 -06:00
private final ResourceLocation defaultKey;
private Holder.Reference<T> defaultHolder;
2022-11-22 13:32:47 -06:00
NamespacedDefaultedWrapper(ForgeRegistry<T> fowner, Function<T, Holder.Reference<T>> intrusiveHolderCallback, RegistryManager stage) {
super(fowner, intrusiveHolderCallback, stage);
this.delegate = fowner;
this.defaultKey = fowner.getDefaultKey();
2017-06-19 15:02:18 -07:00
}
// Reading Functions
2017-06-24 01:46:05 -07:00
@Override
2024-04-30 10:56:00 -07:00
public T get(@Nullable ResourceLocation name) {
return this.delegate.getValue(name); //getOrDefault
2017-06-19 15:02:18 -07:00
}
2020-09-23 23:35:34 -07:00
@Override
2024-04-30 10:56:00 -07:00
public Optional<Holder.Reference<T>> getRandom(RandomSource rand) {
2022-11-22 13:32:47 -06:00
if (this.defaultHolder != null)
return super.getRandom(rand).or(() -> Optional.of(this.defaultHolder));
2017-06-19 15:02:18 -07:00
2022-11-22 13:32:47 -06:00
return super.getRandom(rand);
2017-06-19 15:02:18 -07:00
}
2021-11-26 18:57:41 +00:00
@Override
2024-04-30 10:56:00 -07:00
public ResourceLocation getDefaultKey() {
return this.delegate.getDefaultKey();
}
2022-11-22 13:32:47 -06:00
@Nullable
@Override
2024-04-30 10:56:00 -07:00
Holder.Reference<T> onAdded(RegistryManager stage, int id, ResourceKey<T> key, T newValue, T oldValue) {
2022-11-22 13:32:47 -06:00
Holder.Reference<T> newHolder = super.onAdded(stage, id, key, newValue, oldValue);
2022-11-22 13:32:47 -06:00
if (newHolder != null && this.defaultKey != null && this.defaultKey.equals(key.location()))
this.defaultHolder = newHolder;
2022-11-22 13:32:47 -06:00
return newHolder;
}
2017-06-19 15:02:18 -07:00
}