This commit is contained in:
Raoul Van den Berge
2016-06-04 12:11:17 +02:00
parent a6dd56bb0e
commit 3f78747744
5 changed files with 3 additions and 396 deletions

View File

@@ -25,19 +25,15 @@ public class SoldererRegistry {
/** /**
* @return An immutable recipe list * @return An immutable recipe list
*/ */
public ImmutableList<ISoldererRecipe> getRecipes() { public static ImmutableList<ISoldererRecipe> getRecipes() {
return ImmutableList.copyOf(recipes); return ImmutableList.copyOf(recipes);
} }
/** /**
* @param items The item handler that has 3 slots * @param items The item handler, where slots 0 - 2 are the row slots
* @return The recipe * @return The recipe
*/ */
public static ISoldererRecipe getRecipe(IItemHandler items) { public static ISoldererRecipe getRecipe(IItemHandler items) {
if (items.getSlots() != 3) {
throw new IllegalArgumentException("Expected a item handler with 3 slots, got " + items.getSlots() + " slots");
}
for (ISoldererRecipe recipe : recipes) { for (ISoldererRecipe recipe : recipes) {
boolean found = true; boolean found = true;

View File

@@ -11,7 +11,7 @@ public class SoldererRecipeMaker {
public static List<SoldererRecipeWrapper> getRecipes() { public static List<SoldererRecipeWrapper> getRecipes() {
List<SoldererRecipeWrapper> recipes = new ArrayList<SoldererRecipeWrapper>(); List<SoldererRecipeWrapper> recipes = new ArrayList<SoldererRecipeWrapper>();
for (ISoldererRecipe recipe : SoldererRegistry.recipes) { for (ISoldererRecipe recipe : SoldererRegistry.getRecipes()) {
List<ItemStack> inputs = new ArrayList<ItemStack>(); List<ItemStack> inputs = new ArrayList<ItemStack>();
inputs.add(recipe.getRow(0)); inputs.add(recipe.getRow(0));

View File

@@ -1,179 +0,0 @@
package refinedstorage.tile.autocrafting.task;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.common.util.Constants;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.controller.TileController;
import java.util.ArrayList;
import java.util.List;
public class BasicCraftingTask implements ICraftingTask {
public static final int ID = 0;
public static final String NBT_SATISFIED = "Satisfied";
public static final String NBT_CHECKED = "Checked";
public static final String NBT_CHILD_TASKS = "ChildTasks";
public static final String NBT_TOOK = "Took";
private CraftingPattern pattern;
private boolean satisfied[];
private boolean checked[];
private boolean childTasks[];
private List<ItemStack> itemsTook = new ArrayList<ItemStack>();
private boolean updatedOnce;
public BasicCraftingTask(CraftingPattern pattern) {
this.pattern = pattern;
this.satisfied = new boolean[pattern.getInputs().length];
this.checked = new boolean[pattern.getInputs().length];
this.childTasks = new boolean[pattern.getInputs().length];
}
public BasicCraftingTask(NBTTagCompound tag, CraftingPattern pattern) {
this.pattern = pattern;
this.satisfied = RefinedStorageUtils.readBooleanArray(tag, NBT_SATISFIED);
this.checked = RefinedStorageUtils.readBooleanArray(tag, NBT_CHECKED);
this.childTasks = RefinedStorageUtils.readBooleanArray(tag, NBT_CHILD_TASKS);
NBTTagList tookList = tag.getTagList(NBT_TOOK, Constants.NBT.TAG_COMPOUND);
for (int i = 0; i < tookList.tagCount(); ++i) {
itemsTook.add(ItemStack.loadItemStackFromNBT(tookList.getCompoundTagAt(i)));
}
}
public CraftingPattern getPattern() {
return pattern;
}
public boolean update(TileController controller) {
this.updatedOnce = true;
boolean done = true;
for (int i = 0; i < pattern.getInputs().length; ++i) {
checked[i] = true;
ItemStack input = pattern.getInputs()[i];
if (!satisfied[i]) {
done = false;
ItemStack took = controller.take(input, 1);
if (took != null) {
itemsTook.add(took);
satisfied[i] = true;
} else if (!childTasks[i]) {
CraftingPattern pattern = controller.getPattern(input);
if (pattern != null) {
controller.addCraftingTask(controller.createCraftingTask(pattern));
childTasks[i] = true;
}
break;
} else {
break;
}
}
}
return done;
}
@Override
public void onDone(TileController controller) {
for (ItemStack output : pattern.getOutputs()) {
controller.push(output);
}
if (pattern.getByproducts() != null) {
for (ItemStack byproduct : pattern.getByproducts()) {
controller.push(byproduct);
}
}
}
@Override
public void onCancelled(TileController controller) {
for (ItemStack took : itemsTook) {
controller.push(took);
}
}
@Override
public void writeToNBT(NBTTagCompound tag) {
NBTTagCompound patternTag = new NBTTagCompound();
pattern.writeToNBT(patternTag);
tag.setTag(CraftingPattern.NBT, patternTag);
RefinedStorageUtils.writeBooleanArray(tag, NBT_SATISFIED, satisfied);
RefinedStorageUtils.writeBooleanArray(tag, NBT_CHECKED, checked);
RefinedStorageUtils.writeBooleanArray(tag, NBT_CHILD_TASKS, childTasks);
NBTTagList tookList = new NBTTagList();
for (ItemStack took : itemsTook) {
tookList.appendTag(took.serializeNBT());
}
tag.setTag(NBT_TOOK, tookList);
tag.setInteger("Type", ID);
}
@Override
public String getInfo() {
if (!updatedOnce) {
return "{not_started_yet}";
}
StringBuilder builder = new StringBuilder();
builder.append(TextFormatting.YELLOW).append("{missing_items}").append(TextFormatting.RESET).append("\n");
int missingItems = 0;
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (checked[i] && !satisfied[i] && !childTasks[i]) {
builder.append("- ").append(input.getDisplayName()).append("\n");
missingItems++;
}
}
if (missingItems == 0) {
builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n");
}
builder.append(TextFormatting.YELLOW).append("{items_crafting}").append(TextFormatting.RESET).append("\n");
int itemsCrafting = 0;
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (!satisfied[i] && childTasks[i]) {
builder.append("- ").append(input.getUnlocalizedName()).append(".name").append("\n");
itemsCrafting++;
}
}
if (itemsCrafting == 0) {
builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n");
}
return builder.toString();
}
}

View File

@@ -1,19 +0,0 @@
package refinedstorage.tile.autocrafting.task;
import net.minecraft.nbt.NBTTagCompound;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.controller.TileController;
public interface ICraftingTask {
CraftingPattern getPattern();
boolean update(TileController controller);
void onDone(TileController controller);
void onCancelled(TileController controller);
void writeToNBT(NBTTagCompound tag);
String getInfo();
}

View File

@@ -1,191 +0,0 @@
package refinedstorage.tile.autocrafting.task;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.autocrafting.TileCrafter;
import refinedstorage.tile.controller.TileController;
public class ProcessingCraftingTask implements ICraftingTask {
public static final int ID = 1;
public static final String NBT_INSERTED = "Inserted";
public static final String NBT_CHILD_TASKS = "ChildTasks";
public static final String NBT_SATISFIED = "Satisfied";
private CraftingPattern pattern;
private boolean inserted[];
private boolean childTasks[];
private boolean satisfied[];
private boolean updatedOnce;
public ProcessingCraftingTask(CraftingPattern pattern) {
this.pattern = pattern;
this.inserted = new boolean[pattern.getInputs().length];
this.childTasks = new boolean[pattern.getInputs().length];
this.satisfied = new boolean[pattern.getOutputs().length];
}
public ProcessingCraftingTask(NBTTagCompound tag, CraftingPattern pattern) {
this.pattern = pattern;
this.inserted = RefinedStorageUtils.readBooleanArray(tag, NBT_INSERTED);
this.childTasks = RefinedStorageUtils.readBooleanArray(tag, NBT_CHILD_TASKS);
this.satisfied = RefinedStorageUtils.readBooleanArray(tag, NBT_SATISFIED);
}
@Override
public CraftingPattern getPattern() {
return pattern;
}
@Override
public boolean update(TileController controller) {
this.updatedOnce = true;
TileCrafter crafter = pattern.getCrafter(controller.getWorld());
IItemHandler handler = RefinedStorageUtils.getItemHandler(crafter.getFacingTile(), crafter.getDirection().getOpposite());
if (handler != null) {
for (int i = 0; i < inserted.length; ++i) {
if (!inserted[i]) {
ItemStack input = pattern.getInputs()[i];
ItemStack took = controller.take(input, 1);
if (took != null) {
if (ItemHandlerHelper.insertItem(handler, took, true) == null) {
ItemHandlerHelper.insertItem(handler, took, false);
inserted[i] = true;
} else {
controller.push(took);
}
} else if (!childTasks[i]) {
CraftingPattern pattern = controller.getPattern(input);
if (pattern != null) {
childTasks[i] = true;
controller.addCraftingTask(controller.createCraftingTask(pattern));
break;
}
} else {
break;
}
}
}
} else {
return true;
}
for (int i = 0; i < satisfied.length; ++i) {
if (!satisfied[i]) {
return false;
}
}
return true;
}
public void onPushed(ItemStack inserted) {
for (int i = 0; i < pattern.getOutputs().length; ++i) {
if (!satisfied[i] && RefinedStorageUtils.compareStackNoQuantity(inserted, pattern.getOutputs()[i])) {
satisfied[i] = true;
return;
}
}
}
@Override
public void onDone(TileController controller) {
// NO OP
}
@Override
public void onCancelled(TileController controller) {
// NO OP
}
@Override
public void writeToNBT(NBTTagCompound tag) {
NBTTagCompound patternTag = new NBTTagCompound();
pattern.writeToNBT(patternTag);
tag.setTag(CraftingPattern.NBT, patternTag);
RefinedStorageUtils.writeBooleanArray(tag, NBT_INSERTED, inserted);
RefinedStorageUtils.writeBooleanArray(tag, NBT_CHILD_TASKS, childTasks);
RefinedStorageUtils.writeBooleanArray(tag, NBT_SATISFIED, satisfied);
tag.setInteger("Type", ID);
}
@Override
public String getInfo() {
if (!updatedOnce) {
return "{not_started_yet}";
}
StringBuilder builder = new StringBuilder();
builder.append(TextFormatting.YELLOW).append("{missing_items}").append(TextFormatting.RESET).append("\n");
int missingItems = 0;
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (!inserted[i] && !childTasks[i]) {
builder.append("- ").append(input.getDisplayName()).append("\n");
missingItems++;
}
}
if (missingItems == 0) {
builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n");
}
builder.append(TextFormatting.YELLOW).append("{items_crafting}").append(TextFormatting.RESET).append("\n");
int itemsCrafting = 0;
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (!inserted[i] && childTasks[i]) {
builder.append("- ").append(input.getUnlocalizedName()).append(".name").append("\n");
itemsCrafting++;
}
}
if (itemsCrafting == 0) {
builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n");
}
builder.append(TextFormatting.YELLOW).append("{items_processing}").append(TextFormatting.RESET).append("\n");
int itemsProcessing = 0;
for (int i = 0; i < pattern.getInputs().length; ++i) {
ItemStack input = pattern.getInputs()[i];
if (inserted[i]) {
builder.append("- ").append(input.getDisplayName()).append("\n");
itemsProcessing++;
}
}
if (itemsProcessing == 0) {
builder.append(TextFormatting.GRAY).append(TextFormatting.ITALIC).append("{none}").append(TextFormatting.RESET).append("\n");
}
return builder.toString();
}
}