ActuallyAdditions/src/main/java/de/ellpeck/actuallyadditions/common/recipes/RecipeFactoryBase.java
canitzp 2c07ef0fa0
Start to work on DataGenerator. Crusher Recipes should now be able to be serialized to json by its Factory. In general the serializing to json is handled by the RecipeFactoryBase class.
Removed some Recipes after the decision to not port it or change it to loot tables in favor of recipes.
A lot more @Nonnull annotations.

Signed-off-by: canitzp <canitzp@gmail.com>
2020-10-07 08:25:54 +02:00

95 lines
3.8 KiB
Java

package de.ellpeck.actuallyadditions.common.recipes;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipeSerializer;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.crafting.CraftingHelper;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.ForgeRegistryEntry;
public abstract class RecipeFactoryBase<T extends IDummyRecipe<T>> extends ForgeRegistryEntry<IRecipeSerializer<?>> implements IRecipeSerializer<T> {
public abstract void write(JsonObject json, T recipe);
protected Ingredient readIngredient(JsonObject json, String key){
if(json.has(key)){
return Ingredient.deserialize(json.get(key));
} else {
throw new JsonSyntaxException(String.format("Json element does not contain any element with the key: '%s'", key));
}
}
protected Ingredient readIngredient(JsonObject json, String key, Ingredient alternative){
try{
return this.readIngredient(json, key);
} catch(JsonSyntaxException e){
return alternative;
}
}
protected ItemStack readItemStack(JsonObject json, String key){
if(json.has(key)){
if(json.get(key).isJsonObject()){
return CraftingHelper.getItemStack(json.get(key).getAsJsonObject(), true);
} else if(json.get(key).isJsonPrimitive()){
ResourceLocation itemKey = new ResourceLocation(json.get(key).getAsString());
if(ForgeRegistries.ITEMS.containsKey(itemKey)){
return new ItemStack(ForgeRegistries.ITEMS.getValue(itemKey));
} else {
throw new JsonSyntaxException(String.format("Item with the key: '%s' is not registered!", key));
}
} else {
throw new JsonSyntaxException(String.format("Json element with the key: '%s' is neither a object nor a string!", key));
}
} else {
throw new JsonSyntaxException(String.format("Json element does not contain any element with the key: '%s'!", key));
}
}
protected JsonObject writeItemStack(ItemStack stack){
JsonObject json = new JsonObject();
json.addProperty("item", stack.getItem().getRegistryName().toString());
json.addProperty("count", stack.getCount());
if(stack.hasTag()){
json.add("nbt", new JsonParser().parse(stack.getTag().toString()));
}
return json;
}
protected ItemStack readItemStack(JsonObject json, String key, ItemStack alternative){
try{
return this.readItemStack(json, key);
} catch(JsonSyntaxException e){
return alternative;
}
}
protected int readInt(JsonObject json, String key){
if(json.has(key)){
if(json.get(key).isJsonPrimitive()){
try{
return json.get(key).getAsJsonPrimitive().getAsInt();
} catch(NumberFormatException e){
throw new JsonSyntaxException(String.format("Json element '%s' is not a valid integer!", key), e);
}
} else {
throw new JsonSyntaxException(String.format("Json element '%s' is not a valid integer!", key));
}
} else {
throw new JsonSyntaxException(String.format("Json element '%s' does not exist!", key));
}
}
protected int readInt(JsonObject json, String key, int alternative){
try{
return this.readInt(json, key);
} catch(Exception e){
return alternative;
}
}
}