diff --git a/src/main/java/refinedstorage/RSUtils.java b/src/main/java/refinedstorage/RSUtils.java new file mode 100755 index 000000000..f7b0708b1 --- /dev/null +++ b/src/main/java/refinedstorage/RSUtils.java @@ -0,0 +1,45 @@ +package refinedstorage; + +import io.netty.buffer.ByteBuf; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import refinedstorage.api.RSAPI; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; +import refinedstorage.apiimpl.storage.item.ItemStorageNBT; + +import java.util.function.Function; + +public final class RSUtils { + public static void writeItemStack(ByteBuf buf, INetworkMaster network, ItemStack stack) { + buf.writeInt(Item.getIdFromItem(stack.getItem())); + buf.writeInt(stack.stackSize); + buf.writeInt(stack.getItemDamage()); + ByteBufUtils.writeTag(buf, stack.getTagCompound()); + buf.writeInt(RSAPI.instance().getItemStackHashCode(stack)); + buf.writeBoolean(network.hasPattern(stack)); + } + + public static void writeFluidStack(ByteBuf buf, FluidStack stack) { + buf.writeInt(RSAPI.instance().getFluidStackHashCode(stack)); + ByteBufUtils.writeUTF8String(buf, FluidRegistry.getFluidName(stack.getFluid())); + buf.writeInt(stack.amount); + ByteBufUtils.writeTag(buf, stack.tag); + } + + public static void constructFromDrive(ItemStack disk, int slot, ItemStorageNBT[] itemStorages, FluidStorageNBT[] fluidStorages, Function itemStorageSupplier, Function fluidStorageNBTSupplier) { + if (disk == null) { + itemStorages[slot] = null; + fluidStorages[slot] = null; + } else { + if (disk.getItem() == RSItems.STORAGE_DISK) { + itemStorages[slot] = itemStorageSupplier.apply(disk); + } else if (disk.getItem() == RSItems.FLUID_STORAGE_DISK) { + fluidStorages[slot] = fluidStorageNBTSupplier.apply(disk); + } + } + } +} diff --git a/src/main/java/refinedstorage/api/IAPI.java b/src/main/java/refinedstorage/api/IAPI.java index 3cf834c9d..cf5eee741 100755 --- a/src/main/java/refinedstorage/api/IAPI.java +++ b/src/main/java/refinedstorage/api/IAPI.java @@ -1,5 +1,7 @@ package refinedstorage.api; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry; import refinedstorage.api.autocrafting.registry.ICraftingTaskRegistry; import refinedstorage.api.solderer.ISoldererRegistry; @@ -41,4 +43,16 @@ public interface IAPI { */ @Nonnull IItemStackList createItemStackList(); + + /** + * @param stack the stack + * @return a hashcode for the given stack + */ + int getItemStackHashCode(ItemStack stack); + + /** + * @param stack the stack + * @return a hashcode for the given stack + */ + int getFluidStackHashCode(FluidStack stack); } diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index 71d2b9632..929ead866 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -6,12 +6,14 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; +import refinedstorage.api.RSAPI; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.task.ICraftingTask; import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.api.storage.fluid.IGroupedFluidStorage; import refinedstorage.api.storage.item.IGroupedItemStorage; +import refinedstorage.api.util.IComparer; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -122,6 +124,68 @@ public interface INetworkMaster { @Nullable ICraftingPattern getPattern(ItemStack pattern, int flags); + /** + * Returns a crafting pattern for an item stack. + * This returns a single crafting pattern, as opposed to {@link INetworkMaster#getPatterns(ItemStack, int)}. + * Internally, this makes a selection out of the available patterns. + * It makes this selection based on the item count of the pattern outputs in the system. + * + * @param pattern the stack to get a pattern for + * @return the pattern, or null if the pattern is not found + */ + default ICraftingPattern getPattern(ItemStack pattern) { + return getPattern(pattern, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT); + } + + /** + * Returns if there is a pattern with a given stack as output. + * + * @param stack the stack + * @return true if there is a pattern, false otherwise + */ + default boolean hasPattern(ItemStack stack) { + return getPattern(stack) != null; + } + + /** + * Creates a crafting task. + * + * @param stack the stack to create a task for + * @param pattern the pattern + * @param quantity the quantity + * @return the crafting task + */ + default ICraftingTask createCraftingTask(@Nullable ItemStack stack, ICraftingPattern pattern, int quantity) { + return RSAPI.instance().getCraftingTaskRegistry().getFactory(pattern.getId()).create(getNetworkWorld(), this, stack, pattern, quantity, null); + } + + /** + * Schedules a crafting task if the task isn't scheduled yet. + * + * @param stack the stack + * @param toSchedule the amount of tasks to schedule + * @param compare the compare value to find patterns + */ + default void scheduleCraftingTaskIfUnscheduled(ItemStack stack, int toSchedule, int compare) { + int alreadyScheduled = 0; + + for (ICraftingTask task : getCraftingTasks()) { + for (ItemStack output : task.getPattern().getOutputs()) { + if (RSAPI.instance().getComparer().isEqual(output, stack, compare)) { + alreadyScheduled++; + } + } + } + + for (int i = 0; i < toSchedule - alreadyScheduled; ++i) { + ICraftingPattern pattern = getPattern(stack, compare); + + if (pattern != null) { + addCraftingTask(createCraftingTask(stack, pattern, 1)); + } + } + } + /** * Sends a grid update packet with all the items to all clients that are watching a grid connected to this network. */ @@ -180,6 +244,17 @@ public interface INetworkMaster { @Nullable ItemStack extractItem(@Nonnull ItemStack stack, int size, int flags); + /** + * Extracts an item from this network. + * + * @param stack the prototype of the stack to extract, do NOT modify + * @param size the amount of that prototype that has to be extracted + * @return null if we didn't extract anything, or a stack with the result + */ + default ItemStack extractItem(ItemStack stack, int size) { + return extractItem(stack, size, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT); + } + /** * Inserts a fluid in this network. * @@ -202,6 +277,17 @@ public interface INetworkMaster { @Nullable FluidStack extractFluid(@Nonnull FluidStack stack, int size, int flags); + /** + * Extracts a fluid from this network. + * + * @param stack the prototype of the stack to extract, do NOT modify + * @param size the amount of that prototype that has to be extracted + * @return null if we didn't extract anything, or a stack with the result + */ + default FluidStack extractFluid(FluidStack stack, int size) { + return extractFluid(stack, size, IComparer.COMPARE_NBT); + } + /** * @return the world where this network is in */ diff --git a/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java b/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java index fd3c36d6e..b7b80f36e 100755 --- a/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java +++ b/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java @@ -2,6 +2,7 @@ package refinedstorage.api.network; import net.minecraft.util.math.BlockPos; +import javax.annotation.Nullable; import java.util.List; /** @@ -11,10 +12,17 @@ public interface INetworkNodeGraph { /** * Rebuilds the node graph. * - * @param start the starting position to start looking for nodes + * @param start the starting position to start looking for nodes, or null to start at network begin position * @param notify true to notify the nodes of a connection change, false to not notify */ - void rebuild(BlockPos start, boolean notify); + void rebuild(@Nullable BlockPos start, boolean notify); + + /** + * Rebuilds the network graph. + */ + default void rebuild() { + rebuild(null, true); + } /** * @return a list of all connected nodes diff --git a/src/main/java/refinedstorage/api/network/NetworkUtils.java b/src/main/java/refinedstorage/api/network/NetworkUtils.java deleted file mode 100755 index d43b29796..000000000 --- a/src/main/java/refinedstorage/api/network/NetworkUtils.java +++ /dev/null @@ -1,114 +0,0 @@ -package refinedstorage.api.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import refinedstorage.api.RSAPI; -import refinedstorage.api.autocrafting.ICraftingPattern; -import refinedstorage.api.autocrafting.ICraftingPatternContainer; -import refinedstorage.api.autocrafting.ICraftingPatternProvider; -import refinedstorage.api.autocrafting.registry.ICraftingTaskFactory; -import refinedstorage.api.autocrafting.task.ICraftingTask; -import refinedstorage.api.util.IComparer; - -import javax.annotation.Nullable; - -/** - * Utilities for network manipulation. - */ -public final class NetworkUtils { - public static ItemStack extractItem(INetworkMaster network, ItemStack stack, int size) { - return network.extractItem(stack, size, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT); - } - - public static FluidStack extractFluid(INetworkMaster network, FluidStack stack, int size) { - return network.extractFluid(stack, size, IComparer.COMPARE_NBT); - } - - public static ICraftingPattern getPattern(INetworkMaster network, ItemStack stack) { - return network.getPattern(stack, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT); - } - - public static ICraftingTask createCraftingTask(INetworkMaster network, @Nullable ItemStack stack, ICraftingPattern pattern, int quantity) { - return RSAPI.instance().getCraftingTaskRegistry().getFactory(pattern.getId()).create(network.getNetworkWorld(), network, stack, pattern, quantity, null); - } - - public static boolean hasPattern(INetworkMaster network, ItemStack stack) { - return getPattern(network, stack) != null; - } - - public static void rebuildGraph(INetworkMaster network) { - network.getNodeGraph().rebuild(network.getPosition(), true); - } - - public static int getItemStackHashCode(ItemStack stack) { - return stack.getItem().hashCode() * (stack.getItemDamage() + 1) * (stack.hasTagCompound() ? stack.getTagCompound().hashCode() : 1); - } - - public static int getFluidStackHashCode(FluidStack stack) { - 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 (RSAPI.instance().getComparer().isEqual(output, stack, compare)) { - alreadyScheduled++; - } - } - } - - for (int i = 0; i < toSchedule - alreadyScheduled; ++i) { - ICraftingPattern pattern = network.getPattern(stack, compare); - - if (pattern != null) { - network.addCraftingTask(createCraftingTask(network, stack, pattern, 1)); - } - } - } - - public static ICraftingTask readCraftingTask(World world, INetworkMaster network, NBTTagCompound tag) { - ItemStack stack = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(ICraftingTask.NBT_PATTERN_STACK)); - - if (stack != null && stack.getItem() instanceof ICraftingPatternProvider) { - TileEntity container = world.getTileEntity(BlockPos.fromLong(tag.getLong(ICraftingTask.NBT_PATTERN_CONTAINER))); - - if (container instanceof ICraftingPatternContainer) { - ICraftingPattern pattern = ((ICraftingPatternProvider) stack.getItem()).create(world, stack, (ICraftingPatternContainer) container); - - ICraftingTaskFactory factory = RSAPI.instance().getCraftingTaskRegistry().getFactory(tag.getString(ICraftingTask.NBT_PATTERN_ID)); - - if (factory != null) { - return factory.create(world, network, null, pattern, tag.getInteger(ICraftingTask.NBT_QUANTITY), tag); - } - } - } - - return null; - } - - public static void writeItemStack(ByteBuf buf, INetworkMaster network, ItemStack stack) { - buf.writeInt(Item.getIdFromItem(stack.getItem())); - buf.writeInt(stack.stackSize); - buf.writeInt(stack.getItemDamage()); - ByteBufUtils.writeTag(buf, stack.getTagCompound()); - buf.writeInt(getItemStackHashCode(stack)); - buf.writeBoolean(hasPattern(network, stack)); - } - - public static void writeFluidStack(ByteBuf buf, FluidStack stack) { - buf.writeInt(getFluidStackHashCode(stack)); - ByteBufUtils.writeUTF8String(buf, FluidRegistry.getFluidName(stack.getFluid())); - buf.writeInt(stack.amount); - ByteBufUtils.writeTag(buf, stack.tag); - } -} diff --git a/src/main/java/refinedstorage/api/util/IItemStackList.java b/src/main/java/refinedstorage/api/util/IItemStackList.java index 9e7380623..d33bb3687 100755 --- a/src/main/java/refinedstorage/api/util/IItemStackList.java +++ b/src/main/java/refinedstorage/api/util/IItemStackList.java @@ -26,6 +26,17 @@ public interface IItemStackList { */ boolean remove(@Nonnull ItemStack stack, boolean removeIfReachedZero); + /** + * Returns a stack. + * + * @param stack the stack to search for + * @return the stack, or null if no stack was found + */ + @Nullable + default ItemStack get(@Nonnull ItemStack stack) { + return get(stack, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT); + } + /** * Returns a stack. * diff --git a/src/main/java/refinedstorage/apiimpl/API.java b/src/main/java/refinedstorage/apiimpl/API.java index 2957bc66b..09e87682f 100755 --- a/src/main/java/refinedstorage/apiimpl/API.java +++ b/src/main/java/refinedstorage/apiimpl/API.java @@ -1,5 +1,7 @@ package refinedstorage.apiimpl; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; import refinedstorage.api.IAPI; import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry; import refinedstorage.api.autocrafting.registry.ICraftingTaskRegistry; @@ -51,4 +53,14 @@ public class API implements IAPI { public IItemStackList createItemStackList() { return new ItemStackList(); } + + @Override + public int getItemStackHashCode(ItemStack stack) { + return stack.getItem().hashCode() * (stack.getItemDamage() + 1) * (stack.hasTagCompound() ? stack.getTagCompound().hashCode() : 1); + } + + @Override + public int getFluidStackHashCode(FluidStack stack) { + return stack.getFluid().hashCode() * (stack.tag != null ? stack.tag.hashCode() : 1); + } } diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java index 8b320f5ef..e9ca55be6 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/task/CraftingTaskNormal.java @@ -9,8 +9,6 @@ import refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import refinedstorage.api.autocrafting.task.ICraftingTask; import refinedstorage.api.autocrafting.task.IProcessable; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.NetworkUtils; -import refinedstorage.api.util.IComparer; import refinedstorage.api.util.IItemStackList; import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementRoot; import refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementToTake; @@ -56,13 +54,13 @@ public class CraftingTaskNormal implements ICraftingTask { } for (ItemStack input : pattern.getInputs()) { - ItemStack inputInNetwork = list.get(input, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT); + ItemStack inputInNetwork = list.get(input); if (inputInNetwork == null || inputInNetwork.stackSize == 0) { - if (extras.get(input, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT) != null) { + if (extras.get(input) != null) { decrOrRemoveExtras(input); } else { - ICraftingPattern inputPattern = NetworkUtils.getPattern(network, input); + ICraftingPattern inputPattern = network.getPattern(input); if (inputPattern != null) { for (ItemStack output : inputPattern.getOutputs()) { @@ -105,7 +103,7 @@ public class CraftingTaskNormal implements ICraftingTask { public boolean update() { for (IProcessable processable : toProcess) { if (processable.getPattern().getContainer().getFacingInventory() != null && processable.getStackToInsert() != null) { - ItemStack toInsert = NetworkUtils.extractItem(network, processable.getStackToInsert(), 1); + ItemStack toInsert = network.extractItem(processable.getStackToInsert(), 1); if (ItemHandlerHelper.insertItem(processable.getPattern().getContainer().getFacingInventory(), toInsert, true) == null) { ItemHandlerHelper.insertItem(processable.getPattern().getContainer().getFacingInventory(), toInsert, false); @@ -116,7 +114,7 @@ public class CraftingTaskNormal implements ICraftingTask { } if (!toTake.isEmpty()) { - ItemStack took = NetworkUtils.extractItem(network, toTake.peek(), 1); + ItemStack took = network.extractItem(toTake.peek(), 1); if (took != null) { toTake.pop(); diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java index 9c701eb40..c42ffa4cc 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -26,6 +26,10 @@ public class NetworkNodeGraph implements INetworkNodeGraph { @Override public void rebuild(BlockPos start, boolean notify) { + if (start == null) { + start = controller.getPosition(); + } + if (!controller.canRun()) { if (!nodes.isEmpty()) { disconnectAll(); diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index fb6a1df3a..d97ab3168 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -8,7 +8,6 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import refinedstorage.api.RSAPI; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.apiimpl.storage.fluid.FluidUtils; @@ -43,7 +42,7 @@ public class FluidGridHandler implements IFluidGridHandler { } if (bucket != null) { - bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, stack, Fluid.BUCKET_VOLUME), true); + bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(network.extractFluid(stack, Fluid.BUCKET_VOLUME), true); if (shift) { if (!player.inventory.addItemStackToInventory(bucket.copy())) { diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java index eb3f7e51c..ef85630ac 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java @@ -9,7 +9,6 @@ import refinedstorage.RS; import refinedstorage.api.RSAPI; import refinedstorage.api.autocrafting.task.ICraftingTask; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.apiimpl.autocrafting.task.CraftingTaskNormal; @@ -58,7 +57,7 @@ public class ItemGridHandler implements IItemGridHandler { size = Math.min(size, item.getItem().getItemStackLimit(item)); - ItemStack took = NetworkUtils.extractItem(network, item, size); + ItemStack took = network.extractItem(item, size); if (took != null) { if ((flags & EXTRACT_SHIFT) == EXTRACT_SHIFT) { @@ -123,7 +122,7 @@ public class ItemGridHandler implements IItemGridHandler { ItemStack stack = network.getItemStorage().getList().get(hash); if (stack != null) { - CraftingTaskNormal task = new CraftingTaskNormal(network, stack, NetworkUtils.getPattern(network, stack), quantity); + CraftingTaskNormal task = new CraftingTaskNormal(network, stack, network.getPattern(stack), quantity); task.calculate(); diff --git a/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java b/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java deleted file mode 100755 index ad3193f08..000000000 --- a/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java +++ /dev/null @@ -1,23 +0,0 @@ -package refinedstorage.apiimpl.storage; - -import net.minecraft.item.ItemStack; -import refinedstorage.RSItems; -import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; -import refinedstorage.apiimpl.storage.item.ItemStorageNBT; - -import java.util.function.Function; - -public final class NBTStorage { - public static void constructFromDrive(ItemStack disk, int slot, ItemStorageNBT[] itemStorages, FluidStorageNBT[] fluidStorages, Function itemStorageSupplier, Function fluidStorageNBTSupplier) { - if (disk == null) { - itemStorages[slot] = null; - fluidStorages[slot] = null; - } else { - if (disk.getItem() == RSItems.STORAGE_DISK) { - itemStorages[slot] = itemStorageSupplier.apply(disk); - } else if (disk.getItem() == RSItems.FLUID_STORAGE_DISK) { - fluidStorages[slot] = fluidStorageNBTSupplier.apply(disk); - } - } - } -} diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java index 236001e2c..0f5cae010 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java @@ -8,7 +8,6 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidContainerItem; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.util.IComparer; public final class FluidUtils { @@ -40,7 +39,7 @@ public final class FluidUtils { } public static ItemStack extractItemOrIfBucketLookInFluids(INetworkMaster network, ItemStack stack, int size) { - ItemStack result = NetworkUtils.extractItem(network, stack, size); + ItemStack result = network.extractItem(stack, size); if (result == null && stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) { FluidStack fluidStack = getFluidFromStack(stack, true); @@ -49,9 +48,9 @@ public final class FluidUtils { result = extractBucket(network); if (result != null) { - result.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, fluidStack, Fluid.BUCKET_VOLUME), true); + result.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(network.extractFluid(fluidStack, Fluid.BUCKET_VOLUME), true); } else { - NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, EMPTY_BUCKET, 1, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT); + network.scheduleCraftingTaskIfUnscheduled(EMPTY_BUCKET, 1, IComparer.COMPARE_DAMAGE | IComparer.COMPARE_NBT); } } } @@ -60,6 +59,6 @@ public final class FluidUtils { } public static ItemStack extractBucket(INetworkMaster network) { - return NetworkUtils.extractItem(network, EMPTY_BUCKET, 1); + return network.extractItem(EMPTY_BUCKET, 1); } } diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java index 677abd46c..f5b42d12a 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java @@ -6,7 +6,6 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import refinedstorage.api.RSAPI; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.storage.fluid.IFluidStorage; import refinedstorage.api.storage.fluid.IFluidStorageProvider; import refinedstorage.api.storage.fluid.IGroupedFluidStorage; @@ -99,7 +98,7 @@ public class GroupedFluidStorage implements IGroupedFluidStorage { @Nullable public FluidStack get(int hash) { for (FluidStack stack : this.stacks.values()) { - if (NetworkUtils.getFluidStackHashCode(stack) == hash) { + if (RSAPI.instance().getFluidStackHashCode(stack) == hash) { return stack; } } diff --git a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java index df260003a..89777c570 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java @@ -4,7 +4,6 @@ import net.minecraft.item.ItemStack; import refinedstorage.api.RSAPI; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.storage.item.IGroupedItemStorage; import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.api.storage.item.IItemStorageProvider; @@ -61,7 +60,7 @@ public class GroupedItemStorage implements IGroupedItemStorage { @Override public void remove(@Nonnull ItemStack stack) { - if (list.remove(stack, !NetworkUtils.hasPattern(network, stack))) { + if (list.remove(stack, !network.hasPattern(stack))) { network.sendItemStorageDeltaToClient(stack, -stack.stackSize); } } diff --git a/src/main/java/refinedstorage/apiimpl/util/ItemStackList.java b/src/main/java/refinedstorage/apiimpl/util/ItemStackList.java index 59ef39f8b..c54c37e78 100755 --- a/src/main/java/refinedstorage/apiimpl/util/ItemStackList.java +++ b/src/main/java/refinedstorage/apiimpl/util/ItemStackList.java @@ -5,7 +5,6 @@ import com.google.common.collect.Multimap; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import refinedstorage.api.RSAPI; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.util.IItemStackList; import javax.annotation.Nonnull; @@ -57,7 +56,7 @@ public class ItemStackList implements IItemStackList { @Nullable public ItemStack get(int hash) { for (ItemStack stack : this.stacks.values()) { - if (NetworkUtils.getItemStackHashCode(stack) == hash) { + if (RSAPI.instance().getItemStackHashCode(stack) == hash) { return stack; } } diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index bce4131d1..920a97fba 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -25,7 +25,6 @@ import net.minecraftforge.items.IItemHandler; import refinedstorage.RS; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.tile.TileBase; import refinedstorage.tile.TileCable; import refinedstorage.tile.TileMultipartNode; @@ -281,7 +280,7 @@ public class BlockCable extends BlockCoverable { TileEntity tile = world.getTileEntity(pos.offset(facing)); if (tile instanceof TileNode && ((TileNode) tile).isConnected()) { - NetworkUtils.rebuildGraph(((TileNode) tile).getNetwork()); + ((TileNode) tile).getNetwork().getNodeGraph().rebuild(); break; } @@ -314,7 +313,7 @@ public class BlockCable extends BlockCoverable { super.breakBlock(world, pos, state); if (network != null) { - NetworkUtils.rebuildGraph(network); + network.getNodeGraph().rebuild(); } } diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index a516f1f1c..3b8cf5a58 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -20,7 +20,6 @@ import net.minecraft.world.World; import refinedstorage.RS; import refinedstorage.RSBlocks; import refinedstorage.RSGui; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.item.ItemBlockController; import refinedstorage.tile.TileController; @@ -118,7 +117,7 @@ public class BlockController extends BlockBase { super.neighborChanged(state, world, pos, block); if (!world.isRemote) { - NetworkUtils.rebuildGraph((TileController) world.getTileEntity(pos)); + ((TileController) world.getTileEntity(pos)).getNodeGraph().rebuild(); } } diff --git a/src/main/java/refinedstorage/block/BlockNode.java b/src/main/java/refinedstorage/block/BlockNode.java index aabd9d3b9..69191c25f 100755 --- a/src/main/java/refinedstorage/block/BlockNode.java +++ b/src/main/java/refinedstorage/block/BlockNode.java @@ -11,7 +11,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.tile.TileNode; public abstract class BlockNode extends BlockBase { @@ -60,7 +59,7 @@ public abstract class BlockNode extends BlockBase { TileEntity tile = world.getTileEntity(pos.offset(facing)); if (tile instanceof TileNode && ((TileNode) tile).isConnected()) { - NetworkUtils.rebuildGraph(((TileNode) tile).getNetwork()); + ((TileNode) tile).getNetwork().getNodeGraph().rebuild(); break; } @@ -83,7 +82,7 @@ public abstract class BlockNode extends BlockBase { super.breakBlock(world, pos, state); if (network != null) { - NetworkUtils.rebuildGraph(network); + network.getNodeGraph().rebuild(); } } diff --git a/src/main/java/refinedstorage/integration/jei/RecipeTransferHandlerPattern.java b/src/main/java/refinedstorage/integration/jei/RecipeTransferHandlerPattern.java index 15083d8f4..a73dc5951 100755 --- a/src/main/java/refinedstorage/integration/jei/RecipeTransferHandlerPattern.java +++ b/src/main/java/refinedstorage/integration/jei/RecipeTransferHandlerPattern.java @@ -7,7 +7,7 @@ import mezz.jei.api.recipe.transfer.IRecipeTransferHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import refinedstorage.RS; -import refinedstorage.api.network.NetworkUtils; +import refinedstorage.api.RSAPI; import refinedstorage.container.ContainerProcessingPatternEncoder; import refinedstorage.network.MessageProcessingPatternEncoderTransfer; @@ -37,7 +37,7 @@ public class RecipeTransferHandlerPattern implements IRecipeTransferHandler new ItemStorage(s), s -> new FluidStorage(s)); + RSUtils.constructFromDrive(getStackInSlot(slot), slot, itemStorages, fluidStorages, s -> new ItemStorage(s), s -> new FluidStorage(s)); if (network != null) { network.getItemStorage().rebuild(); diff --git a/src/main/java/refinedstorage/tile/TileDiskManipulator.java b/src/main/java/refinedstorage/tile/TileDiskManipulator.java index 7569c72e4..e24af68ac 100755 --- a/src/main/java/refinedstorage/tile/TileDiskManipulator.java +++ b/src/main/java/refinedstorage/tile/TileDiskManipulator.java @@ -12,8 +12,8 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RS; +import refinedstorage.RSUtils; import refinedstorage.api.util.IComparer; -import refinedstorage.apiimpl.storage.NBTStorage; import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import refinedstorage.apiimpl.storage.fluid.FluidUtils; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; @@ -82,7 +82,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte super.onContentsChanged(slot); if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER && slot < 6) { - NBTStorage.constructFromDrive(getStackInSlot(slot), slot, itemStorages, fluidStorages, s -> new ItemStorage(s), s -> new FluidStorage(s)); + RSUtils.constructFromDrive(getStackInSlot(slot), slot, itemStorages, fluidStorages, s -> new ItemStorage(s), s -> new FluidStorage(s)); } } diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 6b898ba4e..6f07068a7 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -12,7 +12,6 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RS; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.util.IComparer; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerFluid; @@ -74,7 +73,7 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp network.insertItem(remainder, remainder.stackSize, false); } } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { - NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, slot, 1, compare); + network.scheduleCraftingTaskIfUnscheduled(slot, 1, compare); } } } diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 2e355ea42..4f15051b8 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -8,7 +8,6 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RS; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.util.IComparer; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; @@ -82,7 +81,7 @@ public class TileInterface extends TileNode implements IComparable { exportItems.getStackInSlot(i).stackSize += result.stackSize; } } else { - NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, wanted, delta, compare); + network.scheduleCraftingTaskIfUnscheduled(wanted, delta, compare); } } else if (delta < 0) { ItemStack remainder = network.insertItem(got, Math.abs(delta), false); diff --git a/src/main/java/refinedstorage/tile/TileMultipartNode.java b/src/main/java/refinedstorage/tile/TileMultipartNode.java index 0fd00ea0f..e89d8d37d 100755 --- a/src/main/java/refinedstorage/tile/TileMultipartNode.java +++ b/src/main/java/refinedstorage/tile/TileMultipartNode.java @@ -17,7 +17,6 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; import refinedstorage.RSBlocks; -import refinedstorage.api.network.NetworkUtils; public abstract class TileMultipartNode extends TileNode implements IMicroblockContainerTile, ISlottedCapabilityProvider { private MicroblockContainer container; @@ -71,7 +70,7 @@ public abstract class TileMultipartNode extends TileNode implements IMicroblockC markDirty(); if (network != null) { - NetworkUtils.rebuildGraph(network); + network.getNodeGraph().rebuild(); } else if (worldObj != null) { RSBlocks.CABLE.attemptConnect(worldObj, pos); } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 20a0e460f..84e8cce76 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -8,7 +8,6 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RS; import refinedstorage.RSItems; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.inventory.ItemValidatorBasic; @@ -45,7 +44,7 @@ public class TileNetworkTransmitter extends TileNode { super.onContentsChanged(slot); if (network != null) { - NetworkUtils.rebuildGraph(network); + network.getNodeGraph().rebuild(); } } }; @@ -65,7 +64,7 @@ public class TileNetworkTransmitter extends TileNode { } if (network != null) { - NetworkUtils.rebuildGraph(network); + network.getNodeGraph().rebuild(); } } }; diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index 33e501ab0..379b441c0 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -7,7 +7,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.tile.config.IRedstoneConfigurable; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.data.TileDataParameter; @@ -65,7 +64,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto onConnectionChange(network, update); if (rebuildOnUpdateChange) { - NetworkUtils.rebuildGraph(network); + network.getNodeGraph().rebuild(); } } diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 2298e123b..925ef6d35 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -17,7 +17,6 @@ import refinedstorage.RS; import refinedstorage.RSBlocks; import refinedstorage.RSItems; import refinedstorage.api.RSAPI; -import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.block.BlockGrid; @@ -264,7 +263,7 @@ public class TileGrid extends TileNode implements IGrid { } else { if (slot != null) { if (slot.stackSize == 1 && isConnected()) { - matrix.setInventorySlotContents(i, NetworkUtils.extractItem(network, slot, 1)); + matrix.setInventorySlotContents(i, network.extractItem(slot, 1)); } else { matrix.decrStackSize(i, 1); } @@ -350,7 +349,7 @@ public class TileGrid extends TileNode implements IGrid { boolean found = false; for (ItemStack possibility : possibilities) { - ItemStack took = NetworkUtils.extractItem(network, possibility, 1); + ItemStack took = network.extractItem(possibility, 1); if (took != null) { matrix.setInventorySlotContents(i, took);