mirror of
https://github.com/AlmostReliable/almostunified.git
synced 2024-11-28 02:25:46 -05:00
add TerraFirmaCraft compat (#69)
Co-authored-by: rlnt <relentless@rlnt.dev>
This commit is contained in:
parent
3ddac08979
commit
7ff762b998
6 changed files with 121 additions and 6 deletions
|
@ -20,6 +20,11 @@ public final class ModConstants {
|
||||||
public static final String INTEGRATED_DYNAMICS = "integrateddynamics";
|
public static final String INTEGRATED_DYNAMICS = "integrateddynamics";
|
||||||
public static final String MEKANISM = "mekanism";
|
public static final String MEKANISM = "mekanism";
|
||||||
public static final String MODERN_INDUSTRIALIZATION = "modern_industrialization";
|
public static final String MODERN_INDUSTRIALIZATION = "modern_industrialization";
|
||||||
|
public static final String WOODENCOG = "woodencog";
|
||||||
|
public static final String TERRAFIRMACRAFT = "tfc";
|
||||||
|
public static final String ADVANCED_TFC_TECH = "advancedtfctech";
|
||||||
|
public static final String FIRMALIFE = "firmalife";
|
||||||
|
public static final String TFC_WATER_FLASKS = "waterflasks";
|
||||||
|
|
||||||
private ModConstants() {}
|
private ModConstants() {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,5 +51,20 @@ public final class RecipeConstants {
|
||||||
// cyclic
|
// cyclic
|
||||||
public static final String BONUS = "bonus";
|
public static final String BONUS = "bonus";
|
||||||
|
|
||||||
|
// terrafirmacraft
|
||||||
|
public static final String STACK = "stack";
|
||||||
|
public static final String EXTRA_PRODUCTS = "extra_products";
|
||||||
|
public static final String FIRST_INPUT = "first_input";
|
||||||
|
public static final String SECOND_INPUT = "second_input";
|
||||||
|
public static final String INPUT_ITEM = "input_item";
|
||||||
|
public static final String OUTPUT_ITEM = "input_item";
|
||||||
|
public static final String EXTRA_DROP = "extra_drop";
|
||||||
|
public static final String BATCH = "batch";
|
||||||
|
public static final String RESULT_ITEM = "result_item";
|
||||||
|
public static final String MOLD = "mold";
|
||||||
|
public static final String PRIMARY_INGREDIENT = "primary_ingredient";
|
||||||
|
public static final String SECONDARY_INPUT = "secondary_input";
|
||||||
|
public static final String BASE_INGREDIENT = "base_ingredient";
|
||||||
|
|
||||||
private RecipeConstants() {}
|
private RecipeConstants() {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,9 @@ public interface RecipeContext {
|
||||||
@Nullable
|
@Nullable
|
||||||
JsonElement createIngredientReplacement(@Nullable JsonElement element);
|
JsonElement createIngredientReplacement(@Nullable JsonElement element);
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
JsonElement createIngredientReplacement(@Nullable JsonElement element, String... lookupKeys);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
JsonElement createResultReplacement(@Nullable JsonElement element);
|
JsonElement createResultReplacement(@Nullable JsonElement element);
|
||||||
|
|
||||||
|
|
|
@ -60,26 +60,37 @@ public class RecipeContextImpl implements RecipeContext {
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public JsonElement createIngredientReplacement(@Nullable JsonElement element) {
|
public JsonElement createIngredientReplacement(@Nullable JsonElement element) {
|
||||||
|
return createIngredientReplacement(
|
||||||
|
element,
|
||||||
|
RecipeConstants.VALUE,
|
||||||
|
RecipeConstants.BASE,
|
||||||
|
RecipeConstants.INGREDIENT
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public JsonElement createIngredientReplacement(@Nullable JsonElement element, String... lookupKeys) {
|
||||||
if (element == null) {
|
if (element == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonElement copy = element.deepCopy();
|
JsonElement copy = element.deepCopy();
|
||||||
tryCreateIngredientReplacement(copy);
|
tryCreateIngredientReplacement(copy, lookupKeys);
|
||||||
return element.equals(copy) ? null : copy;
|
return element.equals(copy) ? null : copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tryCreateIngredientReplacement(@Nullable JsonElement element) {
|
private void tryCreateIngredientReplacement(@Nullable JsonElement element, String... lookupKeys) {
|
||||||
if (element instanceof JsonArray array) {
|
if (element instanceof JsonArray array) {
|
||||||
for (JsonElement e : array) {
|
for (JsonElement e : array) {
|
||||||
tryCreateIngredientReplacement(e);
|
tryCreateIngredientReplacement(e, lookupKeys);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (element instanceof JsonObject object) {
|
if (element instanceof JsonObject object) {
|
||||||
tryCreateIngredientReplacement(object.get(RecipeConstants.VALUE));
|
for (String key : lookupKeys) {
|
||||||
tryCreateIngredientReplacement(object.get(RecipeConstants.BASE));
|
tryCreateIngredientReplacement(object.get(key), lookupKeys);
|
||||||
tryCreateIngredientReplacement(object.get(RecipeConstants.INGREDIENT));
|
}
|
||||||
|
|
||||||
if (object.get(RecipeConstants.TAG) instanceof JsonPrimitive primitive) {
|
if (object.get(RecipeConstants.TAG) instanceof JsonPrimitive primitive) {
|
||||||
UnifyTag<Item> tag = Utils.toItemTag(primitive.getAsString());
|
UnifyTag<Item> tag = Utils.toItemTag(primitive.getAsString());
|
||||||
|
|
|
@ -65,6 +65,13 @@ public class AlmostUnifiedPlatformForge implements AlmostUnifiedPlatform {
|
||||||
factory.registerForMod(ModConstants.IMMERSIVE_ENGINEERING, new ImmersiveEngineeringRecipeUnifier());
|
factory.registerForMod(ModConstants.IMMERSIVE_ENGINEERING, new ImmersiveEngineeringRecipeUnifier());
|
||||||
factory.registerForMod(ModConstants.INTEGRATED_DYNAMICS, new IntegratedDynamicsRecipeUnifier());
|
factory.registerForMod(ModConstants.INTEGRATED_DYNAMICS, new IntegratedDynamicsRecipeUnifier());
|
||||||
factory.registerForMod(ModConstants.MEKANISM, new MekanismRecipeUnifier());
|
factory.registerForMod(ModConstants.MEKANISM, new MekanismRecipeUnifier());
|
||||||
|
List.of(
|
||||||
|
ModConstants.TERRAFIRMACRAFT,
|
||||||
|
ModConstants.ADVANCED_TFC_TECH,
|
||||||
|
ModConstants.FIRMALIFE,
|
||||||
|
ModConstants.TFC_WATER_FLASKS,
|
||||||
|
ModConstants.WOODENCOG
|
||||||
|
).forEach(modId -> factory.registerForMod(modId, new TerraFirmaCraftRecipeUnifier()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
package com.almostreliable.unified.compat;
|
||||||
|
|
||||||
|
import com.almostreliable.unified.api.recipe.RecipeConstants;
|
||||||
|
import com.almostreliable.unified.api.recipe.RecipeContext;
|
||||||
|
import com.almostreliable.unified.api.recipe.RecipeUnifier;
|
||||||
|
import com.almostreliable.unified.api.recipe.RecipeUnifierBuilder;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TerraFirmaCraftRecipeUnifier implements RecipeUnifier {
|
||||||
|
|
||||||
|
public static final String ITEM_OUTPUT = "item_output";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void collectUnifier(RecipeUnifierBuilder builder) {
|
||||||
|
List.of(
|
||||||
|
// barrel_sealed, vat
|
||||||
|
RecipeConstants.INPUT_ITEM,
|
||||||
|
// blast_furnace, bloomery
|
||||||
|
RecipeConstants.CATALYST,
|
||||||
|
// casting
|
||||||
|
RecipeConstants.MOLD,
|
||||||
|
// advanced shapeless crafting
|
||||||
|
RecipeConstants.PRIMARY_INGREDIENT,
|
||||||
|
// glassworking
|
||||||
|
RecipeConstants.BATCH,
|
||||||
|
// power_loom
|
||||||
|
RecipeConstants.INPUTS,
|
||||||
|
RecipeConstants.SECONDARY_INPUT,
|
||||||
|
// welding
|
||||||
|
RecipeConstants.FIRST_INPUT,
|
||||||
|
RecipeConstants.SECOND_INPUT
|
||||||
|
).forEach(key -> builder.put(key, (json, ctx) -> ctx.createIngredientReplacement(
|
||||||
|
json,
|
||||||
|
RecipeConstants.VALUE,
|
||||||
|
RecipeConstants.BASE,
|
||||||
|
RecipeConstants.INGREDIENT,
|
||||||
|
RecipeConstants.BASE_INGREDIENT
|
||||||
|
)));
|
||||||
|
|
||||||
|
List.of(
|
||||||
|
// beamhouse, advanced shapeless crafting, fleshing_machine, grist_mill, thresher
|
||||||
|
RecipeConstants.RESULT,
|
||||||
|
// filling
|
||||||
|
RecipeConstants.RESULTS,
|
||||||
|
// barrel_sealed, mixing_bowl, vat
|
||||||
|
RecipeConstants.OUTPUT_ITEM,
|
||||||
|
// chisel, scraping
|
||||||
|
RecipeConstants.EXTRA_DROP,
|
||||||
|
// heating, oven
|
||||||
|
RecipeConstants.RESULT_ITEM,
|
||||||
|
// pot
|
||||||
|
ITEM_OUTPUT,
|
||||||
|
// power_loom, thresher
|
||||||
|
RecipeConstants.SECONDARIES,
|
||||||
|
// extra products shapeless crafting
|
||||||
|
RecipeConstants.EXTRA_PRODUCTS
|
||||||
|
).forEach(key -> builder.put(key, this::createResultReplacement));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private JsonElement createResultReplacement(JsonElement json, RecipeContext ctx) {
|
||||||
|
return ctx.createResultReplacement(
|
||||||
|
json,
|
||||||
|
false,
|
||||||
|
RecipeConstants.ITEM,
|
||||||
|
RecipeConstants.STACK,
|
||||||
|
RecipeConstants.OUTPUT,
|
||||||
|
RecipeConstants.BASE_INGREDIENT
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue