From 5e90ad5869241662e8eee4d66694bdbeeb9a1d35 Mon Sep 17 00:00:00 2001 From: Grooble Date: Sun, 27 Oct 2024 15:58:21 +0100 Subject: [PATCH] 1.21 fixes (#31) * Add SoundGenerator for 1.21 * 1.21: Fix RecipeDataGenerator --- .../generators/RecipeDataGenerator.java | 121 ++++++++---------- .../generators/SoundsDataGenerator.java | 29 +++++ 2 files changed, 82 insertions(+), 68 deletions(-) create mode 100644 1.21/src/main/java/dev/u9g/minecraftdatagenerator/generators/SoundsDataGenerator.java diff --git a/1.21/src/main/java/dev/u9g/minecraftdatagenerator/generators/RecipeDataGenerator.java b/1.21/src/main/java/dev/u9g/minecraftdatagenerator/generators/RecipeDataGenerator.java index ea489d1..e3a01dd 100644 --- a/1.21/src/main/java/dev/u9g/minecraftdatagenerator/generators/RecipeDataGenerator.java +++ b/1.21/src/main/java/dev/u9g/minecraftdatagenerator/generators/RecipeDataGenerator.java @@ -34,74 +34,7 @@ public class RecipeDataGenerator implements IDataGenerator { for (RecipeEntry recipeE : Objects.requireNonNull(DGU.getWorld()).getRecipeManager().values()) { Recipe recipe = recipeE.value(); if (recipe instanceof ShapedRecipe sr) { - var ingredients = sr.getIngredients(); - List ingr = new ArrayList<>(); - for (int i = 0; i < 9; i++) { - if (i >= ingredients.size()) { - ingr.add(-1); - continue; - } - var stacks = ingredients.get(i); - var matching = stacks.getMatchingStacks(); - if (matching.length == 0) { - ingr.add(-1); - } else { - ingr.add(getRawIdFor(matching[0].getItem())); - } - } - //Lists.reverse(ingr); - - JsonArray inShape = new JsonArray(); - - - var iter = ingr.iterator(); - for (int y = 0; y < sr.getHeight(); y++) { - var jsonRow = new JsonArray(); - for (int z = 0; z < sr.getWidth(); z++) { - jsonRow.add(iter.next()); - } - inShape.add(jsonRow); - } - - JsonObject finalRecipe = new JsonObject(); - finalRecipe.add("inShape", inShape); - - var resultObject = new JsonObject(); - resultObject.addProperty("id", getRawIdFor(sr.getResult(registryManager).getItem())); - resultObject.addProperty("count", sr.getResult(registryManager).getCount()); - finalRecipe.add("result", resultObject); - - String id = ((Integer) getRawIdFor(sr.getResult(registryManager).getItem())).toString(); - - if (!finalObj.has(id)) { - finalObj.add(id, new JsonArray()); - } - finalObj.get(id).getAsJsonArray().add(finalRecipe); -// var input = new JsonArray(); -// var ingredients = sr.getIngredients().stream().toList(); -// for (int y = 0; y < sr.getHeight(); y++) { -// var arr = new JsonArray(); -// for (int x = 0; x < sr.getWidth(); x++) { -// if ((y*3)+x >= ingredients.size()) { -// arr.add(JsonNull.INSTANCE); -// continue; -// } -// var ingredient = ingredients.get((y*3)+x).getMatchingStacks(); // FIXME: fix when there are more than one matching stack -// if (ingredient.length == 0) { -// arr.add(JsonNull.INSTANCE); -// } else { -// arr.add(getRawIdFor(ingredient[0].getItem())); -// } -// } -// input.add(arr); -// } -// var rootRecipeObject = new JsonObject(); -// rootRecipeObject.add("inShape", input); -// var resultObject = new JsonObject(); -// resultObject.addProperty("id", getRawIdFor(sr.getOutput().getItem())); -// resultObject.addProperty("count", sr.getOutput().getCount()); -// rootRecipeObject.add("result", resultObject); -// recipes.put(getRawIdFor(sr.getOutput().getItem()), rootRecipeObject); + generateShapedRecipe(registryManager, finalObj, sr, 0); } else if (recipe instanceof ShapelessRecipe sl) { var ingredients = new JsonArray(); for (Ingredient ingredient : sl.getIngredients()) { @@ -125,4 +58,56 @@ public class RecipeDataGenerator implements IDataGenerator { }); return finalObj; } + + private void generateShapedRecipe(DynamicRegistryManager registryManager, JsonObject finalObj, ShapedRecipe sr, int n) { + boolean hasIncremented = false; + var ingredients = sr.getIngredients(); + List ingr = new ArrayList<>(); + for (int i = 0; i < 9; i++) { + if (i >= ingredients.size()) { + ingr.add(-1); + continue; + } + var stacks = ingredients.get(i); + var matching = stacks.getMatchingStacks(); // FIXME: fix when there are more than one matching stack + if (matching.length == 0) { + ingr.add(-1); + } else if (matching.length > n){ + ingr.add(getRawIdFor(matching[n].getItem())); + } else { + ingr.add(getRawIdFor(matching[0].getItem())); + } + if (matching.length-1 > n && !hasIncremented) { + generateShapedRecipe(registryManager, finalObj, sr, n+1); + hasIncremented = true; + } + } + + JsonArray inShape = new JsonArray(); + + var iter = ingr.iterator(); + for (int y = 0; y < sr.getHeight(); y++) { + var jsonRow = new JsonArray(); + for (int z = 0; z < sr.getWidth(); z++) { + int value = iter.next(); + jsonRow.add(value == -1 ? null : value); + } + inShape.add(jsonRow); + } + + JsonObject finalRecipe = new JsonObject(); + finalRecipe.add("inShape", inShape); + + var resultObject = new JsonObject(); + resultObject.addProperty("id", getRawIdFor(sr.getResult(registryManager).getItem())); + resultObject.addProperty("count", sr.getResult(registryManager).getCount()); + finalRecipe.add("result", resultObject); + + String id = ((Integer) getRawIdFor(sr.getResult(registryManager).getItem())).toString(); + + if (!finalObj.has(id)) { + finalObj.add(id, new JsonArray()); + } + finalObj.get(id).getAsJsonArray().add(finalRecipe); + } } diff --git a/1.21/src/main/java/dev/u9g/minecraftdatagenerator/generators/SoundsDataGenerator.java b/1.21/src/main/java/dev/u9g/minecraftdatagenerator/generators/SoundsDataGenerator.java new file mode 100644 index 0000000..e390655 --- /dev/null +++ b/1.21/src/main/java/dev/u9g/minecraftdatagenerator/generators/SoundsDataGenerator.java @@ -0,0 +1,29 @@ +package dev.u9g.minecraftdatagenerator.generators; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import net.minecraft.registry.Registries; +import net.minecraft.sound.SoundEvent; + +public class SoundsDataGenerator implements IDataGenerator { + public static JsonObject generateSound(SoundEvent soundEvent) { + JsonObject soundDesc = new JsonObject(); + + soundDesc.addProperty("id", Registries.SOUND_EVENT.getRawId(soundEvent) + 1); // the plus 1 is required for 1.19.2+ due to Mojang using 0 in the packet to say that you should read a string id instead. + soundDesc.addProperty("name", soundEvent.getId().getPath()); + + return soundDesc; + } + + @Override + public String getDataName() { + return "sounds"; + } + + @Override + public JsonArray generateDataJson() { + JsonArray resultsArray = new JsonArray(); + Registries.SOUND_EVENT.forEach(sound -> resultsArray.add(generateSound(sound))); + return resultsArray; + } +}