diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java index 3b56ae229..7064ea331 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/externalstorage/StorageItemCyclops.java @@ -39,6 +39,7 @@ public class StorageItemCyclops extends StorageItemExternal { InventoryTileEntityBase inv = cyclopsInv.get(); if (inv != null) { int inventoryHash = inv.getInventoryHash(); + if (inventoryHash != oldInventoryHash) { super.detectChanges(network); oldInventoryHash = inventoryHash; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/CyclopsComparer.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/CyclopsComparer.java index 8cc672125..d356570b4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/CyclopsComparer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/CyclopsComparer.java @@ -3,32 +3,40 @@ package com.raoulvdberge.refinedstorage.integration.cyclopscore; import com.raoulvdberge.refinedstorage.api.util.IComparer; import org.cyclops.commoncapabilities.api.capability.itemhandler.ItemMatch; -public class CyclopsComparer { +public final class CyclopsComparer { public static int comparerFlagsToItemMatch(int flags) { int itemMatch = 0; + if ((flags & IComparer.COMPARE_DAMAGE) == IComparer.COMPARE_DAMAGE) { itemMatch |= ItemMatch.DAMAGE; } + if ((flags & IComparer.COMPARE_NBT) == IComparer.COMPARE_NBT) { itemMatch |= ItemMatch.NBT; } + if ((flags & IComparer.COMPARE_QUANTITY) == IComparer.COMPARE_QUANTITY) { itemMatch |= ItemMatch.STACKSIZE; } + return itemMatch; } public static int itemMatchToComparerFlags(int itemMatch) { int flags = 0; + if ((itemMatch & ItemMatch.DAMAGE) == ItemMatch.DAMAGE) { flags |= IComparer.COMPARE_DAMAGE; } + if ((itemMatch & ItemMatch.NBT) == ItemMatch.NBT) { flags |= IComparer.COMPARE_NBT; } + if ((itemMatch & ItemMatch.STACKSIZE) == ItemMatch.STACKSIZE) { flags |= IComparer.COMPARE_QUANTITY; } + return flags; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/ImportingBehaviorCyclops.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/ImportingBehaviorCyclops.java index da57b71ec..579fdbb0b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/ImportingBehaviorCyclops.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/cyclopscore/ImportingBehaviorCyclops.java @@ -19,6 +19,7 @@ public class ImportingBehaviorCyclops implements IImportingBehavior { if (IFilterable.isEmpty(itemFilters)) { if (ticks % upgrades.getSpeed() == 0) { ItemStack result = SlotlessItemHandlerHelper.extractItem(entity, facing, upgrades.getItemInteractCount(), true); + if (result != null && !result.isEmpty() && network.insertItem(result, result.getCount(), true) == null) { network.insertItem(result, result.getCount(), false); SlotlessItemHandlerHelper.extractItem(entity, facing, result.copy(), upgrades.getItemInteractCount(), false); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 8e2b6a7ca..c36207aad 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -389,6 +389,30 @@ public class ProxyCommon { 'A', new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED) ); + // Writer + GameRegistry.addShapedRecipe(new ItemStack(RSBlocks.WRITER), + "ECE", + "RMR", + "EIE", + 'E', new ItemStack(RSItems.QUARTZ_ENRICHED_IRON), + 'C', new ItemStack(RSItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), + 'R', new ItemStack(Items.REDSTONE), + 'M', new ItemStack(RSBlocks.CABLE), + 'I', new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED) + ); + + // Reader + GameRegistry.addShapedRecipe(new ItemStack(RSBlocks.READER), + "EDE", + "RMR", + "EIE", + 'E', new ItemStack(RSItems.QUARTZ_ENRICHED_IRON), + 'D', new ItemStack(RSItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), + 'R', new ItemStack(Items.REDSTONE), + 'M', new ItemStack(RSBlocks.CABLE), + 'I', new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED) + ); + // Crafter GameRegistry.addRecipe(new ItemStack(RSBlocks.CRAFTER), "ECE", @@ -754,12 +778,13 @@ public class ProxyCommon { // Security Manager GameRegistry.addShapedRecipe(new ItemStack(RSBlocks.SECURITY_MANAGER), "ECE", - "CMC", - "ECE", + "SMS", + "ESE", 'E', new ItemStack(RSItems.QUARTZ_ENRICHED_IRON), 'P', new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED), 'M', new ItemStack(RSBlocks.MACHINE_CASING), - 'C', new ItemStack(RSItems.NETWORK_CARD) + 'S', new ItemStack(RSItems.SECURITY_CARD), + 'C', new ItemStack(Blocks.CHEST) ); // Security Card