1.21 fixes (#31)
* Add SoundGenerator for 1.21 * 1.21: Fix RecipeDataGenerator
This commit is contained in:
+53
-68
@@ -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<Integer> 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<Integer> 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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user