Formulaic Assemblicators are now 1000 times more efficient, combined with the last commit. I'm proud
This commit is contained in:
parent
8f96e51142
commit
65be977161
2 changed files with 87 additions and 48 deletions
|
@ -29,6 +29,7 @@ public class RecipeFormula
|
|||
}
|
||||
|
||||
resetToRecipe();
|
||||
|
||||
recipe = RecipeUtils.getRecipeFromGrid(dummy, world);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue