Improve auto crafting table performance with large amount of recipes.
This commit is contained in:
parent
d7f0e04034
commit
425f8921fc
1 changed files with 23 additions and 1 deletions
|
@ -287,6 +287,14 @@ public class TileAutoCraftingTable extends TilePowerAcceptor
|
||||||
}
|
}
|
||||||
|
|
||||||
public IRecipe findMatchingRecipe(InventoryCrafting crafting){
|
public IRecipe findMatchingRecipe(InventoryCrafting crafting){
|
||||||
|
if(crafting.isEmpty()){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if(currentRecipe != null){
|
||||||
|
if(currentRecipe.matches(crafting, world)){
|
||||||
|
return currentRecipe;
|
||||||
|
}
|
||||||
|
}
|
||||||
for (IRecipe testRecipe : CraftingManager.REGISTRY) {
|
for (IRecipe testRecipe : CraftingManager.REGISTRY) {
|
||||||
if (testRecipe.matches(crafting, world)) {
|
if (testRecipe.matches(crafting, world)) {
|
||||||
return testRecipe;
|
return testRecipe;
|
||||||
|
@ -309,7 +317,19 @@ public class TileAutoCraftingTable extends TilePowerAcceptor
|
||||||
charge(10);
|
charge(10);
|
||||||
|
|
||||||
InventoryCrafting craftMatrix = getCraftingInventory();
|
InventoryCrafting craftMatrix = getCraftingInventory();
|
||||||
|
//Only search the recipe tree when the inv changes
|
||||||
|
if(inventory.hasChanged){
|
||||||
currentRecipe = findMatchingRecipe(craftMatrix);
|
currentRecipe = findMatchingRecipe(craftMatrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Checks that the current recipe is still valid, if not it will check for a valid recipe next tick.
|
||||||
|
if(currentRecipe != null){
|
||||||
|
if(!currentRecipe.matches(craftMatrix, world)){
|
||||||
|
currentRecipe = null;
|
||||||
|
inventory.hasChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (currentRecipe != null) {
|
if (currentRecipe != null) {
|
||||||
if (world.getTotalWorldTime() % 2 == 0) {
|
if (world.getTotalWorldTime() % 2 == 0) {
|
||||||
Optional<InventoryCrafting> balanceResult = balanceRecipe(craftMatrix);
|
Optional<InventoryCrafting> balanceResult = balanceRecipe(craftMatrix);
|
||||||
|
@ -374,6 +394,7 @@ public class TileAutoCraftingTable extends TilePowerAcceptor
|
||||||
|
|
||||||
public void setLockedInt(int lockedInt) {
|
public void setLockedInt(int lockedInt) {
|
||||||
locked = lockedInt == 1;
|
locked = lockedInt == 1;
|
||||||
|
inventory.hasChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -412,6 +433,7 @@ public class TileAutoCraftingTable extends TilePowerAcceptor
|
||||||
if (tag.hasKey("locked")) {
|
if (tag.hasKey("locked")) {
|
||||||
locked = tag.getBoolean("locked");
|
locked = tag.getBoolean("locked");
|
||||||
}
|
}
|
||||||
|
inventory.hasChanged = true;
|
||||||
super.readFromNBT(tag);
|
super.readFromNBT(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue