Fixed problems relating to Crafting Upgrade + Interface now supports Crafting Upgrade
This commit is contained in:
@@ -4,6 +4,9 @@
|
|||||||
- Implemented multithreaded autocrafting (raoulvdberge)
|
- Implemented multithreaded autocrafting (raoulvdberge)
|
||||||
- Processing patterns now hold their items back for pushing until all the required items are gathered from the system (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)
|
- 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
|
### 0.9.4
|
||||||
- Little fixes in German translation (ThexXTURBOXx)
|
- Little fixes in German translation (ThexXTURBOXx)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import net.minecraftforge.fluids.FluidRegistry;
|
|||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||||
|
import refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||||
import refinedstorage.api.storage.CompareUtils;
|
import refinedstorage.api.storage.CompareUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,6 +42,26 @@ public final class NetworkUtils {
|
|||||||
return stack.getFluid().hashCode() * (stack.tag != null ? stack.tag.hashCode() : 1);
|
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) {
|
public static void writeItemStack(ByteBuf buf, INetworkMaster network, ItemStack stack) {
|
||||||
buf.writeInt(Item.getIdFromItem(stack.getItem()));
|
buf.writeInt(Item.getIdFromItem(stack.getItem()));
|
||||||
buf.writeInt(stack.stackSize);
|
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.CapabilityItemHandler;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler;
|
import refinedstorage.api.network.NetworkUtils;
|
||||||
import refinedstorage.container.slot.SlotSpecimen;
|
import refinedstorage.container.slot.SlotSpecimen;
|
||||||
import refinedstorage.inventory.ItemHandlerBasic;
|
import refinedstorage.inventory.ItemHandlerBasic;
|
||||||
import refinedstorage.inventory.ItemHandlerFluid;
|
import refinedstorage.inventory.ItemHandlerFluid;
|
||||||
@@ -52,8 +52,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
|
|||||||
|
|
||||||
private IBlockState block;
|
private IBlockState block;
|
||||||
|
|
||||||
private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this);
|
|
||||||
|
|
||||||
public TileConstructor() {
|
public TileConstructor() {
|
||||||
dataManager.addWatchedParameter(COMPARE);
|
dataManager.addWatchedParameter(COMPARE);
|
||||||
dataManager.addWatchedParameter(TYPE);
|
dataManager.addWatchedParameter(TYPE);
|
||||||
@@ -79,7 +77,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
|
|||||||
ItemStack took = network.extractItem(itemFilters.getStackInSlot(0), 1, compare);
|
ItemStack took = network.extractItem(itemFilters.getStackInSlot(0), 1, compare);
|
||||||
|
|
||||||
if (took != null) {
|
if (took != null) {
|
||||||
scheduler.resetSchedule();
|
|
||||||
worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2);
|
worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2);
|
||||||
// From ItemBlock.onItemUse
|
// From ItemBlock.onItemUse
|
||||||
SoundType blockSound = block.getBlock().getSoundType();
|
SoundType blockSound = block.getBlock().getSoundType();
|
||||||
@@ -87,9 +84,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
|
|||||||
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
|
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
|
||||||
ItemStack craft = itemFilters.getStackInSlot(0);
|
ItemStack craft = itemFilters.getStackInSlot(0);
|
||||||
|
|
||||||
if (scheduler.canSchedule(compare, craft)) {
|
NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, craft, 1, compare);
|
||||||
scheduler.schedule(network, compare, craft);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (type == IType.FLUIDS) {
|
} else if (type == IType.FLUIDS) {
|
||||||
@@ -147,8 +142,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
|
|||||||
readItems(itemFilters, 0, tag);
|
readItems(itemFilters, 0, tag);
|
||||||
readItems(upgrades, 1, tag);
|
readItems(upgrades, 1, tag);
|
||||||
readItems(fluidFilters, 2, tag);
|
readItems(fluidFilters, 2, tag);
|
||||||
|
|
||||||
scheduler.read(tag);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -162,8 +155,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
|
|||||||
writeItems(upgrades, 1, tag);
|
writeItems(upgrades, 1, tag);
|
||||||
writeItems(fluidFilters, 2, tag);
|
writeItems(fluidFilters, 2, tag);
|
||||||
|
|
||||||
scheduler.write(tag);
|
|
||||||
|
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import net.minecraftforge.items.CapabilityItemHandler;
|
|||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler;
|
import refinedstorage.api.network.NetworkUtils;
|
||||||
import refinedstorage.inventory.ItemHandlerBasic;
|
import refinedstorage.inventory.ItemHandlerBasic;
|
||||||
import refinedstorage.inventory.ItemHandlerFluid;
|
import refinedstorage.inventory.ItemHandlerFluid;
|
||||||
import refinedstorage.inventory.ItemHandlerUpgrade;
|
import refinedstorage.inventory.ItemHandlerUpgrade;
|
||||||
@@ -36,8 +36,6 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
|
|||||||
private int compare = 0;
|
private int compare = 0;
|
||||||
private int type = IType.ITEMS;
|
private int type = IType.ITEMS;
|
||||||
|
|
||||||
private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this);
|
|
||||||
|
|
||||||
public TileExporter() {
|
public TileExporter() {
|
||||||
dataManager.addWatchedParameter(COMPARE);
|
dataManager.addWatchedParameter(COMPARE);
|
||||||
dataManager.addWatchedParameter(TYPE);
|
dataManager.addWatchedParameter(TYPE);
|
||||||
@@ -69,17 +67,13 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
|
|||||||
ItemStack took = network.extractItem(slot, size, compare);
|
ItemStack took = network.extractItem(slot, size, compare);
|
||||||
|
|
||||||
if (took != null) {
|
if (took != null) {
|
||||||
scheduler.resetSchedule();
|
|
||||||
|
|
||||||
ItemStack remainder = ItemHandlerHelper.insertItem(handler, took, false);
|
ItemStack remainder = ItemHandlerHelper.insertItem(handler, took, false);
|
||||||
|
|
||||||
if (remainder != null) {
|
if (remainder != null) {
|
||||||
network.insertItem(remainder, remainder.stackSize, false);
|
network.insertItem(remainder, remainder.stackSize, false);
|
||||||
}
|
}
|
||||||
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
|
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
|
||||||
if (scheduler.canSchedule(compare, slot)) {
|
NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, slot, 1, compare);
|
||||||
scheduler.schedule(network, compare, slot);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -133,8 +127,6 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
|
|||||||
readItems(itemFilters, 0, tag);
|
readItems(itemFilters, 0, tag);
|
||||||
readItems(upgrades, 1, tag);
|
readItems(upgrades, 1, tag);
|
||||||
readItems(fluidFilters, 2, tag);
|
readItems(fluidFilters, 2, tag);
|
||||||
|
|
||||||
scheduler.read(tag);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -148,8 +140,6 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
|
|||||||
writeItems(upgrades, 1, tag);
|
writeItems(upgrades, 1, tag);
|
||||||
writeItems(fluidFilters, 2, tag);
|
writeItems(fluidFilters, 2, tag);
|
||||||
|
|
||||||
scheduler.write(tag);
|
|
||||||
|
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import net.minecraftforge.items.CapabilityItemHandler;
|
|||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
|
import refinedstorage.api.network.NetworkUtils;
|
||||||
import refinedstorage.inventory.ItemHandlerBasic;
|
import refinedstorage.inventory.ItemHandlerBasic;
|
||||||
import refinedstorage.inventory.ItemHandlerUpgrade;
|
import refinedstorage.inventory.ItemHandlerUpgrade;
|
||||||
import refinedstorage.item.ItemUpgrade;
|
import refinedstorage.item.ItemUpgrade;
|
||||||
@@ -22,7 +23,7 @@ public class TileInterface extends TileNode implements IComparable {
|
|||||||
private ItemHandlerBasic importItems = new ItemHandlerBasic(9, this);
|
private ItemHandlerBasic importItems = new ItemHandlerBasic(9, this);
|
||||||
private ItemHandlerBasic exportSpecimenItems = new ItemHandlerBasic(9, this);
|
private ItemHandlerBasic exportSpecimenItems = new ItemHandlerBasic(9, this);
|
||||||
private ItemHandlerBasic exportItems = 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;
|
private int compare = 0;
|
||||||
|
|
||||||
@@ -79,6 +80,8 @@ public class TileInterface extends TileNode implements IComparable {
|
|||||||
} else {
|
} else {
|
||||||
exportItems.getStackInSlot(i).stackSize += result.stackSize;
|
exportItems.getStackInSlot(i).stackSize += result.stackSize;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, wanted, delta, compare);
|
||||||
}
|
}
|
||||||
} else if (delta < 0) {
|
} else if (delta < 0) {
|
||||||
ItemStack remainder = network.insertItem(got, Math.abs(delta), false);
|
ItemStack remainder = network.insertItem(got, Math.abs(delta), false);
|
||||||
|
|||||||
Reference in New Issue
Block a user