Skip to content

Commit

Permalink
Merge tool casting recipe and tool casting part swapping recipe
Browse files Browse the repository at this point in the history
We have all the info we need, easier to not make more recipes
  • Loading branch information
KnightMiner committed May 3, 2024
1 parent 8a8dd5f commit 737dafd
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 109 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ public class MaterialCastingRecipeBuilder extends AbstractRecipeBuilder<Material
private final IMaterialItem result;
private final IModifiable resultTool;
private final TypeAwareRecipeSerializer<? extends AbstractMaterialCastingRecipe> recipeSerializer;
private final TypeAwareRecipeSerializer<? extends ToolPartSwappingRecipe> swapSerializer;
private Ingredient cast = Ingredient.EMPTY;
@Setter @Accessors(chain = true)
private int itemCost = 0;
Expand All @@ -37,7 +36,7 @@ public class MaterialCastingRecipeBuilder extends AbstractRecipeBuilder<Material
* @return Builder instance
*/
public static MaterialCastingRecipeBuilder basinRecipe(IMaterialItem result) {
return castingRecipe(result, null, TinkerSmeltery.basinMaterialSerializer.get(), null);
return castingRecipe(result, null, TinkerSmeltery.basinMaterialSerializer.get());
}

/**
Expand All @@ -46,7 +45,7 @@ public static MaterialCastingRecipeBuilder basinRecipe(IMaterialItem result) {
* @return Builder instance
*/
public static MaterialCastingRecipeBuilder tableRecipe(IMaterialItem result) {
return castingRecipe(result, null, TinkerSmeltery.tableMaterialSerializer.get(), null);
return castingRecipe(result, null, TinkerSmeltery.tableMaterialSerializer.get());
}

/**
Expand All @@ -55,7 +54,7 @@ public static MaterialCastingRecipeBuilder tableRecipe(IMaterialItem result) {
* @return Builder instance
*/
public static MaterialCastingRecipeBuilder basinRecipe(IModifiable result) {
return castingRecipe(null, result, TinkerSmeltery.basinToolSerializer.get(), TinkerSmeltery.basinPartSwappingSerializer.get());
return castingRecipe(null, result, TinkerSmeltery.basinToolSerializer.get());
}

/**
Expand All @@ -64,7 +63,7 @@ public static MaterialCastingRecipeBuilder basinRecipe(IModifiable result) {
* @return Builder instance
*/
public static MaterialCastingRecipeBuilder tableRecipe(IModifiable result) {
return castingRecipe(null, result, TinkerSmeltery.tableToolSerializer.get(), TinkerSmeltery.tablePartSwappingSerializer.get());
return castingRecipe(null, result, TinkerSmeltery.tableToolSerializer.get());
}

/**
Expand Down Expand Up @@ -113,19 +112,6 @@ public void save(Consumer<FinishedRecipe> consumer) {
this.save(consumer, Registry.ITEM.getKey(this.result.asItem()));
}

/** Generates a part swapping recipe for this tool */
public MaterialCastingRecipeBuilder partSwapping(Consumer<FinishedRecipe> consumer, int materialIndex, ResourceLocation id) {
if (swapSerializer == null) {
throw new IllegalStateException("Cannot perform swapping without a swapping serializer, did you call the wrong static constructor?");
}
if (this.itemCost <= 0) {
throw new IllegalStateException("Material casting recipes require a positive amount of fluid");
}
ResourceLocation advancementId = this.buildOptionalAdvancement(id, "casting");
consumer.accept(new LoadableFinishedRecipe<>(new ToolPartSwappingRecipe(swapSerializer, id, group, Ingredient.of(resultTool), itemCost, materialIndex), ToolPartSwappingRecipe.LOADER, advancementId));
return this;
}

