package gregtech.api.enums; import gregtech.api.objects.MaterialStack; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class MaterialBuilder { public static final int DIESEL = 0, GAS = 1, THERMAL = 2, SEMIFLUID = 3, PLASMA = 4, MAGIC = 5; private int metaItemSubID; private TextureSet iconSet; private float toolSpeed = 1.0f; private int durability = 0; private int toolQuality = 0; private int types = 0; private int r = 255, g = 255, b = 255, a = 0; private String name; private String defaultLocalName; private int fuelType = 0; private int fuelPower = 0; private int meltingPoint = 0; private int blastFurnaceTemp = 0; private boolean blastFurnaceRequired = false; private boolean transparent = false; private int oreValue = 1; private int densityMultiplier = 1; private int densityDivider = 1; private Dyes color = Dyes._NULL; private int extraData = 0; private List materialList = new ArrayList<>(); private List aspects = new ArrayList<>(); private boolean hasCorrespondingFluid = false; private boolean hasCorrespondingGas = false; private boolean canBeCracked = false; private boolean canBeSteamCracked = false; private int liquidTemperature = 300; private int gasTemperature = 300; public MaterialBuilder(int metaItemSubID, TextureSet iconSet, String defaultLocalName) { this.metaItemSubID = metaItemSubID; this.iconSet = iconSet; this.name = defaultLocalName.replace(" ", "").replace("-", ""); this.defaultLocalName = defaultLocalName; } public Materials constructMaterial() { return new Materials(metaItemSubID, iconSet, toolSpeed, durability, toolQuality, types, r, g, b, a, name, defaultLocalName, fuelType, fuelPower, meltingPoint, blastFurnaceTemp, blastFurnaceRequired, transparent, oreValue, densityMultiplier, densityDivider, color, extraData, materialList, aspects) .setHasCorrespondingFluid(hasCorrespondingFluid) .setHasCorrespondingGas(hasCorrespondingGas) .setCanBeCracked(canBeCracked); } public MaterialBuilder setName(String name){ this.name = name; return this; } public MaterialBuilder setTypes(int types){ this.types = types; return this; } public MaterialBuilder addDustItems(){ types = types | 1; return this; } public MaterialBuilder addMetalItems(){ types = types | 2; return this; } public MaterialBuilder addGemItems(){ types = types | 4; return this; } public MaterialBuilder addOreItems(){ types = types | 8; return this; } public MaterialBuilder addCell(){ types = types | 16; return this; } public MaterialBuilder addPlasma(){ types = types | 32; return this; } public MaterialBuilder addToolHeadItems(){ types = types | 64; return this; } public MaterialBuilder addGearItems(){ types = types | 128; return this; } public MaterialBuilder addFluid(){ this.hasCorrespondingFluid = true; return this; } public MaterialBuilder addGas(){ this.hasCorrespondingGas = true; return this; } public MaterialBuilder setRGBA(int r, int g, int b, int a){ this.r = r; this.g = g; this.b = b; this.a = a; return this; } public MaterialBuilder setRGB(int r, int g, int b){ this.r = r; this.g = g; this.b = b; return this; } public MaterialBuilder setTransparent(boolean transparent){ this.transparent = transparent; return this; } public MaterialBuilder setColor(Dyes color){ this.color = color; return this; } public MaterialBuilder setToolSpeed(float toolSpeed) { this.toolSpeed = toolSpeed; return this; } public MaterialBuilder setDurability(int durability) { this.durability = durability; return this; } public MaterialBuilder setToolQuality(int toolQuality) { this.toolQuality = toolQuality; return this; } public MaterialBuilder setFuelType(int fuelType) { this.fuelType = fuelType; return this; } public MaterialBuilder setFuelPower(int fuelPower) { this.fuelPower = fuelPower; return this; } public MaterialBuilder setMeltingPoint(int meltingPoint) { this.meltingPoint = meltingPoint; return this; } public MaterialBuilder setBlastFurnaceTemp(int blastFurnaceTemp) { this.blastFurnaceTemp = blastFurnaceTemp; return this; } public MaterialBuilder setBlastFurnaceRequired(boolean blastFurnaceRequired) { this.blastFurnaceRequired = blastFurnaceRequired; return this; } public MaterialBuilder setOreValue(int oreValue) { this.oreValue = oreValue; return this; } public MaterialBuilder setDensityMultiplier(int densityMultiplier) { this.densityMultiplier = densityMultiplier; return this; } public MaterialBuilder setDensityDivider(int densityDivider) { this.densityDivider = densityDivider; return this; } public MaterialBuilder setExtraData(int extraData) { this.extraData = extraData; return this; } public MaterialBuilder addElectrolyzerRecipe(){ extraData = extraData | 1; return this; } public MaterialBuilder addCentrifugeRecipe(){ extraData = extraData | 2; return this; } public MaterialBuilder setMaterialList(List materialList) { this.materialList = materialList; return this; } public MaterialBuilder setMaterialList(MaterialStack ... materials) { this.materialList = Arrays.asList(materials); return this; } public MaterialBuilder setAspects(List aspects) { this.aspects = aspects; return this; } public int getLiquidTemperature() { return liquidTemperature; } public MaterialBuilder setLiquidTemperature(int liquidTemperature) { this.liquidTemperature = liquidTemperature; return this; } public int getGasTemperature() { return gasTemperature; } public MaterialBuilder setGasTemperature(int gasTemperature) { this.gasTemperature = gasTemperature; return this; } public boolean canBeCracked() { return canBeCracked; } public MaterialBuilder setCanBeCracked(boolean canBeCracked) { this.canBeCracked = canBeCracked; return this; } }