# Pastebin rYJbwHOj package net.minecraftforge.registries; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; import javax.annotation.Nullable; import org.apache.commons.lang3.Validate; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.RegistryNamespaced; import net.minecraftforge.fml.common.registry.IForgeRegistryEntry; public class NamespacedWrapper> extends RegistryNamespaced implements ILockableRegistry { private boolean locked = false; private ForgeRegistry delegate; @Override public void register(int id, ResourceLocation key, V value) { if (locked) throw new IllegalStateException("Can not register to a locked registry. Modder should use Forge Register methods."); Validate.notNull(value); if (value.getRegistryName() == null) value.setRegistryName(key); this.delegate.add(id, value); } @Override public void putObject(ResourceLocation key, V value) { if (locked) throw new IllegalStateException("Can not register to a locked registry. Modder should use Forge Register methods."); Validate.notNull(key); Validate.notNull(value); if (value.getRegistryName() == null) value.setRegistryName(null); this.delegate.add(-1, value); } // Reading Functions @Override @Nullable public V getObject(@Nullable ResourceLocation name) { return this.delegate.getValue(name); } @Override @Nullable public ResourceLocation getNameForObject(V value) { return this.delegate.getKey(value); } @Override public boolean containsKey(ResourceLocation key) { return this.delegate.containsKey(key); } @Override public int getIDForObject(@Nullable V value) { return this.delegate.getID(value); } @Override @Nullable public V getObjectById(int id) { return this.delegate.getValue(id); } @Override public Iterator iterator() { return this.delegate.iterator(); } @Override public Set getKeys() { return this.delegate.getKeys(); } @Override @Nullable public V getRandomObject(Random random) { List lst = this.delegate.getValues(); if (lst.isEmpty()) return null; return lst.get(random.nextInt(lst.size())); } //internal @Override //We override all public methods, this should be fine as null. protected Map createUnderlyingMap(){ return null; } @Override public void lock(){ this.locked = true; } }