aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersUtils.java
blob: 09633f5810637f731d09d0fb690efce257e04134 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package gtPlusPlus.xmod.tinkers.util;

import java.util.List;

import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;

import gtPlusPlus.core.material.Material;
import tconstruct.library.TConstructRegistry;
import tconstruct.library.crafting.CastingRecipe;
import tconstruct.library.crafting.FluidType;
import tconstruct.library.crafting.LiquidCasting;
import tconstruct.library.crafting.Smeltery;
import tconstruct.library.tools.DynamicToolPart;
import tconstruct.library.util.IPattern;
import tconstruct.smeltery.TinkerSmeltery;

public class TinkersUtils {

    /**
     * Add a new fluid as a valid Smeltery fuel.
     *
     * @param fluid    The fluid.
     * @param power    The temperature of the fluid. This also influences the melting speed. Lava is 1000.
     * @param duration How long one "portion" of liquid fuels the smeltery. Lava is 10.
     */
    public static void addSmelteryFuel(Fluid fluid, int power, int duration) {
        Smeltery.addSmelteryFuel(fluid, power, duration);
    }

    public static boolean registerFluidType(String name, Block block, int meta, int baseTemperature, Fluid fluid,
        boolean isToolpart) {
        FluidType.registerFluidType(name, block, meta, baseTemperature, fluid, isToolpart);
        return true;
    }

    public static void addMelting(ItemStack input, Block block, int metadata, int temperature, FluidStack liquid) {
        Smeltery.addMelting(input, block, metadata, temperature, liquid);
    }

    public static void addMelting(FluidType type, ItemStack input, int temperatureDifference, int fluidAmount) {
        Smeltery.addMelting(type, input, temperatureDifference, fluidAmount);
    }

    public static void addBasinRecipe(ItemStack output, FluidStack metal, ItemStack cast, boolean consume, int delay) {
        LiquidCasting tableCasting = TConstructRegistry.getTableCasting();
        tableCasting.addCastingRecipe(output, metal, cast, consume, delay);
    }

    public static void addCastingTableRecipe(ItemStack output, FluidStack metal, ItemStack cast, boolean consume,
        int delay) {
        LiquidCasting basinCasting = TConstructRegistry.getBasinCasting();
        basinCasting.addCastingRecipe(output, metal, cast, consume, delay);
    }

    public static List<CastingRecipe> getTableCastingRecipes() {
        LiquidCasting tableCasting = TConstructRegistry.getTableCasting();
        return tableCasting.getCastingRecipes();
    }

    public static void generateCastingRecipes(Material aMaterial, int aID) {
        Fluid aMoltenIron = TinkerSmeltery.moltenIronFluid;
        FluidType fluidType = FluidType.getFluidType(aMaterial.getLocalizedName());
        for (CastingRecipe recipe : getTableCastingRecipes()) {
            CastingRecipeHandler newRecipe = new CastingRecipeHandler(recipe);
            if (newRecipe.castingMetal.getFluid() == aMoltenIron && newRecipe.cast != null
                && newRecipe.cast.getItem() instanceof IPattern
                && newRecipe.getResult()
                    .getItem() instanceof DynamicToolPart) {
                ItemStack output = newRecipe.getResult()
                    .copy();
                output.setItemDamage(aID);
                FluidStack liquid = new FluidStack(
                    aMaterial.getFluidStack(0)
                        .getFluid(),
                    newRecipe.castingMetal.amount);
                addCastingTableRecipe(output, liquid, newRecipe.cast, newRecipe.consumeCast, newRecipe.coolTime);
                addMelting(fluidType, output, 0, liquid.amount / 2);
            }
        }
    }

    public static ItemStack getPattern(int aType) {
        return new ItemStack(TinkerSmeltery.metalPattern, aType, 0);
    }

    private static class CastingRecipeHandler {

        public ItemStack output;
        public FluidStack castingMetal;
        public ItemStack cast;
        public boolean consumeCast;
        public int coolTime;

        public CastingRecipeHandler(CastingRecipe castingRecipe) {
            this.output = castingRecipe.output;
            this.castingMetal = castingRecipe.castingMetal;
            this.cast = castingRecipe.cast;
            this.consumeCast = castingRecipe.consumeCast;
            this.coolTime = castingRecipe.coolTime;
        }

        public ItemStack getResult() {
            return this.output.copy();
        }
    }
}