Formulaic Assemblicators are now 1000 times more efficient, combined with the last commit. I'm proud

This commit is contained in:
aidancbrady 2016-04-23 18:51:55 -04:00
parent 8f96e51142
commit 65be977161
2 changed files with 87 additions and 48 deletions

View file

@ -29,6 +29,7 @@ public class RecipeFormula
}
resetToRecipe();
recipe = RecipeUtils.getRecipeFromGrid(dummy, world);
}

View file

@ -59,6 +59,9 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im
public TileComponentConfig configComponent;
public TileComponentSecurity securityComponent;
public ItemStack lastFormulaStack;
public boolean needsFormulaUpdate = false;
public TileEntityFormulaicAssemblicator()
{
super("FormulaicAssemblicator", MachineType.FORMULAIC_ASSEMBLICATOR.baseEnergy);
@ -102,39 +105,28 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im
pulseOperations++;
}
RecipeFormula prev = formula;
if(inventory[2] != null && inventory[2].getItem() instanceof ItemCraftingFormula)
{
ItemCraftingFormula item = (ItemCraftingFormula)inventory[2].getItem();
if(item.getInventory(inventory[2]) != null && !item.isInvalid(inventory[2]))
if(formula == null || lastFormulaStack != inventory[2])
{
RecipeFormula itemFormula = new RecipeFormula(worldObj, item.getInventory(inventory[2]));
if(itemFormula.isValidFormula(worldObj))
{
if(formula != null && !formula.isFormulaEqual(worldObj, itemFormula))
{
itemFormula = formula;
operatingTicks = 0;
}
else if(formula == null)
{
formula = itemFormula;
}
}
else {
formula = null;
item.setInvalid(inventory[2], true);
}
}
else {
formula = null;
loadFormula();
}
}
else {
formula = null;
}
if(prev != formula)
{
needsFormulaUpdate = true;
}
lastFormulaStack = inventory[2];
if(autoMode && formula == null)
{
toggleAutoMode();
@ -185,22 +177,55 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im
}
}
public void loadFormula()
{
ItemCraftingFormula item = (ItemCraftingFormula)inventory[2].getItem();
if(item.getInventory(inventory[2]) != null && !item.isInvalid(inventory[2]))
{
RecipeFormula itemFormula = new RecipeFormula(worldObj, item.getInventory(inventory[2]));
if(itemFormula.isValidFormula(worldObj))
{
if(formula != null && !formula.isFormulaEqual(worldObj, itemFormula))
{
formula = itemFormula;
operatingTicks = 0;
}
else if(formula == null)
{
formula = itemFormula;
}
}
else {
formula = null;
item.setInvalid(inventory[2], true);
}
}
else {
formula = null;
}
}
@Override
public void markDirty()
{
super.markDirty();
if(formula == null)
if(worldObj != null && !worldObj.isRemote)
{
for(int i = 0; i < 9; i++)
if(formula == null)
{
dummyInv.setInventorySlotContents(i, inventory[27+i]);
for(int i = 0; i < 9; i++)
{
dummyInv.setInventorySlotContents(i, inventory[27+i]);
}
isRecipe = MekanismUtils.findMatchingRecipe(dummyInv, worldObj) != null;
}
else {
isRecipe = formula.matches(worldObj, inventory, 27);
}
isRecipe = MekanismUtils.findMatchingRecipe(dummyInv, worldObj) != null;
}
else {
isRecipe = formula.matches(worldObj, inventory, 27);
}
}
@ -582,20 +607,23 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im
if(dataStream.readBoolean())
{
ItemStack[] inv = new ItemStack[9];
for(int i = 0; i < 9; i++)
if(dataStream.readBoolean())
{
if(dataStream.readBoolean())
ItemStack[] inv = new ItemStack[9];
for(int i = 0; i < 9; i++)
{
inv[i] = PacketHandler.readStack(dataStream);
if(dataStream.readBoolean())
{
inv[i] = PacketHandler.readStack(dataStream);
}
}
formula = new RecipeFormula(worldObj, inv);
}
else {
formula = null;
}
formula = new RecipeFormula(worldObj, inv);
}
else {
formula = null;
}
}
@ -609,26 +637,36 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im
data.add(controlType.ordinal());
data.add(isRecipe);
if(formula != null)
if(needsFormulaUpdate)
{
data.add(true);
for(int i = 0; i < 9; i++)
if(formula != null)
{
if(formula.input[i] != null)
data.add(true);
for(int i = 0; i < 9; i++)
{
data.add(true);
data.add(formula.input[i]);
}
else {
data.add(false);
if(formula.input[i] != null)
{
data.add(true);
data.add(formula.input[i]);
}
else {
data.add(false);
}
}
}
else {
data.add(false);
}
}
else {
data.add(false);
}
needsFormulaUpdate = false;
return data;
}