diff --git a/src/main/java/ru/betterend/blocks/EndPortalBlock.java b/src/main/java/ru/betterend/blocks/EndPortalBlock.java index 950014f3..806e8165 100644 --- a/src/main/java/ru/betterend/blocks/EndPortalBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPortalBlock.java @@ -114,7 +114,7 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTypeable float rotation = entity.applyRotation(BlockRotation.CLOCKWISE_90); entity.yaw = rotation; } else { - offStep = entity.getMovementDirection() == Direction.NORTH ? 1 : -1; + offStep = entity.getMovementDirection() == Direction.NORTH ? -1 : 1; } return checkPos.add(0, 0, offStep); } else { diff --git a/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java b/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java index 4441c93f..0e3dfc5f 100644 --- a/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java @@ -5,6 +5,7 @@ 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; @@ -18,11 +19,12 @@ 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.recipe.EndRecipeManager; import ru.betterend.registry.EndBlocks; +import ru.betterend.util.ItemUtil; import ru.betterend.util.RecipeHelper; public class AlloyingRecipe implements Recipe { @@ -236,12 +238,12 @@ public class AlloyingRecipe implements Recipe { 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"); + JsonObject result = JsonHelper.getObject(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!"); - })); + ItemStack output = ItemUtil.fromJsonRecipe(result); + if (output == null) { + throw new IllegalStateException("Output item does not exists!"); + } float experience = JsonHelper.getFloat(json, "experience", 0.0F); int smeltTime = JsonHelper.getInt(json, "smelttime", 350); diff --git a/src/main/java/ru/betterend/recipe/builders/AnvilSmithingRecipe.java b/src/main/java/ru/betterend/recipe/builders/AnvilSmithingRecipe.java index 6620d5bd..82a5e273 100644 --- a/src/main/java/ru/betterend/recipe/builders/AnvilSmithingRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/AnvilSmithingRecipe.java @@ -19,11 +19,12 @@ 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.recipe.EndRecipeManager; import ru.betterend.registry.EndTags; +import ru.betterend.util.ItemUtil; import ru.betterend.util.RecipeHelper; public class AnvilSmithingRecipe implements Recipe { @@ -208,12 +209,12 @@ public class AnvilSmithingRecipe implements Recipe { public static class Serializer implements RecipeSerializer { @Override public AnvilSmithingRecipe read(Identifier id, JsonObject json) { - Ingredient input = Ingredient.fromJson(JsonHelper.getObject(json, "input")); - String resultStr = JsonHelper.getString(json, "result"); - Identifier resultId = new Identifier(resultStr); - ItemStack output = new ItemStack(Registry.ITEM.getOrEmpty(resultId).orElseThrow(() -> { - return new IllegalStateException("Item: " + resultStr + " does not exists!"); - })); + Ingredient input = Ingredient.fromJson(json.get("input")); + JsonObject result = JsonHelper.getObject(json, "result"); + ItemStack output = ItemUtil.fromJsonRecipe(result); + if (output == null) { + throw new IllegalStateException("Output item does not exists!"); + } int level = JsonHelper.getInt(json, "level", 1); int damage = JsonHelper.getInt(json, "damage", 1); diff --git a/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java b/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java index 324e6072..a1cdb87d 100644 --- a/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java @@ -2,7 +2,6 @@ package ru.betterend.recipe.builders; import java.util.Arrays; -import com.google.gson.JsonArray; import com.google.gson.JsonObject; import net.minecraft.item.ItemConvertible; @@ -15,11 +14,12 @@ import net.minecraft.recipe.RecipeType; 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.recipe.EndRecipeManager; import ru.betterend.rituals.InfusionRitual; +import ru.betterend.util.ItemUtil; public class InfusionRecipe implements Recipe { @@ -178,17 +178,31 @@ public class InfusionRecipe implements Recipe { public InfusionRecipe read(Identifier id, JsonObject json) { InfusionRecipe recipe = new InfusionRecipe(id); recipe.input = Ingredient.fromJson(json.get("input")); - Identifier outId = new Identifier(JsonHelper.getString(json, "output")); - recipe.output = new ItemStack(Registry.ITEM.getOrEmpty(outId).orElseThrow(() -> { - return new IllegalStateException("Item: " + outId + " does not exists!"); - })); - recipe.time = JsonHelper.getInt(json, "time", 1); - JsonArray catalysts = JsonHelper.asArray(json, "catalysts"); - for (int i = 0; i < catalysts.size(); i++) { - ItemStack stack = new ItemStack(Registry.ITEM.getOrEmpty(outId).orElse(null)); - recipe.catalysts[i] = Ingredient.ofStacks( - Arrays.stream(new ItemStack[] { stack })); + JsonObject result = JsonHelper.getObject(json, "result"); + recipe.output = ItemUtil.fromJsonRecipe(result); + if (recipe.output == null) { + throw new IllegalStateException("Output item does not exists!"); } + recipe.time = JsonHelper.getInt(json, "time", 1); + + JsonObject catalysts = JsonHelper.asObject(json, "catalysts"); + ItemStack catalyst = ItemUtil.fromStackString(JsonHelper.getString(catalysts, "north", "")); + recipe.catalysts[0] = Ingredient.ofStacks(Arrays.stream(new ItemStack[] { catalyst })); + catalyst = ItemUtil.fromStackString(JsonHelper.getString(catalysts, "north_east", "")); + recipe.catalysts[1] = Ingredient.ofStacks(Arrays.stream(new ItemStack[] { catalyst })); + catalyst = ItemUtil.fromStackString(JsonHelper.getString(catalysts, "east", "")); + recipe.catalysts[2] = Ingredient.ofStacks(Arrays.stream(new ItemStack[] { catalyst })); + catalyst = ItemUtil.fromStackString(JsonHelper.getString(catalysts, "south_east", "")); + recipe.catalysts[3] = Ingredient.ofStacks(Arrays.stream(new ItemStack[] { catalyst })); + catalyst = ItemUtil.fromStackString(JsonHelper.getString(catalysts, "south", "")); + recipe.catalysts[4] = Ingredient.ofStacks(Arrays.stream(new ItemStack[] { catalyst })); + catalyst = ItemUtil.fromStackString(JsonHelper.getString(catalysts, "south_west", "")); + recipe.catalysts[5] = Ingredient.ofStacks(Arrays.stream(new ItemStack[] { catalyst })); + catalyst = ItemUtil.fromStackString(JsonHelper.getString(catalysts, "west", "")); + recipe.catalysts[6] = Ingredient.ofStacks(Arrays.stream(new ItemStack[] { catalyst })); + catalyst = ItemUtil.fromStackString(JsonHelper.getString(catalysts, "north_west", "")); + recipe.catalysts[7] = Ingredient.ofStacks(Arrays.stream(new ItemStack[] { catalyst })); + return recipe; } diff --git a/src/main/java/ru/betterend/util/ItemUtil.java b/src/main/java/ru/betterend/util/ItemUtil.java new file mode 100644 index 00000000..984967db --- /dev/null +++ b/src/main/java/ru/betterend/util/ItemUtil.java @@ -0,0 +1,56 @@ +package ru.betterend.util; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.gson.JsonObject; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; +import net.minecraft.util.JsonHelper; +import net.minecraft.util.registry.Registry; +import ru.betterend.BetterEnd; + +public class ItemUtil { + + public static String toStackString(@NotNull ItemStack stack) { + try { + if (stack == null) { + throw new IllegalStateException("Stack can't be null!"); + } + Item item = stack.getItem(); + return Registry.ITEM.getId(item) + ":" + stack.getCount(); + } catch (Exception ex) { + BetterEnd.LOGGER.catching(ex); + } + return ""; + } + + @Nullable + public static ItemStack fromStackString(String stackString) { + String[] parts = stackString.split(":"); + Identifier itemId = new Identifier(parts[0], parts[1]); + Item item = Registry.ITEM.getOrEmpty(itemId).orElse(null); + if (item == null) return null; + if (parts.length > 2) { + return new ItemStack(item, Integer.valueOf(parts[2])); + } + return new ItemStack(item); + } + + @Nullable + public static ItemStack fromJsonRecipe(JsonObject recipe) { + if (!recipe.has("item")) return null; + try { + Identifier itemId = new Identifier(JsonHelper.getString(recipe, "item")); + Item item = Registry.ITEM.getOrEmpty(itemId).orElse(null); + if (item == null) return null; + int count = JsonHelper.getInt(recipe, "count", 1); + return new ItemStack(item, count); + } catch (Exception ex) { + BetterEnd.LOGGER.catching(ex); + } + return null; + } +}