public static class Serializer implements RecipeSerializer<GrindstonePolishingRecipe> {
@Override
public GrindstonePolishingRecipe fromJson(ResourceLocation pRecipeId, JsonObject jsonObject) {
String group = GsonHelper.getAsString(jsonObject, "group", "");
NonNullList<Ingredient> nonnulllist = itemsFromJson(GsonHelper.getAsJsonArray(jsonObject, "ingredients"));
if (nonnulllist.isEmpty()) {
throw new JsonParseException("No ingredients for shapeless recipe");
}
if (!jsonObject.has("result")) throw new com.google.gson.JsonSyntaxException("Missing result, expected to find a string or object");
ItemStack result;
if (jsonObject.get("result").isJsonObject()) {
result = ShapedRecipe.itemStackFromJson(GsonHelper.getAsJsonObject(jsonObject, "result"));
}
else {
String resultItem = GsonHelper.getAsString(jsonObject, "result");
ResourceLocation resourcelocation = new ResourceLocation(resultItem);
result = new ItemStack(ForgeRegistries.ITEMS.getDelegate(resourcelocation).orElseThrow(() -> new IllegalStateException("Item: " + resultItem + " does not exist")));
}
int experience = GsonHelper.getAsInt(jsonObject, "experience", 0);
return new GrindstonePolishingRecipe(pRecipeId, group, nonnulllist, result, experience);
}
private static NonNullList<Ingredient> itemsFromJson(JsonArray pIngredientArray) {
NonNullList<Ingredient> nonnulllist = NonNullList.create();
for(int i = 0; i < pIngredientArray.size(); ++i) {
Ingredient ingredient = Ingredient.fromJson(pIngredientArray.get(i));
if (!ingredient.isEmpty()) {
nonnulllist.add(ingredient);
}
}
return nonnulllist;
}
@Nullable
@Override
public GrindstonePolishingRecipe fromNetwork(ResourceLocation pRecipeId, FriendlyByteBuf pBuffer) {
String group = pBuffer.readUtf();
ItemStack result = pBuffer.readItem();
int experience = pBuffer.readInt();
int i = pBuffer.readVarInt();
NonNullList<Ingredient> nonnulllist = NonNullList.withSize(i, Ingredient.EMPTY);
nonnulllist.replaceAll(ignored -> Ingredient.fromNetwork(pBuffer));
return new GrindstonePolishingRecipe(pRecipeId, group, nonnulllist, result, experience);
}
@Override
public void toNetwork(FriendlyByteBuf pBuffer, GrindstonePolishingRecipe pRecipe) {
pBuffer.writeUtf(pRecipe.recipeGroup);
pBuffer.writeVarInt(pRecipe.ingredients.size());
for(Ingredient ingredient : pRecipe.ingredients) {
ingredient.toNetwork(pBuffer);
}
pBuffer.writeItem(pRecipe.result);
pBuffer.writeInt(pRecipe.experience);
}
}