package gregtech.api.recipe.metadata; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; import org.jetbrains.annotations.Contract; import gregtech.api.recipe.RecipeMetadataKey; import gregtech.api.util.FieldsAreNonnullByDefault; import gregtech.api.util.MethodsReturnNonnullByDefault; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @FieldsAreNonnullByDefault public final class RecipeMetadataStorage implements IRecipeMetadataStorage { private final Map, Object> metadata = new HashMap<>(); public RecipeMetadataStorage() {} private RecipeMetadataStorage(Map, Object> metadata) { this.metadata.putAll(metadata); } @Override public void store(RecipeMetadataKey key, @Nullable T value) { metadata.put(key, key.cast(value)); } @Nullable @Override public T getMetadata(RecipeMetadataKey key) { return key.cast(metadata.get(key)); } @Contract("_, !null -> !null") @Nullable @Override public T getMetadataOrDefault(RecipeMetadataKey key, @Nullable T defaultValue) { return key.cast(metadata.getOrDefault(key, defaultValue)); } @Override public Set, Object>> getEntries() { return metadata.entrySet(); } @Override public IRecipeMetadataStorage copy() { return new RecipeMetadataStorage(metadata); } }