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