Fixed problems relating to Crafting Upgrade + Interface now supports Crafting Upgrade
This commit is contained in:
@@ -4,6 +4,9 @@
|
||||
- Implemented multithreaded autocrafting (raoulvdberge)
|
||||
- Processing patterns now hold their items back for pushing until all the required items are gathered from the system (raoulvdberge)
|
||||
- Fixed item and fluid storage stored count having incorrect values at times (raoulvdberge)
|
||||
- Reworked Crafting Monitor GUI (raoulvdberge)
|
||||
- Fixed problems relating to Crafting Upgrade (scheduling a task wrongly, blocking other tasks, etc) (raoulvdberge)
|
||||
- Interface now supports Crafting Upgrade (raoulvdberge)
|
||||
|
||||
### 0.9.4
|
||||
- Little fixes in German translation (ThexXTURBOXx)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user