mirror of
https://github.com/AlmostReliable/almostunified.git
synced 2024-11-28 02:25:46 -05:00
Add MissingRecipesDumper
This commit is contained in:
parent
ddc29a2f01
commit
20472767e1
3 changed files with 104 additions and 2 deletions
|
@ -7,6 +7,7 @@ import com.almostreliable.unified.config.UnifyConfig;
|
||||||
import com.almostreliable.unified.recipe.RecipeDumper;
|
import com.almostreliable.unified.recipe.RecipeDumper;
|
||||||
import com.almostreliable.unified.recipe.RecipeTransformer;
|
import com.almostreliable.unified.recipe.RecipeTransformer;
|
||||||
import com.almostreliable.unified.recipe.unifier.RecipeHandlerFactory;
|
import com.almostreliable.unified.recipe.unifier.RecipeHandlerFactory;
|
||||||
|
import com.almostreliable.unified.utils.MissingRecipesDumper;
|
||||||
import com.almostreliable.unified.utils.ReplacementMap;
|
import com.almostreliable.unified.utils.ReplacementMap;
|
||||||
import com.almostreliable.unified.utils.TagMap;
|
import com.almostreliable.unified.utils.TagMap;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
|
@ -55,6 +56,7 @@ public final class AlmostUnifiedRuntimeImpl implements AlmostUnifiedRuntime {
|
||||||
dumper.dump(debugConfig.dumpOverview, debugConfig.dumpUnification, debugConfig.dumpDuplicates);
|
dumper.dump(debugConfig.dumpOverview, debugConfig.dumpUnification, debugConfig.dumpDuplicates);
|
||||||
|
|
||||||
debugConfig.logRecipes(recipes, "recipes_after_unification.txt");
|
debugConfig.logRecipes(recipes, "recipes_after_unification.txt");
|
||||||
|
MissingRecipesDumper.write(this, debugConfig.dumpPotentialMissingRecipes, recipes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -21,13 +21,15 @@ public class DebugConfig extends Config {
|
||||||
public final boolean dumpUnification;
|
public final boolean dumpUnification;
|
||||||
public final boolean dumpOverview;
|
public final boolean dumpOverview;
|
||||||
public final boolean dumpRecipes;
|
public final boolean dumpRecipes;
|
||||||
|
public final boolean dumpPotentialMissingRecipes;
|
||||||
|
|
||||||
public DebugConfig(boolean dumpTagMap, boolean dumpDuplicates, boolean dumpUnification, boolean dumpOverview, boolean dumpRecipes) {
|
public DebugConfig(boolean dumpTagMap, boolean dumpDuplicates, boolean dumpUnification, boolean dumpOverview, boolean dumpRecipes, boolean dumpPotentialMissingRecipes) {
|
||||||
this.dumpTagMap = dumpTagMap;
|
this.dumpTagMap = dumpTagMap;
|
||||||
this.dumpDuplicates = dumpDuplicates;
|
this.dumpDuplicates = dumpDuplicates;
|
||||||
this.dumpUnification = dumpUnification;
|
this.dumpUnification = dumpUnification;
|
||||||
this.dumpOverview = dumpOverview;
|
this.dumpOverview = dumpOverview;
|
||||||
this.dumpRecipes = dumpRecipes;
|
this.dumpRecipes = dumpRecipes;
|
||||||
|
this.dumpPotentialMissingRecipes = dumpPotentialMissingRecipes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void logUnifyTagDump(TagMap<Item> tagMap) {
|
public void logUnifyTagDump(TagMap<Item> tagMap) {
|
||||||
|
@ -71,6 +73,7 @@ public class DebugConfig extends Config {
|
||||||
public static final String DUMP_UNIFICATION = "dumpUnification";
|
public static final String DUMP_UNIFICATION = "dumpUnification";
|
||||||
public static final String DUMP_OVERVIEW = "dumpOverview";
|
public static final String DUMP_OVERVIEW = "dumpOverview";
|
||||||
public static final String DUMP_RECIPES = "dumpRecipes";
|
public static final String DUMP_RECIPES = "dumpRecipes";
|
||||||
|
public static final String DUMP_POTENTIAL_MISSING_RECIPES = "dumpPotentialMissingRecipes";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DebugConfig deserialize(JsonObject json) {
|
public DebugConfig deserialize(JsonObject json) {
|
||||||
|
@ -79,7 +82,8 @@ public class DebugConfig extends Config {
|
||||||
safeGet(() -> json.get(DUMP_DUPLICATES).getAsBoolean(), false),
|
safeGet(() -> json.get(DUMP_DUPLICATES).getAsBoolean(), false),
|
||||||
safeGet(() -> json.get(DUMP_UNIFICATION).getAsBoolean(), false),
|
safeGet(() -> json.get(DUMP_UNIFICATION).getAsBoolean(), false),
|
||||||
safeGet(() -> json.get(DUMP_OVERVIEW).getAsBoolean(), false),
|
safeGet(() -> json.get(DUMP_OVERVIEW).getAsBoolean(), false),
|
||||||
safeGet(() -> json.get(DUMP_RECIPES).getAsBoolean(), false)
|
safeGet(() -> json.get(DUMP_RECIPES).getAsBoolean(), false),
|
||||||
|
safeGet(() -> json.get(DUMP_POTENTIAL_MISSING_RECIPES).getAsBoolean(), false)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +95,7 @@ public class DebugConfig extends Config {
|
||||||
json.addProperty(DUMP_UNIFICATION, src.dumpUnification);
|
json.addProperty(DUMP_UNIFICATION, src.dumpUnification);
|
||||||
json.addProperty(DUMP_OVERVIEW, src.dumpOverview);
|
json.addProperty(DUMP_OVERVIEW, src.dumpOverview);
|
||||||
json.addProperty(DUMP_RECIPES, src.dumpRecipes);
|
json.addProperty(DUMP_RECIPES, src.dumpRecipes);
|
||||||
|
json.addProperty(DUMP_POTENTIAL_MISSING_RECIPES, src.dumpPotentialMissingRecipes);
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
package com.almostreliable.unified.utils;
|
||||||
|
|
||||||
|
import com.almostreliable.unified.AlmostUnifiedPlatform;
|
||||||
|
import com.almostreliable.unified.AlmostUnifiedRuntime;
|
||||||
|
import com.google.common.collect.HashMultimap;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class MissingRecipesDumper {
|
||||||
|
|
||||||
|
public static void write(AlmostUnifiedRuntime runtime, boolean dumpPotentialMissingRecipes, Map<ResourceLocation, JsonElement> recipes) {
|
||||||
|
if (!dumpPotentialMissingRecipes) return;
|
||||||
|
|
||||||
|
var itemsPerTag = getHidingIds(runtime);
|
||||||
|
FileUtils.write(AlmostUnifiedPlatform.INSTANCE.getLogPath(), "recipe_hiding_check.txt", sb -> {
|
||||||
|
recipes.forEach(((recipe, json) -> {
|
||||||
|
if (json instanceof JsonObject obj) {
|
||||||
|
write(recipe, obj, itemsPerTag, sb);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void write(ResourceLocation recipe, JsonObject json, Multimap<UnifyTag<Item>, ResourceLocation> itemsPerTag, StringBuilder sb) {
|
||||||
|
String jsonStr = json.toString();
|
||||||
|
Multimap<UnifyTag<Item>, ResourceLocation> found = HashMultimap.create();
|
||||||
|
itemsPerTag.asMap().forEach((tag, items) -> {
|
||||||
|
for (ResourceLocation item : items) {
|
||||||
|
if (jsonStr.contains(item.toString())) {
|
||||||
|
found.put(tag, item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (found.isEmpty()) return;
|
||||||
|
|
||||||
|
String type = Optional.ofNullable(json.get("type")).map(JsonElement::getAsString).orElse("");
|
||||||
|
sb
|
||||||
|
.append("Recipe ")
|
||||||
|
.append(recipe)
|
||||||
|
.append(" (")
|
||||||
|
.append(type)
|
||||||
|
.append(") contains potentially hiding items:")
|
||||||
|
.append("\n")
|
||||||
|
.append("Json: ")
|
||||||
|
.append(jsonStr)
|
||||||
|
.append("\n")
|
||||||
|
.append("Items: ")
|
||||||
|
.append("\n");
|
||||||
|
found.asMap().forEach((tag, items) -> {
|
||||||
|
for (ResourceLocation item : items) {
|
||||||
|
sb.append("\t").append(item).append(" (#").append(tag.location()).append(")").append("\n");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
sb.append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static Multimap<UnifyTag<Item>, ResourceLocation> getHidingIds(AlmostUnifiedRuntime runtime) {
|
||||||
|
ReplacementMap repMap = runtime.getReplacementMap().orElse(null);
|
||||||
|
var tagMap = runtime.getFilteredTagMap().orElse(null);
|
||||||
|
|
||||||
|
Multimap<UnifyTag<Item>, ResourceLocation> hidings = HashMultimap.create();
|
||||||
|
if (repMap == null || tagMap == null) return hidings;
|
||||||
|
|
||||||
|
for (var unifyTag : tagMap.getTags()) {
|
||||||
|
var itemsByTag = tagMap.getEntriesByTag(unifyTag);
|
||||||
|
|
||||||
|
if (Utils.allSameNamespace(itemsByTag)) continue;
|
||||||
|
|
||||||
|
ResourceLocation kingItem = repMap.getPreferredItemForTag(unifyTag, $ -> true);
|
||||||
|
if (kingItem == null) continue;
|
||||||
|
|
||||||
|
Set<ResourceLocation> r = new HashSet<>();
|
||||||
|
for (ResourceLocation item : itemsByTag) {
|
||||||
|
if (!item.equals(kingItem)) {
|
||||||
|
r.add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hidings.putAll(unifyTag, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hidings;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue