Add base code for oredict item retrieval, #356
This commit is contained in:
@@ -28,6 +28,11 @@ public interface ICraftingPattern {
|
||||
*/
|
||||
List<ItemStack> getInputs();
|
||||
|
||||
/**
|
||||
* @return true if this crafting pattern cares about the ore dictionary when extracting items, false otherwise
|
||||
*/
|
||||
boolean isOredicted();
|
||||
|
||||
/**
|
||||
* @return the outputs
|
||||
*/
|
||||
|
@@ -6,11 +6,14 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
import refinedstorage.api.RefinedStorageAPI;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import refinedstorage.api.storage.CompareUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Utilities for network manipulation.
|
||||
*/
|
||||
@@ -19,6 +22,29 @@ public final class NetworkUtils {
|
||||
return network.extractItem(stack, size, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT);
|
||||
}
|
||||
|
||||
public static ItemStack extractItemOreDict(INetworkMaster network, ItemStack stack, int size) {
|
||||
int ids[] = OreDictionary.getOreIDs(stack);
|
||||
String names[] = new String[ids.length];
|
||||
|
||||
for (int i = 0; i < ids.length; ++i) {
|
||||
names[i] = OreDictionary.getOreName(ids[i]);
|
||||
}
|
||||
|
||||
for (String name : names) {
|
||||
List<ItemStack> possibilities = OreDictionary.getOres(name);
|
||||
|
||||
for (ItemStack possibility : possibilities) {
|
||||
ItemStack result = network.extractItem(possibility, size, 0);
|
||||
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static FluidStack extractFluid(INetworkMaster network, FluidStack stack, int size) {
|
||||
return network.extractFluid(stack, size, CompareUtils.COMPARE_NBT);
|
||||
}
|
||||
|
@@ -83,6 +83,11 @@ public class CraftingPattern implements ICraftingPattern {
|
||||
return inputs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOredicted() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemStack> getOutputs() {
|
||||
return outputs;
|
||||
|
@@ -20,7 +20,7 @@ public class CraftingTaskNormal extends CraftingTask {
|
||||
ItemStack input = pattern.getInputs().get(i);
|
||||
|
||||
if (!satisfied[i]) {
|
||||
ItemStack received = FluidUtils.extractItemOrIfBucketLookInFluids(network, input, input.stackSize);
|
||||
ItemStack received = FluidUtils.extractItemOrIfBucketLookInFluids(network, input, input.stackSize, pattern.isOredicted());
|
||||
|
||||
if (received != null) {
|
||||
satisfied[i] = true;
|
||||
|
@@ -34,7 +34,7 @@ public class CraftingTaskProcessing extends CraftingTask {
|
||||
ItemStack input = pattern.getInputs().get(i);
|
||||
|
||||
if (!satisfied[i]) {
|
||||
ItemStack received = FluidUtils.extractItemOrIfBucketLookInFluids(network, input, input.stackSize);
|
||||
ItemStack received = FluidUtils.extractItemOrIfBucketLookInFluids(network, input, input.stackSize, pattern.isOredicted());
|
||||
|
||||
if (received != null) {
|
||||
satisfied[i] = true;
|
||||
|
@@ -39,8 +39,8 @@ public final class FluidUtils {
|
||||
return stack.getFluid() == FluidRegistry.WATER || stack.getFluid() == FluidRegistry.LAVA || FluidRegistry.getBucketFluids().contains(stack.getFluid());
|
||||
}
|
||||
|
||||
public static ItemStack extractItemOrIfBucketLookInFluids(INetworkMaster network, ItemStack stack, int size) {
|
||||
ItemStack result = NetworkUtils.extractItem(network, stack, size);
|
||||
public static ItemStack extractItemOrIfBucketLookInFluids(INetworkMaster network, ItemStack stack, int size, boolean oredict) {
|
||||
ItemStack result = oredict ? NetworkUtils.extractItemOreDict(network, stack, size) : NetworkUtils.extractItem(network, stack, size);
|
||||
|
||||
if (result == null && stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) {
|
||||
FluidStack fluidStack = getFluidFromStack(stack, true);
|
||||
|
Reference in New Issue
Block a user