Make recipe input work for split stacks
This commit is contained in:
parent
c596231af4
commit
54ae577be0
1 changed files with 65 additions and 20 deletions
|
@ -317,50 +317,94 @@ public class GT_Recipe {
|
||||||
|
|
||||||
public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, boolean aDontCheckStackSizes, FluidStack[] aFluidInputs, ItemStack... aInputs) {
|
public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, boolean aDontCheckStackSizes, FluidStack[] aFluidInputs, ItemStack... aInputs) {
|
||||||
if (mFluidInputs.length > 0 && aFluidInputs == null) return false;
|
if (mFluidInputs.length > 0 && aFluidInputs == null) return false;
|
||||||
|
int amt;
|
||||||
for (FluidStack tFluid : mFluidInputs)
|
for (FluidStack tFluid : mFluidInputs)
|
||||||
if (tFluid != null) {
|
if (tFluid != null) {
|
||||||
boolean temp = true;
|
boolean temp = true;
|
||||||
|
amt = tFluid.amount;
|
||||||
for (FluidStack aFluid : aFluidInputs)
|
for (FluidStack aFluid : aFluidInputs)
|
||||||
if (aFluid != null && aFluid.isFluidEqual(tFluid) && (aDontCheckStackSizes || aFluid.amount >= tFluid.amount)) {
|
if (aFluid != null && aFluid.isFluidEqual(tFluid)){
|
||||||
|
if (aDontCheckStackSizes ){
|
||||||
temp = false;
|
temp = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
amt -= aFluid.amount;
|
||||||
|
if (amt<1){
|
||||||
|
temp = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (temp) return false;
|
if (temp) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mInputs.length > 0 && aInputs == null) return false;
|
if (mInputs.length > 0 && aInputs == null) return false;
|
||||||
|
|
||||||
for (ItemStack tStack : mInputs)
|
for (ItemStack tStack : mInputs) {
|
||||||
if (tStack != null) {
|
if (tStack != null) {
|
||||||
|
amt = tStack.stackSize;
|
||||||
boolean temp = true;
|
boolean temp = true;
|
||||||
for (ItemStack aStack : aInputs)
|
for (ItemStack aStack : aInputs) {
|
||||||
if ((GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true)) && (aDontCheckStackSizes || aStack.stackSize >= tStack.stackSize)) {
|
if ((GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true))) {
|
||||||
|
if (aDontCheckStackSizes) {
|
||||||
temp = false;
|
temp = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
amt -= aStack.stackSize;
|
||||||
|
if (amt < 1) {
|
||||||
|
temp = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (temp) return false;
|
if (temp) return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (aDecreaseStacksizeBySuccess) {
|
if (aDecreaseStacksizeBySuccess) {
|
||||||
if (aFluidInputs != null) {
|
if (aFluidInputs != null) {
|
||||||
for (FluidStack tFluid : mFluidInputs)
|
for (FluidStack tFluid : mFluidInputs) {
|
||||||
if (tFluid != null) {
|
if (tFluid != null) {
|
||||||
for (FluidStack aFluid : aFluidInputs)
|
amt = tFluid.amount;
|
||||||
if (aFluid != null && aFluid.isFluidEqual(tFluid) && (aDontCheckStackSizes || aFluid.amount >= tFluid.amount)) {
|
for (FluidStack aFluid : aFluidInputs) {
|
||||||
aFluid.amount -= tFluid.amount;
|
if (aFluid != null && aFluid.isFluidEqual(tFluid)) {
|
||||||
|
if (aDontCheckStackSizes) {
|
||||||
|
aFluid.amount -= amt;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (aFluid.amount < amt) {
|
||||||
|
amt -= aFluid.amount;
|
||||||
|
aFluid.amount = 0;
|
||||||
|
} else {
|
||||||
|
aFluid.amount -= amt;
|
||||||
|
amt = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aInputs != null) {
|
if (aInputs != null) {
|
||||||
for (ItemStack tStack : mInputs)
|
for (ItemStack tStack : mInputs) {
|
||||||
if (tStack != null) {
|
if (tStack != null) {
|
||||||
for (ItemStack aStack : aInputs)
|
amt = tStack.stackSize;
|
||||||
if ((GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true)) && (aDontCheckStackSizes || aStack.stackSize >= tStack.stackSize)) {
|
for (ItemStack aStack : aInputs) {
|
||||||
aStack.stackSize -= tStack.stackSize;
|
if ((GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true))) {
|
||||||
|
if (aDontCheckStackSizes){
|
||||||
|
aStack.stackSize -= amt;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (aStack.stackSize < amt){
|
||||||
|
amt -= aStack.stackSize;
|
||||||
|
aStack.stackSize = 0;
|
||||||
|
}else{
|
||||||
|
aStack.stackSize -= amt;
|
||||||
|
amt = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -368,6 +412,7 @@ public class GT_Recipe {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class GT_Recipe_Map {
|
public static class GT_Recipe_Map {
|
||||||
/**
|
/**
|
||||||
* Contains all Recipe Maps
|
* Contains all Recipe Maps
|
||||||
|
|
Loading…
Reference in a new issue