Add base code for oredict item retrieval, #356

This commit is contained in:
Raoul Van den Berge
2016-09-17 21:47:42 +02:00
parent dfa217660c
commit f49fc23716
6 changed files with 40 additions and 4 deletions

View File

@@ -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
*/

View File

@@ -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);
}

View File

@@ -83,6 +83,11 @@ public class CraftingPattern implements ICraftingPattern {
return inputs;
}
@Override
public boolean isOredicted() {
return true;
}
@Override
public List<ItemStack> getOutputs() {
return outputs;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);