@Override
public void save(Consumer<FinishedRecipe> consumer, ResourceLocation id) {
if (this.itemCost <= 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import slimeknights.tconstruct.library.tools.helper.ToolBuildHandler;
import slimeknights.tconstruct.library.tools.item.IModifiable;
import slimeknights.tconstruct.library.tools.nbt.MaterialNBT;
import slimeknights.tconstruct.library.tools.nbt.ToolStack;
import slimeknights.tconstruct.library.tools.part.IMaterialItem;

import java.util.Arrays;
Expand All @@ -47,19 +48,20 @@ public ToolCastingRecipe(TypeAwareRecipeSerializer<?> serializer, ResourceLocati
@Override
public boolean matches(ICastingContainer inv, Level level) {
ItemStack cast = inv.getStack();
if (!this.getCast().test(cast)) {
// tool match is used for part swapping
boolean partSwapping = cast.getItem() == result.asItem();
if (!partSwapping && !this.getCast().test(cast)) {
return false;
}
// if we have a material item input, must have exactly 2 materials, else exactly 1
List<MaterialStatsId> requirements = ToolMaterialHook.stats(result.getToolDefinition());
if (cast.getItem() instanceof IMaterialItem) {
if (requirements.size() != 2) {
return false;
}
} else if (requirements.size() != 1) {
// must have 1 or 2 tool parts
int numRequirements = requirements.size();
if (numRequirements < 1 || numRequirements > 2) {
return false;
}
MaterialStatsId requirement = requirements.get(requirements.size() - 1);
// last material is the part, may be 1 or 2
MaterialStatsId requirement = requirements.get(numRequirements - 1);
return getCachedMaterialFluid(inv).filter(recipe -> requirement.canUseMaterial(recipe.getOutput().getId())).isPresent();

}
Expand All @@ -73,13 +75,22 @@ public ItemStack getResultItem() {
public ItemStack assemble(ICastingContainer inv) {
MaterialVariant material = getCachedMaterialFluid(inv).map(MaterialFluidRecipe::getOutput).orElse(MaterialVariant.UNKNOWN);
ItemStack cast = inv.getStack();
MaterialNBT materials;
if (cast.getItem() instanceof IMaterialItem materialItem) {
materials = new MaterialNBT(List.of(MaterialVariant.of(materialItem.getMaterial(cast)), material));
int requirements = ToolMaterialHook.stats(result.getToolDefinition()).size();
// if the cast is the result, we are part swapping, replace the last material
if (cast.getItem() == result) {
ToolStack tool = ToolStack.from(cast);
tool.replaceMaterial(requirements - 1, material.getVariant());
return tool.createStack();
} else {
materials = new MaterialNBT(List.of(material));
MaterialNBT materials;
// if we have 2 materials, we assume the cast has a material. 1 means the cast is a random item
if (requirements == 2) {
materials = new MaterialNBT(List.of(MaterialVariant.of(IMaterialItem.getMaterialFromStack(cast)), material));
} else {
materials = new MaterialNBT(List.of(material));
}
return ToolBuildHandler.buildItemFromMaterials(result, materials);
}
return ToolBuildHandler.buildItemFromMaterials(result, materials);
}


Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
import slimeknights.tconstruct.library.recipe.casting.material.MaterialCastingRecipe;
import slimeknights.tconstruct.library.recipe.casting.material.MaterialFluidRecipe;
import slimeknights.tconstruct.library.recipe.casting.material.ToolCastingRecipe;
import slimeknights.tconstruct.library.recipe.casting.material.ToolPartSwappingRecipe;
import slimeknights.tconstruct.library.recipe.entitymelting.EntityMeltingRecipe;
import slimeknights.tconstruct.library.recipe.fuel.MeltingFuel;
import slimeknights.tconstruct.library.recipe.melting.DamageableMeltingRecipe;
Expand Down Expand Up @@ -359,8 +358,6 @@ public final class TinkerSmeltery extends TinkerModule {
public static final RegistryObject<TypeAwareRecipeSerializer<CompositeCastingRecipe>> tableCompositeSerializer = RECIPE_SERIALIZERS.register("table_casting_composite", () -> LoadableRecipeSerializer.of(CompositeCastingRecipe.LOADER, TinkerRecipeTypes.CASTING_TABLE));
public static final RegistryObject<TypeAwareRecipeSerializer<ToolCastingRecipe>> basinToolSerializer = RECIPE_SERIALIZERS.register("basin_tool_casting", () -> LoadableRecipeSerializer.of(ToolCastingRecipe.LOADER, TinkerRecipeTypes.CASTING_BASIN));
public static final RegistryObject<TypeAwareRecipeSerializer<ToolCastingRecipe>> tableToolSerializer = RECIPE_SERIALIZERS.register("table_tool_casting", () -> LoadableRecipeSerializer.of(ToolCastingRecipe.LOADER, TinkerRecipeTypes.CASTING_TABLE));
public static final RegistryObject<TypeAwareRecipeSerializer<ToolPartSwappingRecipe>> basinPartSwappingSerializer = RECIPE_SERIALIZERS.register("basin_part_swapping", () -> LoadableRecipeSerializer.of(ToolPartSwappingRecipe.LOADER, TinkerRecipeTypes.CASTING_BASIN));
public static final RegistryObject<TypeAwareRecipeSerializer<ToolPartSwappingRecipe>> tablePartSwappingSerializer = RECIPE_SERIALIZERS.register("table_part_swapping", () -> LoadableRecipeSerializer.of(ToolPartSwappingRecipe.LOADER, TinkerRecipeTypes.CASTING_TABLE));
public static final RegistryObject<RecipeSerializer<MaterialFluidRecipe>> materialFluidRecipe = RECIPE_SERIALIZERS.register("material_fluid", () -> LoadableRecipeSerializer.of(MaterialFluidRecipe.LOADER));
// molding
public static final RegistryObject<TypeAwareRecipeSerializer<MoldingRecipe>> moldingBasinSerializer = RECIPE_SERIALIZERS.register("molding_basin", () -> LoadableRecipeSerializer.of(MoldingRecipe.LOADER, TinkerRecipeTypes.MOLDING_BASIN));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,6 @@ private void addToolBuildingRecipes(Consumer<FinishedRecipe> consumer) {
MaterialCastingRecipeBuilder.tableRecipe(TinkerTools.plateShield.get())
.setCast(MaterialIngredient.of(TinkerToolParts.shieldCore), true)
.setItemCost(3)
.partSwapping(consumer, 1, location(armorFolder + "plate_shield_part_swapping"))
.save(consumer, location(armorFolder + "plate_shield"));

// slimeskull
Expand Down

0 comments on commit 737dafd

Please sign in to comment.