diff options
author | draknyte1 <draknyte1@hotmail.com> | 2016-11-02 15:49:00 +1000 |
---|---|---|
committer | draknyte1 <draknyte1@hotmail.com> | 2016-11-02 15:49:00 +1000 |
commit | d594987b2cfdefa447ee585a68d4a4bef4ece3a5 (patch) | |
tree | 814813fc14ce5dcd8dfa7aeaecd939ac42d12877 /src/Java/gtPlusPlus/core/material/Material.java | |
parent | 26292158575a0f0acb51ae50715887f871d2b5a0 (diff) | |
parent | 49a520da5da01594b5c42652d9db5c7c04e49ad8 (diff) | |
download | GT5-Unofficial-d594987b2cfdefa447ee585a68d4a4bef4ece3a5.tar.gz GT5-Unofficial-d594987b2cfdefa447ee585a68d4a4bef4ece3a5.tar.bz2 GT5-Unofficial-d594987b2cfdefa447ee585a68d4a4bef4ece3a5.zip |
Merge branch 'master' of https://github.com/draknyte1/GTplusplus
Diffstat (limited to 'src/Java/gtPlusPlus/core/material/Material.java')
-rw-r--r-- | src/Java/gtPlusPlus/core/material/Material.java | 477 |
1 files changed, 382 insertions, 95 deletions
diff --git a/src/Java/gtPlusPlus/core/material/Material.java b/src/Java/gtPlusPlus/core/material/Material.java index 0902bf62f9..893b310ba4 100644 --- a/src/Java/gtPlusPlus/core/material/Material.java +++ b/src/Java/gtPlusPlus/core/material/Material.java @@ -1,97 +1,171 @@ package gtPlusPlus.core.material; +import static gregtech.api.enums.GT_Values.M; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gtPlusPlus.core.item.base.cell.BaseItemCell; import gtPlusPlus.core.util.Utils; -import gtPlusPlus.core.util.item.UtilsItems; +import gtPlusPlus.core.util.fluid.FluidUtils; +import gtPlusPlus.core.util.item.ItemUtils; +import gtPlusPlus.core.util.materials.MaterialUtils; import gtPlusPlus.core.util.math.MathUtils; + +import java.util.ArrayList; + +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; public class Material { - final String unlocalizedName; - final String localizedName; + private final String unlocalizedName; + private final String localizedName; + + private final Fluid vMoltenFluid; + + protected Object dataVar; - private MaterialStack[] materialInput = new MaterialStack[4]; + private ArrayList<MaterialStack> vMaterialInput = new ArrayList<MaterialStack>(); + public final long[] vSmallestRatio; - final short[] RGBA; + private final short[] RGBA; - final boolean usesBlastFurnace; + private final boolean usesBlastFurnace; + public final boolean isRadioactive; + public final byte vRadioationLevel; - final int meltingPointK; - final int boilingPointK; - final int meltingPointC; - final int boilingPointC; - final long vProtons; - final long vNeutrons; - final long vMass; + private final int meltingPointK; + private final int boilingPointK; + private final int meltingPointC; + private final int boilingPointC; + private final long vProtons; + private final long vNeutrons; + private final long vMass; + public final int smallestStackSizeWhenProcessing; //Add a check for <=0 || > 64 public final int vTier; public final int vVoltageMultiplier; + public final String vChemicalFormula; + public final String vChemicalSymbol; + + public Material(final String materialName, final short[] rgba, final int meltingPoint, final int boilingPoint, final long protons, final long neutrons, final boolean blastFurnace, final MaterialStack... inputs){ + this(materialName, rgba, meltingPoint, boilingPoint, protons, neutrons, blastFurnace, "", 0, inputs); + } + + public Material(final String materialName, final short[] rgba, final int meltingPoint, final int boilingPoint, final long protons, final long neutrons, final boolean blastFurnace, final int radiationLevel, MaterialStack... inputs){ + this(materialName, rgba, meltingPoint, boilingPoint, protons, neutrons, blastFurnace, "", radiationLevel, inputs); + } - public Material(String materialName, short[] rgba, int meltingPoint, int boilingPoint, long protons, long neutrons, boolean blastFurnace, MaterialStack[] inputs){ + public Material(final String materialName, final short[] rgba, final int meltingPoint, final int boilingPoint, final long protons, final long neutrons, final boolean blastFurnace, final String chemicalSymbol, final int radiationLevel, final MaterialStack... inputs){ this.unlocalizedName = Utils.sanitizeString(materialName); this.localizedName = materialName; this.RGBA = rgba; this.meltingPointC = meltingPoint; - if (boilingPoint == 0){ - boilingPoint = meltingPoint*4; + if (boilingPoint != 0){ + this.boilingPointC = boilingPoint; + } + else { + this.boilingPointC = meltingPoint*4; } - this.boilingPointC = boilingPoint; this.meltingPointK = (int) MathUtils.celsiusToKelvin(meltingPointC); this.boilingPointK = (int) MathUtils.celsiusToKelvin(boilingPointC); this.vProtons = protons; this.vNeutrons = neutrons; this.vMass = getMass(); - if (getMeltingPoint_K() >= 0 && getMeltingPoint_K() <= 750){ - this.vTier = 1; - } - else if(getMeltingPoint_K() >= 751 && getMeltingPoint_K() <= 1250){ - this.vTier = 2; - } - else if(getMeltingPoint_K() >= 1251 && getMeltingPoint_K() <= 1750){ - this.vTier = 3; - } - else if(getMeltingPoint_K() >= 1751 && getMeltingPoint_K() <= 2250){ - this.vTier = 4; - } - else if(getMeltingPoint_K() >= 2251 && getMeltingPoint_K() <= 2750){ - this.vTier = 5; - } - else if(getMeltingPoint_K() >= 2751 && getMeltingPoint_K() <= 3250){ - this.vTier = 6; - } - else if(getMeltingPoint_K() >= 3251 && getMeltingPoint_K() <= 3750){ - this.vTier = 7; - } - else if(getMeltingPoint_K() >= 3751 && getMeltingPoint_K() <= 4250){ - this.vTier = 8; - } - else if(getMeltingPoint_K() >= 4251 && getMeltingPoint_K() <= 4750){ - this.vTier = 9; - } - else if(getMeltingPoint_K() >= 4751 && getMeltingPoint_K() <= 9999){ - this.vTier = 10; + //Sets the Rad level + if (radiationLevel != 0){ + this.isRadioactive = true; + this.vRadioationLevel = (byte) radiationLevel; } else { - this.vTier = 0; + this.isRadioactive = false; + this.vRadioationLevel = (byte) radiationLevel; } + //Sets the materials 'tier'. Will probably replace this logic. + this.vTier = MaterialUtils.getTierOfMaterial((int) MathUtils.celsiusToKelvin(meltingPoint)); + this.usesBlastFurnace = blastFurnace; - this.vVoltageMultiplier = this.getMeltingPoint_K() >= 2800 ? 64 : 16; + this.vVoltageMultiplier = this.getMeltingPointK() >= 2800 ? 64 : 16; if (inputs == null){ - this.materialInput = null; + this.vMaterialInput = null; } else { if (inputs.length != 0){ for (int i=0; i < inputs.length; i++){ if (inputs[i] != null){ - this.materialInput[i] = inputs[i]; + this.vMaterialInput.add(i, inputs[i]); } } } } + + this.vSmallestRatio = getSmallestRatio(vMaterialInput); + int tempSmallestSize = 0; + + if (vSmallestRatio != null){ + for (int v=0;v<this.vSmallestRatio.length;v++){ + tempSmallestSize=(int) (tempSmallestSize+vSmallestRatio[v]); + } + this.smallestStackSizeWhenProcessing = tempSmallestSize; //Valid stacksizes + } + else { + this.smallestStackSizeWhenProcessing = 1; //Valid stacksizes + } + + + //Makes a Fancy Chemical Tooltip + this.vChemicalSymbol = chemicalSymbol; + if (vMaterialInput != null){ + this.vChemicalFormula = getToolTip(chemicalSymbol, OrePrefixes.dust.mMaterialAmount / M, true); + } + else if (!this.vChemicalSymbol.equals("")){ + Utils.LOG_WARNING("materialInput is null, using a valid chemical symbol."); + this.vChemicalFormula = this.vChemicalSymbol; + } + else{ + Utils.LOG_WARNING("MaterialInput == null && chemicalSymbol probably equals nothing"); + this.vChemicalFormula = "??"; + } + + Materials isValid = Materials.get(getLocalizedName()); + if (isValid == Materials._NULL){ + this.vMoltenFluid = generateFluid(); + } + else { + if (isValid.mFluid != null){ + this.vMoltenFluid = isValid.mFluid; + } + else if (isValid.mGas != null){ + this.vMoltenFluid = isValid.mGas; + } + else if (isValid.mPlasma != null){ + this.vMoltenFluid = isValid.mPlasma; + } + else { + this.vMoltenFluid = generateFluid(); + } + } + + //dataVar = MathUtils.generateSingularRandomHexValue(); + + String ratio = ""; + if (vSmallestRatio != null) + for (int hu=0;hu<vSmallestRatio.length;hu++){ + if (ratio.equals("")){ + ratio = String.valueOf(vSmallestRatio[hu]); + } + else { + ratio = ratio + ":" +vSmallestRatio[hu]; + } + } + Utils.LOG_INFO("Creating a Material instance for "+materialName); + Utils.LOG_INFO("Formula: "+vChemicalFormula + " Smallest Stack: "+smallestStackSizeWhenProcessing+" Smallest Ratio:"+ratio); Utils.LOG_INFO("Protons: "+vProtons); Utils.LOG_INFO("Neutrons: "+vNeutrons); Utils.LOG_INFO("Mass: "+vMass+"/units"); @@ -99,118 +173,331 @@ public class Material { Utils.LOG_INFO("Boiling Point: "+boilingPointC+"C."); } - public String getLocalizedName(){ + final public String getLocalizedName(){ return localizedName; } - public String getUnlocalizedName(){ + final public String getUnlocalizedName(){ return unlocalizedName; } - public short[] getRGBA(){ - return RGBA; + final public short[] getRGBA(){ + return this.RGBA; } - - public int getRgbAsHex(){ + + final public int getRgbAsHex(){ + + int returnValue = Utils.rgbtoHexValue(RGBA[0], RGBA[1], RGBA[2]); + if (returnValue == 0){ + return (int) dataVar; + } return Utils.rgbtoHexValue(RGBA[0], RGBA[1], RGBA[2]); } - public long getProtons() { + final public long getProtons() { return vProtons; } - public long getNeutrons() { + final public long getNeutrons() { return vNeutrons; } - public long getMass() { + final public long getMass() { return vProtons + vNeutrons; } - public int getMeltingPoint_C() { + final public int getMeltingPointC() { return meltingPointC; } - public int getBoilingPoint_C() { + final public int getBoilingPointC() { return boilingPointC; } - public int getMeltingPoint_K() { + final public int getMeltingPointK() { return meltingPointK; } - public int getBoilingPoint_K() { + final public int getBoilingPointK() { return boilingPointK; } - public boolean requiresBlastFurnace(){ + final public boolean requiresBlastFurnace(){ return usesBlastFurnace; } - public ItemStack getDust(int stacksize){ - return UtilsItems.getItemStackOfAmountFromOreDictNoBroken("dust"+unlocalizedName, stacksize); + final public ItemStack getDust(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dust"+unlocalizedName, stacksize); + } + + final public ItemStack getSmallDust(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dustSmall"+unlocalizedName, stacksize); } - public ItemStack getSmallDust(int stacksize){ - return UtilsItems.getItemStackOfAmountFromOreDictNoBroken("dustSmall"+unlocalizedName, stacksize); + final public ItemStack getTinyDust(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dustTiny"+unlocalizedName, stacksize); } - public ItemStack getTinyDust(int stacksize){ - return UtilsItems.getItemStackOfAmountFromOreDictNoBroken("dustTiny"+unlocalizedName, stacksize); + final public ItemStack[] getValidInputStacks(){ + return ItemUtils.validItemsForOreDict(unlocalizedName); } - public ItemStack[] getValidInputStacks(){ - return UtilsItems.validItemsForOreDict(unlocalizedName); + final public ItemStack getIngot(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("ingot"+unlocalizedName, stacksize); } - public ItemStack getIngot(int stacksize){ - return UtilsItems.getItemStackOfAmountFromOreDictNoBroken("ingot"+unlocalizedName, stacksize); + final public ItemStack getPlate(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plate"+unlocalizedName, stacksize); } - public ItemStack getPlate(int stacksize){ - return UtilsItems.getItemStackOfAmountFromOreDictNoBroken("plate"+unlocalizedName, stacksize); + final public ItemStack getPlateDouble(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plateDouble"+unlocalizedName, stacksize); } - public ItemStack getPlateDouble(int stacksize){ - return UtilsItems.getItemStackOfAmountFromOreDictNoBroken("plateDouble"+unlocalizedName, stacksize); + final public ItemStack getGear(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("gear"+unlocalizedName, stacksize); } - public ItemStack[] getMaterialComposites(){ - //Utils.LOG_INFO("Something requested the materials needed for "+localizedName); - if (materialInput != null && materialInput.length >= 1){ - ItemStack[] temp = new ItemStack[materialInput.length]; - for (int i=0;i<materialInput.length;i++){ - //Utils.LOG_INFO("i:"+i); + final public ItemStack getRod(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("stick"+unlocalizedName, stacksize); + } + + final public ItemStack getLongRod(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("stickLong"+unlocalizedName, stacksize); + } + + final public ItemStack getBolt(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("bolt"+unlocalizedName, stacksize); + } + + final public ItemStack getScrew(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("screw"+unlocalizedName, stacksize); + } + + final public ItemStack getRing(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("ring"+unlocalizedName, stacksize); + } + + final public ItemStack getRotor(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("rotor"+unlocalizedName, stacksize); + } + + final public ItemStack getFrameBox(int stacksize){ + return ItemUtils.getItemStackOfAmountFromOreDictNoBroken("frameGt"+unlocalizedName, stacksize); + } + + final public ItemStack[] getMaterialComposites(){ + //Utils.LOG_WARNING("Something requested the materials needed for "+localizedName); + if (vMaterialInput != null){ + if (!vMaterialInput.isEmpty()){ + ItemStack[] temp = new ItemStack[vMaterialInput.size()]; + for (int i=0;i<vMaterialInput.size();i++){ + //Utils.LOG_WARNING("i:"+i); ItemStack testNull = null; try { - testNull = materialInput[i].getDustStack(); + testNull = vMaterialInput.get(i).getDustStack(); } catch (Throwable r){ - Utils.LOG_INFO("Failed gathering material stack for "+localizedName+"."); - Utils.LOG_INFO("What Failed: Length:"+materialInput.length+" current:"+i); + Utils.LOG_WARNING("Failed gathering material stack for "+localizedName+"."); + Utils.LOG_WARNING("What Failed: Length:"+vMaterialInput.size()+" current:"+i); } try { if (testNull != null){ - //Utils.LOG_INFO("not null"); - temp[i] = materialInput[i].getDustStack(); + //Utils.LOG_WARNING("not null"); + temp[i] = vMaterialInput.get(i).getDustStack(); } } catch (Throwable r){ - Utils.LOG_INFO("Failed setting slot "+i+", using "+localizedName); + Utils.LOG_WARNING("Failed setting slot "+i+", using "+localizedName); } } return temp; } + } return new ItemStack[]{}; } - public int[] getMaterialCompositeStackSizes(){ - if (materialInput != null && materialInput.length >= 1){ - int[] temp = new int[materialInput.length]; - for (int i=0;i<materialInput.length;i++){ - temp[i] = materialInput[i].getDustStack().stackSize; + final public ArrayList<MaterialStack> getComposites(){ + return this.vMaterialInput; + } + + final public int[] getMaterialCompositeStackSizes(){ + if (!vMaterialInput.isEmpty()){ + int[] temp = new int[vMaterialInput.size()]; + for (int i=0;i<vMaterialInput.size();i++){ + if (vMaterialInput.get(i) != null) + temp[i] = vMaterialInput.get(i).getDustStack().stackSize; + else + temp[i]=0; } return temp; } return new int[]{}; } + + @SuppressWarnings("static-method") + final public long[] getSmallestRatio(ArrayList<MaterialStack> tempInput){ + if (tempInput != null){ + if (!tempInput.isEmpty()){ + Utils.LOG_WARNING("length: "+tempInput.size()); + Utils.LOG_WARNING("(inputs != null): "+(tempInput != null)); + //Utils.LOG_WARNING("length: "+inputs.length); + long[] tempRatio = new long[tempInput.size()]; + for (int x=0;x<tempInput.size();x++){ + //tempPercentage = tempPercentage+inputs[x].percentageToUse; + //this.mMaterialList.add(inputs[x]); + if (tempInput.get(x) != null){ + tempRatio[x] = tempInput.get(x).getPartsPerOneHundred(); + } + } + + long[] smallestRatio = MathUtils.simplifyNumbersToSmallestForm(tempRatio); + + if (smallestRatio.length > 0){ + String tempRatioStringThing1 = ""; + for (int r=0;r<tempRatio.length;r++){ + tempRatioStringThing1 = tempRatioStringThing1 + tempRatio[r] +" : "; + } + Utils.LOG_WARNING("Default Ratio: "+tempRatioStringThing1); + + String tempRatioStringThing = ""; + int tempSmallestCraftingUseSize = 0; + for (int r=0;r<smallestRatio.length;r++){ + tempRatioStringThing = tempRatioStringThing + smallestRatio[r] +" : "; + tempSmallestCraftingUseSize = (int) (tempSmallestCraftingUseSize + smallestRatio[r]); + } + //this.smallestStackSizeWhenProcessing = tempSmallestCraftingUseSize; + Utils.LOG_WARNING("Smallest Ratio: "+tempRatioStringThing); + return smallestRatio; + } + } + } + return null; + } + + @SuppressWarnings("unused") + final String getToolTip(String chemSymbol, long aMultiplier, boolean aShowQuestionMarks) { + if (!aShowQuestionMarks && (vChemicalFormula.equals("?")||vChemicalFormula.equals("??"))) return ""; + Utils.LOG_WARNING("===============| Calculating Atomic Formula for "+this.localizedName+" |==============="); + if (!chemSymbol.equals("")) + return chemSymbol; + ArrayList<MaterialStack> tempInput = vMaterialInput; + if (tempInput != null){ + if (!tempInput.isEmpty()){ + String dummyFormula = ""; + long[] dummyFormulaArray = getSmallestRatio(tempInput); + if (dummyFormulaArray != null){ + if (dummyFormulaArray.length >= 1){ + for (int e=0;e<tempInput.size();e++){ + if (tempInput.get(e) != null){ + if (tempInput.get(e).getStackMaterial() != null){ + if (!tempInput.get(e).getStackMaterial().vChemicalSymbol.equals("??")){ + if (dummyFormulaArray[e] > 1){ + + if (tempInput.get(e).getStackMaterial().vChemicalFormula.length() > 3){ + dummyFormula = dummyFormula + "(" + tempInput.get(e).getStackMaterial().vChemicalFormula + ")" + dummyFormulaArray[e]; + } + else { + dummyFormula = dummyFormula + tempInput.get(e).getStackMaterial().vChemicalFormula + dummyFormulaArray[e]; + } + } + else if (dummyFormulaArray[e] == 1){ + if (tempInput.get(e).getStackMaterial().vChemicalFormula.length() > 3){ + dummyFormula = dummyFormula + "(" +tempInput.get(e).getStackMaterial().vChemicalFormula + ")"; + } + else { + dummyFormula = dummyFormula +tempInput.get(e).getStackMaterial().vChemicalFormula; + } + } + } + else + dummyFormula = dummyFormula + "??"; + } + else + dummyFormula = dummyFormula + "▓▓"; + } + } + return MaterialUtils.subscript(dummyFormula); + //return dummyFormula; + } + Utils.LOG_WARNING("dummyFormulaArray <= 0"); + } + Utils.LOG_WARNING("dummyFormulaArray == null"); + } + Utils.LOG_WARNING("tempInput.length <= 0"); + } + Utils.LOG_WARNING("tempInput == null"); + return "??"; + + } + + final Fluid generateFluid(){ + if (Materials.get(localizedName).mFluid == null){ + Utils.LOG_WARNING("Generating our own fluid."); + + //Generate a Cell if we need to + if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+getUnlocalizedName(), 1) == null){ + @SuppressWarnings("unused") + Item temp = new BaseItemCell(this); + } + return FluidUtils.addGTFluid( + this.getUnlocalizedName(), + "Molten "+this.getLocalizedName(), + this.RGBA, + 4, + this.getMeltingPointK(), + ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cell"+getUnlocalizedName(), 1), + ItemList.Cell_Empty.get(1L, new Object[0]), + 1000); + } + Utils.LOG_WARNING("Getting the fluid from a GT material instead."); + return Materials.get(localizedName).mFluid; + } + + final public FluidStack getFluid(int fluidAmount) { + Utils.LOG_WARNING("Attempting to get "+fluidAmount+"L of "+this.vMoltenFluid.getName()); + + FluidStack moltenFluid = new FluidStack(this.vMoltenFluid, fluidAmount); + + Utils.LOG_WARNING("Info: "+moltenFluid.getFluid().getName()+" Info: "+moltenFluid.amount+" Info: "+moltenFluid.getFluidID()); + + //FluidStack moltenFluid = FluidUtils.getFluidStack(this.vMoltenFluid.getName(), fluidAmount); + /*boolean isNull = (moltenFluid == null); + if (isNull) Utils.LOG_WARNING("Did not obtain fluid."); + else Utils.LOG_WARNING("Found fluid."); + if (isNull){ + return null; + }*/ + return moltenFluid; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + } |