2018-07-01 14:17:28 -07:00
|
|
|
/*
|
2022-04-14 03:42:00 +00:00
|
|
|
* Copyright (c) Forge Development LLC and contributors
|
2022-02-28 13:41:23 -08:00
|
|
|
* SPDX-License-Identifier: LGPL-2.1-only
|
2018-07-01 14:17:28 -07:00
|
|
|
*/
|
|
|
|
|
|
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> {
|
2022-03-02 13:38:02 -08:00
|
|
|
private final ForgeRegistry<T> delegate;
|
2022-11-22 13:32:47 -06:00
|
|
|
private final ResourceLocation defaultKey;
|
|
|
|
|
private Holder.Reference<T> defaultHolder;
|
2022-03-02 13:38:02 -08:00
|
|
|
|
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
|
|
|
}
|
|
|
|
|
|
2019-02-14 15:08:53 -08: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) {
|
2019-02-14 15:08:53 -08:00
|
|
|
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() {
|
2022-03-02 13:38:02 -08:00
|
|
|
return this.delegate.getDefaultKey();
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-22 13:32:47 -06:00
|
|
|
@Nullable
|
2022-03-02 13:38:02 -08:00
|
|
|
@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);
|
2019-02-14 15:08:53 -08:00
|
|
|
|
2022-11-22 13:32:47 -06:00
|
|
|
if (newHolder != null && this.defaultKey != null && this.defaultKey.equals(key.location()))
|
|
|
|
|
this.defaultHolder = newHolder;
|
2022-03-02 13:38:02 -08:00
|
|
|
|
2022-11-22 13:32:47 -06:00
|
|
|
return newHolder;
|
2022-03-16 15:36:00 -05:00
|
|
|
}
|
2017-06-19 15:02:18 -07:00
|
|
|
}
|