mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-04 06:44:40 +01:00
Bad assumptions
- Fix tag errors caused by assuming all mods have tags for their logs
This commit is contained in:
parent
d19a1b597d
commit
5b05644243
2 changed files with 31 additions and 8 deletions
|
@ -1,23 +1,30 @@
|
|||
package com.simibubi.create.foundation.recipe;
|
||||
package com.simibubi.create.foundation.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.mojang.serialization.JsonOps;
|
||||
import com.simibubi.create.Create;
|
||||
import com.simibubi.create.content.kinetics.saw.CuttingRecipe;
|
||||
import com.simibubi.create.content.processing.recipe.ProcessingRecipe;
|
||||
import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder;
|
||||
import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder.DataGenResult;
|
||||
import com.simibubi.create.foundation.pack.DynamicPack;
|
||||
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.TagEntry;
|
||||
import net.minecraft.tags.TagFile;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.item.Item;
|
||||
|
||||
|
@ -25,6 +32,7 @@ import net.minecraft.world.item.Item;
|
|||
public class RuntimeDataGenerator {
|
||||
private static final Pattern STRIPPED_WOODS_REGEX = Pattern.compile("stripped_(\\w*)_(log|wood|stem|hyphae)");
|
||||
private static final Pattern NON_STRIPPED_WOODS_REGEX = Pattern.compile("(?!stripped_)([a-z]+)_(log|wood|stem|hyphae)");
|
||||
private static final Multimap<ResourceLocation, TagEntry> TAGS = HashMultimap.create();
|
||||
private static final Object2ObjectOpenHashMap<ResourceLocation, JsonObject> JSON_FILES = new Object2ObjectOpenHashMap<>();
|
||||
|
||||
public static void insertIntoPack(DynamicPack dynamicPack) {
|
||||
|
@ -32,17 +40,22 @@ public class RuntimeDataGenerator {
|
|||
cuttingRecipes(itemId);
|
||||
|
||||
Create.LOGGER.info("Created {} recipes which will be injected into the game", JSON_FILES.size());
|
||||
|
||||
JSON_FILES.forEach(dynamicPack::put);
|
||||
|
||||
Create.LOGGER.info("Created {} tags which will be injected into the game", TAGS.size());
|
||||
for (Map.Entry<ResourceLocation, Collection<TagEntry>> tags : TAGS.asMap().entrySet()) {
|
||||
TagFile tagFile = new TagFile(new ArrayList<>(tags.getValue()), false);
|
||||
dynamicPack.put(tags.getKey().withPrefix("tags/items/"), TagFile.CODEC.encodeStart(JsonOps.INSTANCE, tagFile).result().orElseThrow());
|
||||
}
|
||||
|
||||
JSON_FILES.clear();
|
||||
JSON_FILES.trim();
|
||||
TAGS.clear();
|
||||
}
|
||||
|
||||
// logs/woods -> stripped variants
|
||||
// logs/woods both stripped and non stripped -> planks
|
||||
// planks -> stairs, slabs, fences, fence gates, doors, trapdoors, pressure plates, buttons and signs
|
||||
// also adds stripped logs and woods into the create tag for those
|
||||
private static void cuttingRecipes(ResourceLocation itemId) {
|
||||
String path = itemId.getPath();
|
||||
|
||||
|
@ -59,7 +72,8 @@ public class RuntimeDataGenerator {
|
|||
|
||||
if (hasFoundMatch) {
|
||||
String type = match.group(2);
|
||||
ResourceLocation base = itemId.withPath(match.group(1) + "_");
|
||||
ResourceLocation matched = itemId.withPath(match.group(1));
|
||||
ResourceLocation base = matched.withSuffix("_");
|
||||
ResourceLocation nonStrippedId = base.withSuffix(type);
|
||||
ResourceLocation planksId = base.withSuffix("planks");
|
||||
ResourceLocation stairsId = base.withSuffix("stairs");
|
||||
|
@ -75,8 +89,12 @@ public class RuntimeDataGenerator {
|
|||
if (!noStrippedVariant) {
|
||||
simpleWoodRecipe(nonStrippedId, itemId);
|
||||
simpleWoodRecipe(itemId, planksId, 6);
|
||||
} else {
|
||||
simpleWoodRecipe(TagKey.create(Registries.ITEM, nonStrippedId.withSuffix("s")), planksId, 6);
|
||||
} else if (BuiltInRegistries.ITEM.containsKey(planksId)) {
|
||||
ResourceLocation tag = Create.asResource("runtime_generated/compat/" + matched.getPath());
|
||||
insertIntoTag(tag, itemId);
|
||||
insertIntoTag(tag, nonStrippedId);
|
||||
|
||||
simpleWoodRecipe(TagKey.create(Registries.ITEM, tag), planksId, 6);
|
||||
}
|
||||
|
||||
if (!path.contains("_wood") && !path.contains("_hyphae") && BuiltInRegistries.ITEM.containsKey(planksId)) {
|
||||
|
@ -93,6 +111,11 @@ public class RuntimeDataGenerator {
|
|||
}
|
||||
}
|
||||
|
||||
private static void insertIntoTag(ResourceLocation tag, ResourceLocation itemId) {
|
||||
if (BuiltInRegistries.ITEM.containsKey(itemId))
|
||||
TAGS.put(tag, TagEntry.optionalElement(itemId));
|
||||
}
|
||||
|
||||
private static void simpleWoodRecipe(ResourceLocation inputId, ResourceLocation outputId) {
|
||||
simpleWoodRecipe(inputId, outputId, 1);
|
||||
}
|
|
@ -16,10 +16,10 @@ import com.simibubi.create.content.kinetics.chainConveyor.ServerChainConveyorHan
|
|||
import com.simibubi.create.content.kinetics.drill.CobbleGenOptimisation;
|
||||
import com.simibubi.create.content.redstone.link.controller.LinkedControllerServerHandler;
|
||||
import com.simibubi.create.content.trains.entity.CarriageEntityHandler;
|
||||
import com.simibubi.create.foundation.data.RuntimeDataGenerator;
|
||||
import com.simibubi.create.foundation.pack.DynamicPack;
|
||||
import com.simibubi.create.foundation.pack.DynamicPackSource;
|
||||
import com.simibubi.create.foundation.recipe.RecipeFinder;
|
||||
import com.simibubi.create.foundation.recipe.RuntimeDataGenerator;
|
||||
import com.simibubi.create.foundation.utility.ServerSpeedProvider;
|
||||
import com.simibubi.create.foundation.utility.TickBasedCache;
|
||||
import com.simibubi.create.infrastructure.command.AllCommands;
|
||||
|
|
Loading…
Add table
Reference in a new issue