Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / RegistryMaterials.java
package net.minecraft.server;

import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.Optional;
import java.util.Random;
import java.util.Set;
import javax.annotation.Nullable;
import org.apache.commons.lang3.Validate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class RegistryMaterials<T> extends IRegistryWritable<T> {

    protected static final Logger LOGGER = LogManager.getLogger();
    protected final RegistryID<T> b = new RegistryID<>(256);
    protected final BiMap<MinecraftKey, T> c = HashBiMap.create();
    protected Object[] d;
    private int V;

    public RegistryMaterials() {}

    @Override
    public <V extends T> V a(int i, MinecraftKey minecraftkey, V v0) {
        this.b.a(v0, i);
        Validate.notNull(minecraftkey);
        Validate.notNull(v0);
        this.d = null;
        if (this.c.containsKey(minecraftkey)) {
            RegistryMaterials.LOGGER.debug("Adding duplicate key '{}' to registry", minecraftkey);
        }

        this.c.put(minecraftkey, v0);
        if (this.V <= i) {
            this.V = i + 1;
        }

        return v0;
    }

    @Override
    public <V extends T> V a(MinecraftKey minecraftkey, V v0) {
        return this.a(this.V, minecraftkey, v0);
    }

    @Nullable
    @Override
    public MinecraftKey getKey(T t0) {
        return (MinecraftKey) this.c.inverse().get(t0);
    }

    @Override
    public int a(@Nullable T t0) {
        return this.b.getId(t0);
    }

    @Nullable
    @Override
    public T fromId(int i) {
        return this.b.fromId(i);
    }

    public Iterator<T> iterator() {
        return this.b.iterator();
    }

    @Nullable
    @Override
    public T get(@Nullable MinecraftKey minecraftkey) {
        return this.c.get(minecraftkey);
    }

    @Override
    public Optional<T> getOptional(@Nullable MinecraftKey minecraftkey) {
        return Optional.ofNullable(this.c.get(minecraftkey));
    }

    @Override
    public Set<MinecraftKey> keySet() {
        return Collections.unmodifiableSet(this.c.keySet());
    }

    @Override
    public boolean c() {
        return this.c.isEmpty();
    }

    @Nullable
    @Override
    public T a(Random random) {
        if (this.d == null) {
            Collection<?> collection = this.c.values();

            if (collection.isEmpty()) {
                return null;
            }

            this.d = collection.toArray(new Object[collection.size()]);
        }

        return this.d[random.nextInt(this.d.length)];
    }
}