Fixed problems relating to Crafting Upgrade + Interface now supports Crafting Upgrade

This commit is contained in:
Raoul Van den Berge
2016-09-01 22:07:05 +02:00
parent 17bf6bff74
commit 29a309b202
6 changed files with 32 additions and 82 deletions

View File

@@ -7,6 +7,7 @@ import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.common.network.ByteBufUtils;
import refinedstorage.api.autocrafting.ICraftingPattern;
import refinedstorage.api.autocrafting.task.ICraftingTask;
import refinedstorage.api.storage.CompareUtils;
/**
@@ -41,6 +42,26 @@ public final class NetworkUtils {
return stack.getFluid().hashCode() * (stack.tag != null ? stack.tag.hashCode() : 1);
}
public static void scheduleCraftingTaskIfUnscheduled(INetworkMaster network, ItemStack stack, int toSchedule, int compare) {
int alreadyScheduled = 0;
for (ICraftingTask task : network.getCraftingTasks()) {
for (ItemStack output : task.getPattern().getOutputs()) {
if (CompareUtils.compareStack(output, stack, compare)) {
alreadyScheduled++;
}
}
}
for (int i = 0; i < toSchedule - alreadyScheduled; ++i) {
ICraftingPattern pattern = network.getPattern(stack, compare);
if (pattern != null) {
network.addCraftingTask(network.createCraftingTask(pattern));
}
}
}
public static void writeItemStack(ByteBuf buf, INetworkMaster network, ItemStack stack) {
buf.writeInt(Item.getIdFromItem(stack.getItem()));
buf.writeInt(stack.stackSize);

View File

@@ -1,58 +0,0 @@
package refinedstorage.apiimpl.autocrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import refinedstorage.api.autocrafting.ICraftingPattern;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.storage.CompareUtils;
/**
* @TODO: Rework this!
*/
public class CraftingTaskScheduler {
private static final String NBT_SCHEDULED = "CraftingTaskScheduled";
private TileEntity tile;
private ItemStack scheduledItem;
public CraftingTaskScheduler(TileEntity tile) {
this.tile = tile;
}
public boolean canSchedule(int compare, ItemStack item) {
return scheduledItem == null || !CompareUtils.compareStack(scheduledItem, item, compare);
}
public void schedule(INetworkMaster network, int compare, ItemStack item) {
ICraftingPattern pattern = network.getPattern(item, compare);
if (pattern != null) {
scheduledItem = item;
network.addCraftingTask(network.createCraftingTask(pattern));
tile.markDirty();
}
}
public void resetSchedule() {
scheduledItem = null;
tile.markDirty();
}
public void write(NBTTagCompound tag) {
if (scheduledItem != null) {
tag.setTag(NBT_SCHEDULED, scheduledItem.serializeNBT());
} else {
tag.removeTag(NBT_SCHEDULED);
}
}
public void read(NBTTagCompound tag) {
if (tag.hasKey(NBT_SCHEDULED)) {
scheduledItem = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(NBT_SCHEDULED));
}
}
}

View File

@@ -16,7 +16,7 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler;
import refinedstorage.api.network.NetworkUtils;
import refinedstorage.container.slot.SlotSpecimen;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerFluid;
@@ -52,8 +52,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
private IBlockState block;
private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this);
public TileConstructor() {
dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(TYPE);
@@ -79,7 +77,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
ItemStack took = network.extractItem(itemFilters.getStackInSlot(0), 1, compare);
if (took != null) {
scheduler.resetSchedule();
worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2);
// From ItemBlock.onItemUse
SoundType blockSound = block.getBlock().getSoundType();
@@ -87,9 +84,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
ItemStack craft = itemFilters.getStackInSlot(0);
if (scheduler.canSchedule(compare, craft)) {
scheduler.schedule(network, compare, craft);
}
NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, craft, 1, compare);
}
}
} else if (type == IType.FLUIDS) {
@@ -147,8 +142,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
readItems(itemFilters, 0, tag);
readItems(upgrades, 1, tag);
readItems(fluidFilters, 2, tag);
scheduler.read(tag);
}
@Override
@@ -162,8 +155,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
writeItems(upgrades, 1, tag);
writeItems(fluidFilters, 2, tag);
scheduler.write(tag);
return tag;
}

View File

@@ -12,7 +12,7 @@ import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorage;
import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler;
import refinedstorage.api.network.NetworkUtils;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.inventory.ItemHandlerUpgrade;
@@ -36,8 +36,6 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
private int compare = 0;
private int type = IType.ITEMS;
private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this);
public TileExporter() {
dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(TYPE);
@@ -69,17 +67,13 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
ItemStack took = network.extractItem(slot, size, compare);
if (took != null) {
scheduler.resetSchedule();
ItemStack remainder = ItemHandlerHelper.insertItem(handler, took, false);
if (remainder != null) {
network.insertItem(remainder, remainder.stackSize, false);
}
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
if (scheduler.canSchedule(compare, slot)) {
scheduler.schedule(network, compare, slot);
}
NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, slot, 1, compare);
}
}
}
@@ -133,8 +127,6 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
readItems(itemFilters, 0, tag);
readItems(upgrades, 1, tag);
readItems(fluidFilters, 2, tag);
scheduler.read(tag);
}
@Override
@@ -148,8 +140,6 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
writeItems(upgrades, 1, tag);
writeItems(fluidFilters, 2, tag);
scheduler.write(tag);
return tag;
}

View File

@@ -8,6 +8,7 @@ import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import refinedstorage.RefinedStorage;
import refinedstorage.api.network.NetworkUtils;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemUpgrade;
@@ -22,7 +23,7 @@ public class TileInterface extends TileNode implements IComparable {
private ItemHandlerBasic importItems = new ItemHandlerBasic(9, this);
private ItemHandlerBasic exportSpecimenItems = new ItemHandlerBasic(9, this);
private ItemHandlerBasic exportItems = new ItemHandlerBasic(9, this);
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK);
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK, ItemUpgrade.TYPE_CRAFTING);
private int compare = 0;
@@ -79,6 +80,8 @@ public class TileInterface extends TileNode implements IComparable {
} else {
exportItems.getStackInSlot(i).stackSize += result.stackSize;
}
} else {
NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, wanted, delta, compare);
}
} else if (delta < 0) {
ItemStack remainder = network.insertItem(got, Math.abs(delta), false);