From 74c6c14b2a491e3c4256c22724181abebc40d683 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Fri, 2 Oct 2020 11:34:07 +0300 Subject: [PATCH] Smelter recipe serialization fix --- psd/tool_items.psd | Bin 33718 -> 34511 bytes .../ru/betterend/recipe/AlloyingRecipe.java | 49 ++++++- .../recipe/AlloyingRecipeSerializer.java | 43 ------- .../ru/betterend/recipe/CraftingRecipes.java | 120 ++++++++++++++++++ 4 files changed, 168 insertions(+), 44 deletions(-) delete mode 100644 src/main/java/ru/betterend/recipe/AlloyingRecipeSerializer.java diff --git a/psd/tool_items.psd b/psd/tool_items.psd index 5566d8ab6a6dd23ee3c8f035f8c2d5c45609084b..30df8a149dd26cd410a7774f5284d6a3f76ea647 100644 GIT binary patch delta 2731 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 diff --git a/src/main/java/ru/betterend/recipe/AlloyingRecipe.java b/src/main/java/ru/betterend/recipe/AlloyingRecipe.java index 248ed9ac..f92d5aac 100644 --- a/src/main/java/ru/betterend/recipe/AlloyingRecipe.java +++ b/src/main/java/ru/betterend/recipe/AlloyingRecipe.java @@ -1,18 +1,24 @@ package ru.betterend.recipe; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.inventory.Inventory; import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketByteBuf; import net.minecraft.recipe.Ingredient; import net.minecraft.recipe.Recipe; import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.RecipeType; import net.minecraft.tag.Tag; import net.minecraft.util.Identifier; +import net.minecraft.util.JsonHelper; import net.minecraft.util.collection.DefaultedList; +import net.minecraft.util.registry.Registry; import net.minecraft.world.World; import ru.betterend.BetterEnd; import ru.betterend.registry.BlockRegistry; @@ -21,7 +27,7 @@ public class AlloyingRecipe implements Recipe { public final static String GROUP = "alloying"; public final static RecipeType TYPE = EndRecipeManager.registerType(GROUP); - public final static AlloyingRecipeSerializer SERIALIZER = EndRecipeManager.registerSerializer(GROUP, new AlloyingRecipeSerializer()); + public final static Serializer SERIALIZER = EndRecipeManager.registerSerializer(GROUP, new Serializer()); protected final RecipeType type; protected final Identifier id; @@ -202,4 +208,45 @@ public class AlloyingRecipe implements Recipe { EndRecipeManager.addRecipe(AlloyingRecipe.TYPE, new AlloyingRecipe(id, group, primaryInput, secondaryInput, output, experience, smeltTime)); } } + + public static class Serializer implements RecipeSerializer { + @Override + public AlloyingRecipe read(Identifier id, JsonObject json) { + JsonArray ingredients = JsonHelper.getArray(json, "ingredients"); + Ingredient primaryInput = Ingredient.fromJson(ingredients.get(0)); + Ingredient secondaryInput = Ingredient.fromJson(ingredients.get(1)); + String resultStr = JsonHelper.getString(json, "result"); + String group = JsonHelper.getString(json, "group", ""); + Identifier resultId = new Identifier(resultStr); + ItemStack output = new ItemStack(Registry.ITEM.getOrEmpty(resultId).orElseThrow(() -> { + return new IllegalStateException("Item: " + resultStr + " does not exists!"); + })); + float experience = JsonHelper.getFloat(json, "experience", 0.0F); + int smeltTime = JsonHelper.getInt(json, "smelttime", 350); + + return new AlloyingRecipe(id, group, primaryInput, secondaryInput, output, experience, smeltTime); + } + + @Override + public AlloyingRecipe read(Identifier id, PacketByteBuf packetBuffer) { + String group = packetBuffer.readString(32767); + Ingredient primary = Ingredient.fromPacket(packetBuffer); + Ingredient secondary = Ingredient.fromPacket(packetBuffer); + ItemStack output = packetBuffer.readItemStack(); + float experience = packetBuffer.readFloat(); + int smeltTime = packetBuffer.readVarInt(); + + return new AlloyingRecipe(id, group, primary, secondary, output, experience, smeltTime); + } + + @Override + public void write(PacketByteBuf packetBuffer, AlloyingRecipe recipe) { + packetBuffer.writeString(recipe.group); + recipe.primaryInput.write(packetBuffer); + recipe.secondaryInput.write(packetBuffer); + packetBuffer.writeItemStack(recipe.output); + packetBuffer.writeFloat(recipe.experience); + packetBuffer.writeVarInt(recipe.smeltTime); + } + } } diff --git a/src/main/java/ru/betterend/recipe/AlloyingRecipeSerializer.java b/src/main/java/ru/betterend/recipe/AlloyingRecipeSerializer.java deleted file mode 100644 index da82ed0e..00000000 --- a/src/main/java/ru/betterend/recipe/AlloyingRecipeSerializer.java +++ /dev/null @@ -1,43 +0,0 @@ -package ru.betterend.recipe; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.util.Identifier; -import net.minecraft.util.JsonHelper; -import net.minecraft.util.registry.Registry; - -public class AlloyingRecipeSerializer implements RecipeSerializer { - - @Override - public AlloyingRecipe read(Identifier id, JsonObject json) { - JsonArray ingredients = JsonHelper.getArray(json, "ingredients"); - Ingredient primaryInput = Ingredient.fromJson(ingredients.get(0)); - Ingredient secondaryInput = Ingredient.fromJson(ingredients.get(1)); - String resultStr = JsonHelper.getString(json, "result"); - String group = JsonHelper.getString(json, "group", ""); - Identifier resultId = new Identifier(resultStr); - ItemStack output = new ItemStack(Registry.ITEM.getOrEmpty(resultId).orElseThrow(() -> { - return new IllegalStateException("Item: " + resultStr + " does not exists!"); - })); - float experience = JsonHelper.getFloat(json, "experience", 0.0F); - int smeltTime = JsonHelper.getInt(json, "smelttime", 350); - - return new AlloyingRecipe(id, group, primaryInput, secondaryInput, output, experience, smeltTime); - } - - @Override - public AlloyingRecipe read(Identifier id, PacketByteBuf packetBuffer) { - Identifier recipeId = packetBuffer.readIdentifier(); - return EndRecipeManager.getRecipe(AlloyingRecipe.TYPE, recipeId); - } - - @Override - public void write(PacketByteBuf packetBuffer, AlloyingRecipe recipe) { - packetBuffer.writeIdentifier(recipe.id); - } -} diff --git a/src/main/java/ru/betterend/recipe/CraftingRecipes.java b/src/main/java/ru/betterend/recipe/CraftingRecipes.java index 18c4efe7..58dd893a 100644 --- a/src/main/java/ru/betterend/recipe/CraftingRecipes.java +++ b/src/main/java/ru/betterend/recipe/CraftingRecipes.java @@ -5,9 +5,39 @@ import net.minecraft.block.Blocks; import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraft.util.registry.Registry; + import ru.betterend.registry.BlockRegistry; +import ru.betterend.registry.ItemRegistry; public class CraftingRecipes { + private static String[] helmet_recipe = new String[] { + "III", "I I" + }; + private static String[] chestplate_recipe = new String[] { + "I I", "III", "III" + }; + private static String[] leggings_recipe = new String[] { + "III", "I I", "I I" + }; + private static String[] boots_recipe = new String[] { + "I I", "I I" + }; + private static String[] shovel_recipe = new String[] { + "I", "#", "#" + }; + private static String[] sword_recipe = new String[] { + "I", "I", "#" + }; + private static String[] pickaxe_recipe = new String[] { + "III", " # ", " # " + }; + private static String[] axe_recipe = new String[] { + "II", "#I", "# " + }; + private static String[] hoe_recipe = new String[] { + "II", "# ", "# " + }; + public static void register() { if (blockExists(BlockRegistry.ENDER_BLOCK)) { RecipeBuilder.make("ender_pearl_to_block", BlockRegistry.ENDER_BLOCK) @@ -28,6 +58,96 @@ public class CraftingRecipes { .build(); } + if (itemExists(ItemRegistry.TERMINITE_INGOT)) { + registerHelmet("terminite", ItemRegistry.TERMINITE_INGOT, ItemRegistry.TERMINITE_HELMET); + registerChestplate("terminite", ItemRegistry.TERMINITE_INGOT, ItemRegistry.TERMINITE_CHESTPLATE); + registerLeggings("terminite", ItemRegistry.TERMINITE_INGOT, ItemRegistry.TERMINITE_LEGGINGS); + registerBoots("terminite", ItemRegistry.TERMINITE_INGOT, ItemRegistry.TERMINITE_BOOTS); + registerShovel("terminite", ItemRegistry.TERMINITE_INGOT, ItemRegistry.TERMINITE_SHOVEL); + registerSword("terminite", ItemRegistry.TERMINITE_INGOT, ItemRegistry.TERMINITE_SWORD); + registerPickaxe("terminite", ItemRegistry.TERMINITE_INGOT, ItemRegistry.TERMINITE_PICKAXE); + registerAxe("terminite", ItemRegistry.TERMINITE_INGOT, ItemRegistry.TERMINITE_AXE); + registerHoe("terminite", ItemRegistry.TERMINITE_INGOT, ItemRegistry.TERMINITE_HOE); + } + if (itemExists(ItemRegistry.AETERNIUM_INGOT)) { + registerHelmet("aeternium", ItemRegistry.AETERNIUM_INGOT, ItemRegistry.AETERNIUM_HELMET); + registerChestplate("aeternium", ItemRegistry.AETERNIUM_INGOT, ItemRegistry.AETERNIUM_CHESTPLATE); + registerLeggings("aeternium", ItemRegistry.AETERNIUM_INGOT, ItemRegistry.AETERNIUM_LEGGINGS); + registerBoots("aeternium", ItemRegistry.AETERNIUM_INGOT, ItemRegistry.AETERNIUM_BOOTS); + registerShovel("aeternium", ItemRegistry.AETERNIUM_INGOT, ItemRegistry.AETERNIUM_SHOVEL); + registerSword("aeternium", ItemRegistry.AETERNIUM_INGOT, ItemRegistry.AETERNIUM_SWORD); + registerPickaxe("aeternium", ItemRegistry.AETERNIUM_INGOT, ItemRegistry.AETERNIUM_PICKAXE); + registerAxe("aeternium", ItemRegistry.AETERNIUM_INGOT, ItemRegistry.AETERNIUM_AXE); + registerHoe("aeternium", ItemRegistry.AETERNIUM_INGOT, ItemRegistry.AETERNIUM_HOE); + } + } + + private static void registerHelmet(String name, Item material, Item result) { + RecipeBuilder.make(name + "_helmet", result) + .setShape(helmet_recipe) + .addMaterial('I', material) + .build(); + } + + private static void registerChestplate(String name, Item material, Item result) { + RecipeBuilder.make(name + "_chestplate", result) + .setShape(chestplate_recipe) + .addMaterial('I', material) + .build(); + } + + private static void registerLeggings(String name, Item material, Item result) { + RecipeBuilder.make(name + "_leggings", result) + .setShape(leggings_recipe) + .addMaterial('I', material) + .build(); + } + + private static void registerBoots(String name, Item material, Item result) { + RecipeBuilder.make(name + "_boots", result) + .setShape(boots_recipe) + .addMaterial('I', material) + .build(); + } + + private static void registerShovel(String name, Item material, Item result) { + RecipeBuilder.make(name + "_shovel", result) + .setShape(shovel_recipe) + .addMaterial('I', material) + .addMaterial('#', Items.STICK) + .build(); + } + + private static void registerSword(String name, Item material, Item result) { + RecipeBuilder.make(name + "_sword", result) + .setShape(sword_recipe) + .addMaterial('I', material) + .addMaterial('#', Items.STICK) + .build(); + } + + private static void registerPickaxe(String name, Item material, Item result) { + RecipeBuilder.make(name + "_pickaxe", result) + .setShape(pickaxe_recipe) + .addMaterial('I', material) + .addMaterial('#', Items.STICK) + .build(); + } + + private static void registerAxe(String name, Item material, Item result) { + RecipeBuilder.make(name + "_axe", result) + .setShape(axe_recipe) + .addMaterial('I', material) + .addMaterial('#', Items.STICK) + .build(); + } + + private static void registerHoe(String name, Item material, Item result) { + RecipeBuilder.make(name + "_hoe", result) + .setShape(hoe_recipe) + .addMaterial('I', material) + .addMaterial('#', Items.STICK) + .build(); } protected static boolean itemExists(Item item) {