Update to 1.12: Recipes

The recipe book is quite inconsistent about NBT...
This commit is contained in:
malte0811 2017-07-10 17:59:43 +02:00
parent d0472b45b9
commit 9ee44021bc
52 changed files with 1107 additions and 244 deletions

View file

@ -27,6 +27,7 @@ import malte0811.industrialWires.blocks.converter.TileEntityMechICtoIE;
import malte0811.industrialWires.blocks.converter.TileEntityMechIEtoIC;
import malte0811.industrialWires.blocks.wire.*;
import malte0811.industrialWires.controlpanel.PanelUtils;
import malte0811.industrialWires.crafting.Recipes;
import malte0811.industrialWires.items.ItemIC2Coil;
import malte0811.industrialWires.items.ItemKey;
import malte0811.industrialWires.items.ItemPanelComponent;
@ -34,12 +35,11 @@ import malte0811.industrialWires.network.MessageGUIInteract;
import malte0811.industrialWires.network.MessageItemSync;
import malte0811.industrialWires.network.MessagePanelInteract;
import malte0811.industrialWires.network.MessageTileSyncIW;
import malte0811.industrialWires.wires.IC2Wiretype;
import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import net.minecraft.item.crafting.IRecipe;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
@ -137,9 +137,13 @@ public class IndustrialWires {
}
}
@SubscribeEvent
public static void registerRecipes(RegistryEvent.Register<IRecipe> event) {
Recipes.addRecipes(event.getRegistry());
}
@EventHandler
public void init(FMLInitializationEvent e) {
Recipes.addRecipes();
ExtraIC2Compat.addToolConmpat();

View file

@ -1,180 +0,0 @@
/*
* This file is part of Industrial Wires.
* Copyright (C) 2016-2017 malte0811
*
* Industrial Wires is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Industrial Wires is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Industrial Wires. If not, see <http://www.gnu.org/licenses/>.
*/
package malte0811.industrialWires;
import blusunrize.immersiveengineering.api.tool.AssemblerHandler;
import blusunrize.immersiveengineering.common.IEContent;
import blusunrize.immersiveengineering.common.blocks.metal.BlockTypes_Connector;
import blusunrize.immersiveengineering.common.blocks.metal.BlockTypes_MetalDecoration0;
import blusunrize.immersiveengineering.common.blocks.stone.BlockTypes_StoneDecoration;
import ic2.api.item.IC2Items;
import malte0811.industrialWires.blocks.controlpanel.BlockTypes_Panel;
import malte0811.industrialWires.controlpanel.PanelUtils;
import malte0811.industrialWires.crafting.*;
import malte0811.industrialWires.wires.IC2Wiretype;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.oredict.RecipeSorter;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import java.util.ArrayList;
import java.util.List;
import static malte0811.industrialWires.IndustrialWires.*;
public class Recipes {
public static void addRecipes() {
/*addCustomRecipes();
addConnectors();
if (mechConv != null) {
addMechConverters();
}
addJacobs();
registerPanels();*/
}
/* private static void addConnectors() {
ItemStack glassCable = IC2Items.getItem("cable", "type:glass,insulation:0");
//CONNECTORS
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ic2conn, 4, 0), " t ", "rtr", "rtr", 't', "ingotTin", 'r', "itemRubber"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ic2conn, 4, 2), " c ", "rcr", "rcr", 'c', "ingotCopper", 'r', "itemRubber"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ic2conn, 4, 4), " g ", "rgr", "rgr", 'g', "ingotGold", 'r', "itemRubber"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ic2conn, 4, 6), " i ", "rir", "rir", 'i', "ingotIron", 'r', "itemRubber"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ic2conn, 4, 8), " c ", "rcr", "rcr", 'c', glassCable, 'r', "itemRubber"));
//RELAYS
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ic2conn, 4, 1), " t ", "rtr", 't', "ingotTin", 'r', "itemRubber"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ic2conn, 4, 3), " c ", "rcr", 'c', "ingotCopper", 'r', "itemRubber"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ic2conn, 4, 5), " g ", "rgr", 'g', "ingotGold", 'r', "itemRubber"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ic2conn, 4, 7), " i ", "gig", "gig", 'i', "ingotIron", 'g', new ItemStack(IEContent.blockStoneDecoration, 1, BlockTypes_StoneDecoration.INSULATING_GLASS.getMeta())));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ic2conn, 2, 9), " c ", "grg", "grg", 'r', "itemRubber", 'c', glassCable, 'g', new ItemStack(IEContent.blockStoneDecoration, 1, BlockTypes_StoneDecoration.INSULATING_GLASS.getMeta())));
}
private static void addMechConverters() {
ItemStack shaftIron = IC2Items.getItem("crafting", "iron_shaft");
ItemStack shaftSteel = IC2Items.getItem("crafting", "steel_shaft");
ItemStack ironMechComponent = new ItemStack(IEContent.itemMaterial, 1, 8);
ItemStack steelMechComponent = new ItemStack(IEContent.itemMaterial, 1, 9);
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(mechConv, 1, 0), " s ", "ici", "mum", 's', "stickIron",
'i', "ingotIron", 'c', new ItemStack(IEContent.blockMetalDecoration0, 1, BlockTypes_MetalDecoration0.COIL_LV.getMeta()),
'u', "ingotCopper", 'm', ironMechComponent));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(mechConv, 1, 2), "iIi", "sbS", "mrm", 's', "blockSheetmetalIron",
'i', "plateIron", 'I', shaftIron,
'b', "ingotBronze", 'm', steelMechComponent,
'S', "blockSheetmetalSteel", 'r', "stickSteel"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(mechConv, 1, 1), "mrm", "sbS", "iIi", 's', "blockSheetmetalIron",
'i', "plateSteel", 'I', shaftSteel,
'b', "ingotBronze", 'm', ironMechComponent,
'S', "blockSheetmetalSteel", 'r', "stickIron"));
}
private static void addCustomRecipes() {
RecipeSorter.register("industrialwires:key_ring", RecipeKeyRing.class, RecipeSorter.Category.SHAPELESS, "after:forge:shapelessore");
RecipeSorter.register("industrialwires:key_lock", RecipeKeyLock.class, RecipeSorter.Category.SHAPELESS, "after:forge:shapelessore");
RecipeSorter.register("industrialwires:cmp_copy", RecipeComponentCopy.class, RecipeSorter.Category.SHAPED, "after:forge:shapelessore");
RecipeSorter.register("industrialwires:coilLength", RecipeCoilLength.class, RecipeSorter.Category.SHAPELESS, "after:forge:shapelessore");
RecipeSorter.register("industrialwires:init_pc", RecipeInitPC.class, RecipeSorter.Category.SHAPED, "after:forge:shapedore");
GameRegistry.addRecipe(new RecipeKeyLock());
GameRegistry.addRecipe(new RecipeKeyRing());
GameRegistry.addRecipe(new RecipeComponentCopy());
for (int i = 0; i < IC2Wiretype.IC2_TYPES.length; i++) {
GameRegistry.addRecipe(new RecipeCoilLength(i));
}
AssemblerHandler.registerRecipeAdapter(RecipeCoilLength.class, new AllRecipeAdapter<>());
AssemblerHandler.registerRecipeAdapter(RecipeComponentCopy.class, new AllRecipeAdapter<>());
AssemblerHandler.registerRecipeAdapter(RecipeKeyLock.class, new AllRecipeAdapter<>());
AssemblerHandler.registerRecipeAdapter(RecipeKeyRing.class, new AllRecipeAdapter<>());
}
private static void registerPanels() {
// CONTROL PANELS
ItemStack drillHeadIron = new ItemStack(IEContent.itemDrillhead, 1, 1);
ItemStack motor = IC2Items.getItem("crafting", "electric_motor");
ItemStack advAlloy = IC2Items.getItem("crafting", "alloy");
ItemStack coil = IC2Items.getItem("crafting", "coil");
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(panel, 1, BlockTypes_Panel.CREATOR.ordinal()),
"rmr", "rdr", "rar", 'r', "stickSteel", 'm', motor, 'd', drillHeadIron, 'a', advAlloy));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(panel, 4, BlockTypes_Panel.DUMMY.ordinal()),
" r ", "rmr", " r ", 'r', "dustRedstone", 'm', PanelUtils.getPanelBase()));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(panel, 1, BlockTypes_Panel.RS_WIRE.ordinal()),
"c", "d", 'd', new ItemStack(panel, 1, BlockTypes_Panel.DUMMY.ordinal()), 'c',
new ItemStack(IEContent.blockConnectors, 1, BlockTypes_Connector.CONNECTOR_REDSTONE.ordinal())));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(panel, 1, BlockTypes_Panel.UNFINISHED.ordinal()),
"ppp", "www", "ppp", 'p', "plateIron", 'w', "wireCopper"));
// PANEL COMPONENTS
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(panelComponent, 1, 0),
"dustGlowstone", Blocks.STONE_BUTTON, "wireCopper"));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(panelComponent, 4, 1),
"paper", "plateIron"));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(panelComponent, 1, 2),
"dustGlowstone", "dustRedstone", "wireCopper"));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(panelComponent, 1, 3),
Blocks.STONE_BUTTON, new ItemStack(IEContent.itemWireCoil, 1, 2), "wireCopper"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(panelComponent, 1, 4),
"r", "g", "c", 'r', "itemRubber", 'g', "ingotHOPGraphite", 'c', coil));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(panelComponent, 1, 5),
"stickIron", Blocks.LEVER, "wireCopper"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(panelComponent, 1, 6),
"aaa", "asa", 'a', "plateAluminum", 's', new ItemStack(panelComponent, 2, 5)));
GameRegistry.addRecipe(new RecipeInitPC(new ItemStack(panelComponent, 1, 7),
"rdr", " w ", 'r', "stickSteel", 'd', Items.IRON_DOOR, 'w', "wireCopper"));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(key, 1, 0),
"rrp", 'r', "stickSteel", 'p', "plateSteel"));
GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(panelComponent, 1, 8),
"wireCopper", new ItemStack(IEContent.itemTool, 1, 2)));
}
private static void addJacobs() {
ItemStack mvTransformer = IC2Items.getItem("te", "mv_transformer");
ItemStack copperCable = IC2Items.getItem("cable", "type:copper,insulation:0");
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(jacobsLadder, 1, 0), "c c", " h ", "sts", 'c', copperCable, 'h', Blocks.HARDENED_CLAY,
's', "ingotSteel", 't', mvTransformer));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(jacobsLadder, 1, 1), "c c", "h h", "sts", 'c', "ingotCopper", 'h', Blocks.HARDENED_CLAY,
's', "ingotSteel", 't', new ItemStack(IEContent.blockConnectors, 1, BlockTypes_Connector.TRANSFORMER.ordinal())));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(jacobsLadder, 1, 2), "c c", "hhh", "sts", 'c', "blockCopper", 'h', Blocks.HARDENED_CLAY,
's', "ingotSteel", 't', new ItemStack(IEContent.blockConnectors, 1, BlockTypes_Connector.TRANSFORMER_HV.ordinal())));
}
private static class AllRecipeAdapter<T extends IRecipe> implements AssemblerHandler.IRecipeAdapter<T> {
@Override
public AssemblerHandler.RecipeQuery[] getQueriedInputs(T recipe, NonNullList<ItemStack> in) {
List<AssemblerHandler.RecipeQuery> ret = new ArrayList<>();
for (int i = 0; i < in.size() - 1; i++) {
boolean added = false;
for (AssemblerHandler.RecipeQuery aRet : ret) {
if (ItemStack.areItemStacksEqual((ItemStack) aRet.query, in.get(i))) {
aRet.querySize++;
added = true;
break;
}
}
if (!added) {
ret.add(new AssemblerHandler.RecipeQuery(in.get(i), 1));
}
}
return ret.toArray(new AssemblerHandler.RecipeQuery[ret.size()]);
}
@Override
public AssemblerHandler.RecipeQuery[] getQueriedInputs(T arg0) {
return new AssemblerHandler.RecipeQuery[0];
}
}*/
}

View file

@ -18,7 +18,6 @@
package malte0811.industrialWires.blocks.controlpanel;
import blusunrize.immersiveengineering.common.util.IELogger;
import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.blocks.IBlockBoundsIW;
import malte0811.industrialWires.blocks.INetGUI;
@ -94,7 +93,7 @@ public class TileEntityPanelCreator extends TileEntityIWBase implements INetGUI,
p.inventory.markDirty();
}
} else {
IELogger.info("(IndustrialWires) Failed to load panel component send by " + p.getDisplayNameString());
IndustrialWires.logger.info("(IndustrialWires) Failed to load panel component send by " + p.getDisplayNameString());
}
break;
case REMOVE:

View file

@ -30,7 +30,6 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.Vec3d;
import net.minecraftforge.fml.common.FMLLog;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.logging.log4j.Level;
@ -153,7 +152,7 @@ public abstract class PanelComponent {
ret.readFromNBT(nbt);
return ret;
} else {
FMLLog.log(IndustrialWires.MODID, Level.WARN, "Unknown panel component: " + type);
IndustrialWires.logger.warn("Unknown panel component: " + type);
return null;
}
}

View file

@ -17,27 +17,34 @@
*/
package malte0811.industrialWires.crafting;
import blusunrize.immersiveengineering.api.ApiUtils;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList;
import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.items.ItemIC2Coil;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.NonNullList;
import net.minecraft.world.World;
import net.minecraftforge.common.crafting.IngredientNBT;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.registries.IForgeRegistryEntry;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Random;
public class RecipeCoilLength extends IForgeRegistryEntry.Impl<IRecipe> implements IRecipe {
public final ItemStack coil;
public final ItemStack cable;
public final Ingredient cable;
private final int maxLength;
public RecipeCoilLength(int meta) {
coil = new ItemStack(IndustrialWires.coil, 1, meta);
cable = ItemIC2Coil.getUninsulatedCable(coil);
maxLength = ItemIC2Coil.getMaxWireLength(coil);
public RecipeCoilLength(ItemStack coil, Ingredient cable) {
this.coil = coil;
this.cable = cable;
maxLength = ItemIC2Coil.getMaxWireLength(this.coil);
}
@Override
@ -62,7 +69,7 @@ public class RecipeCoilLength extends IForgeRegistryEntry.Impl<IRecipe> implemen
@Nonnull
@Override
public ItemStack getRecipeOutput() {
return ItemStack.EMPTY;
return coil;
}
@Nonnull
@ -79,7 +86,7 @@ public class RecipeCoilLength extends IForgeRegistryEntry.Impl<IRecipe> implemen
ret.set(i, currStack);
ItemIC2Coil.setLength(currStack, -length);
}
} else if (OreDictionary.itemMatches(curr, cable, false)) {
} else if (isCable(curr)) {
length--;
}
}
@ -92,7 +99,7 @@ public class RecipeCoilLength extends IForgeRegistryEntry.Impl<IRecipe> implemen
ItemStack curr = inv.getStackInSlot(i);
if (OreDictionary.itemMatches(curr, coil, false)) {
cableLength += ItemIC2Coil.getLength(curr);
} else if (OreDictionary.itemMatches(curr, cable, false)) {
} else if (isCable(curr)) {
cableLength++;
} else if (!curr.isEmpty()) {
return -1;
@ -100,4 +107,59 @@ public class RecipeCoilLength extends IForgeRegistryEntry.Impl<IRecipe> implemen
}
return cableLength;
}
@Nonnull
@Override
public NonNullList<Ingredient> getIngredients() {
Random r = new Random();
NonNullList<Ingredient> ret = NonNullList.withSize(9, Ingredient.EMPTY);
for (int i = 0;i<ret.size();i++) {
ItemStack[] types = new ItemStack[cable.getMatchingStacks().length+1];
int length = types.length;
int cablePos = 0;
if (r.nextBoolean()) {
types[length-1] = coil;
} else {
types[0] = coil;
cablePos = 1;
}
System.arraycopy(cable.getMatchingStacks(), 0, types, cablePos, length-1);
ret.set(i, new UnmatchedIngredient(types));
}
return ret;
}
private boolean isCable(ItemStack stack) {
for (ItemStack curr:cable.getMatchingStacks()) {
if (ItemStack.areItemsEqual(stack, curr) && ItemStack.areItemStackTagsEqual(stack, curr)) {
return true;
}
}
return false;
}
//There is probably a better way to do this...
private static class UnmatchedIngredient extends Ingredient {
public UnmatchedIngredient(ItemStack[] in) {
super(in);
}
@Override
public boolean apply(@Nullable ItemStack input) {
IndustrialWires.logger.info(input);
if (input == null)
return false;
for (ItemStack stack:getMatchingStacks()) {
if (ItemStack.areItemsEqual(stack, input) && ItemStack.areItemStackTagsEqual(stack, input)) {
return true;
}
}
return false;
}
@Nonnull
@Override
public IntList getValidItemStacksPacked() {
return new IntArrayList(0);
}
}
}

View file

@ -107,4 +107,9 @@ public class RecipeComponentCopy extends IForgeRegistryEntry.Impl<IRecipe> imple
}
return null;
}
@Override
public boolean isHidden() {
return true;
}
}

View file

@ -24,14 +24,16 @@ import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.common.crafting.CraftingHelper;
import net.minecraftforge.common.crafting.CraftingHelper.ShapedPrimer;
import net.minecraftforge.oredict.ShapedOreRecipe;
import javax.annotation.Nonnull;
public class RecipeInitPC extends ShapedOreRecipe {
public RecipeInitPC(ResourceLocation group, ItemStack result, Object... recipe) {
super(group, result, recipe);
public RecipeInitPC(ShapedOreRecipe factory) {
super(factory.getRegistryName(), factory.getRecipeOutput(), primerFromRecipe(factory));
}
@Nonnull
@ -45,8 +47,12 @@ public class RecipeInitPC extends ShapedOreRecipe {
return ret;
}
@Override
public boolean matches(InventoryCrafting inv, World world) {
return super.matches(inv, world);
private static ShapedPrimer primerFromRecipe(ShapedOreRecipe recipe) {
ShapedPrimer ret = new ShapedPrimer();
ret.height = recipe.getHeight();
ret.width = recipe.getWidth();
ret.input = recipe.getIngredients();
ret.mirrored = true;
return ret;
}
}

View file

@ -26,6 +26,7 @@ import malte0811.industrialWires.items.ItemPanelComponent;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.NonNullList;
import net.minecraft.world.World;
import net.minecraftforge.registries.IForgeRegistryEntry;
@ -110,4 +111,13 @@ public class RecipeKeyLock extends IForgeRegistryEntry.Impl<IRecipe> implements
}
return ItemStack.EMPTY;
}
@Nonnull
@Override
public NonNullList<Ingredient> getIngredients() {
NonNullList<Ingredient> ret = NonNullList.withSize(2, Ingredient.EMPTY);
ret.set(0, Ingredient.fromStacks(new ItemStack(IndustrialWires.key, 1, 0)));
ret.set(1, Ingredient.fromStacks(new ItemStack(IndustrialWires.panelComponent, 1, 7)));
return ret;
}
}

View file

@ -22,6 +22,7 @@ import malte0811.industrialWires.IndustrialWires;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.NonNullList;
@ -29,53 +30,58 @@ import net.minecraft.world.World;
import net.minecraftforge.registries.IForgeRegistryEntry;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import static malte0811.industrialWires.items.ItemKey.*;
public class RecipeKeyRing extends IForgeRegistryEntry.Impl<IRecipe> implements IRecipe {
private final boolean addToRing;
public RecipeKeyRing(boolean add) {
addToRing = add;
}
@Override
public boolean matches(@Nonnull InventoryCrafting inv, @Nonnull World worldIn) {
return getType(inv) != null;
return isValid(inv);
}
@Nonnull
@Override
public ItemStack getCraftingResult(@Nonnull InventoryCrafting inv) {
Boolean recipeType = getType(inv);
if (recipeType==Boolean.TRUE) {//add key to ring
ItemStack ring = inv.getStackInSlot(getRingPos(inv)).copy();
NBTTagCompound nbt = ring.getTagCompound();
ItemStack key = inv.getStackInSlot(getKeyPos(inv));
NBTTagCompound keyNBT = key.getTagCompound();
if (nbt==null) {
nbt = new NBTTagCompound();
ring.setTagCompound(nbt);
}
if (!nbt.hasKey(RING_KEYS)) {
nbt.setTag(RING_KEYS, new NBTTagList());
}
if (keyNBT!=null) {
NBTTagList keys = nbt.getTagList(RING_KEYS, 10);
if (keys.tagCount()>= IWConfig.maxKeysOnRing) {
return ItemStack.EMPTY;
if (isValid(inv)) {
if (addToRing) {//add key to ring
ItemStack ring = inv.getStackInSlot(getRingPos(inv)).copy();
NBTTagCompound nbt = ring.getTagCompound();
ItemStack key = inv.getStackInSlot(getKeyPos(inv));
NBTTagCompound keyNBT = key.getTagCompound();
if (nbt == null) {
nbt = new NBTTagCompound();
ring.setTagCompound(nbt);
}
keys.appendTag(keyNBT.copy());
nbt.setInteger(LOCK_ID, keyNBT.getInteger(LOCK_ID));
nbt.setString(NAME, keyNBT.getString(NAME));
}
return ring;
} else {//remove key from ring
ItemStack ring = inv.getStackInSlot(getRingPos(inv)).copy();
NBTTagCompound nbt = ring.getTagCompound();
ItemStack key = new ItemStack(IndustrialWires.key, 1, 1);
if (nbt!=null) {
NBTTagList keys = nbt.getTagList(RING_KEYS, 10);
if (keys.tagCount()>0) {
NBTTagCompound first = keys.getCompoundTagAt(keys.tagCount()-1);
key.setTagCompound(first);
return key;
if (!nbt.hasKey(RING_KEYS)) {
nbt.setTag(RING_KEYS, new NBTTagList());
}
if (keyNBT != null) {
NBTTagList keys = nbt.getTagList(RING_KEYS, 10);
if (keys.tagCount() >= IWConfig.maxKeysOnRing) {
return ItemStack.EMPTY;
}
keys.appendTag(keyNBT.copy());
nbt.setInteger(LOCK_ID, keyNBT.getInteger(LOCK_ID));
nbt.setString(NAME, keyNBT.getString(NAME));
}
return ring;
} else {//remove key from ring
ItemStack ring = inv.getStackInSlot(getRingPos(inv)).copy();
NBTTagCompound nbt = ring.getTagCompound();
ItemStack key = new ItemStack(IndustrialWires.key, 1, 1);
if (nbt != null) {
NBTTagList keys = nbt.getTagList(RING_KEYS, 10);
if (keys.tagCount() > 0) {
NBTTagCompound first = keys.getCompoundTagAt(keys.tagCount() - 1);
key.setTagCompound(first);
return key;
}
}
}
}
@ -91,14 +97,14 @@ public class RecipeKeyRing extends IForgeRegistryEntry.Impl<IRecipe> implements
@Nonnull
@Override
public ItemStack getRecipeOutput() {
return ItemStack.EMPTY;
return new ItemStack(IndustrialWires.key, 1, addToRing?2:1);
}
@Nonnull
@Override
public NonNullList<ItemStack> getRemainingItems(@Nonnull InventoryCrafting inv) {
NonNullList<ItemStack> ret = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY);
if (getType(inv)==Boolean.FALSE) {
if (!addToRing) {
int ringId = getRingPos(inv);
ItemStack ring = inv.getStackInSlot(ringId).copy();
NBTTagCompound nbt = ring.getTagCompound();
@ -119,8 +125,7 @@ public class RecipeKeyRing extends IForgeRegistryEntry.Impl<IRecipe> implements
return ret;
}
@Nullable
private Boolean getType(@Nonnull InventoryCrafting inv) {
private boolean isValid(@Nonnull InventoryCrafting inv) {
boolean hasRing = false;
boolean hasKey = false;
for (int i = 0;i<inv.getSizeInventory();i++) {
@ -133,12 +138,16 @@ public class RecipeKeyRing extends IForgeRegistryEntry.Impl<IRecipe> implements
hasRing = true;
continue;
}
return null;
return false;
} else if (!here.isEmpty()) {
return null;
return false;
}
}
return hasRing?hasKey:null;
if (addToRing) {
return hasKey&&hasRing;
} else {
return hasKey&&!hasRing;
}
}
private int getRingPos(@Nonnull InventoryCrafting inv) {
@ -159,4 +168,16 @@ public class RecipeKeyRing extends IForgeRegistryEntry.Impl<IRecipe> implements
}
return -1;
}
@Nonnull
@Override
public NonNullList<Ingredient> getIngredients() {
if (addToRing) {
NonNullList<Ingredient> ret = NonNullList.withSize(2, Ingredient.fromStacks(new ItemStack(IndustrialWires.key, 1, 1)));;
ret.set(1, Ingredient.fromStacks(new ItemStack(IndustrialWires.key, 1, 2)));
return ret;
} else {
return NonNullList.withSize(1, Ingredient.fromStacks(new ItemStack(IndustrialWires.key, 1, 2)));
}
}
}

View file

@ -0,0 +1,69 @@
/*
* This file is part of Industrial Wires.
* Copyright (C) 2016-2017 malte0811
*
* Industrial Wires is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Industrial Wires is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Industrial Wires. If not, see <http://www.gnu.org/licenses/>.
*/
package malte0811.industrialWires.crafting;
import blusunrize.immersiveengineering.api.tool.AssemblerHandler;
import ic2.api.item.IC2Items;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.util.NonNullList;
import net.minecraftforge.registries.IForgeRegistry;
import java.util.*;
import static malte0811.industrialWires.IndustrialWires.MODID;
public class Recipes {
public static void addRecipes(IForgeRegistry<IRecipe> registry) {
registry.register(new RecipeKeyRing(true).setRegistryName(MODID, "add_key_ring"));
registry.register(new RecipeKeyRing(false).setRegistryName(MODID, "remove_key_ring"));
registry.register(new RecipeKeyLock().setRegistryName(MODID, "key_lock"));
registry.register(new RecipeComponentCopy().setRegistryName(MODID, "component_copy"));
AssemblerHandler.registerRecipeAdapter(RecipeCoilLength.class, new Recipes.AllRecipeAdapter<>());
AssemblerHandler.registerRecipeAdapter(RecipeComponentCopy.class, new Recipes.AllRecipeAdapter<>());
AssemblerHandler.registerRecipeAdapter(RecipeKeyLock.class, new Recipes.AllRecipeAdapter<>());
AssemblerHandler.registerRecipeAdapter(RecipeKeyRing.class, new Recipes.AllRecipeAdapter<>());
AssemblerHandler.registerRecipeAdapter(RecipeInitPC.class, new Recipes.AllRecipeAdapter<>());
}
private static class AllRecipeAdapter<T extends IRecipe> implements AssemblerHandler.IRecipeAdapter<T> {
@Override
public AssemblerHandler.RecipeQuery[] getQueriedInputs(T recipe, NonNullList<ItemStack> in) {
List<AssemblerHandler.RecipeQuery> ret = new ArrayList<>();
for (int i = 0; i < in.size() - 1; i++) {
boolean added = false;
for (AssemblerHandler.RecipeQuery aRet : ret) {
if (ItemStack.areItemStacksEqual((ItemStack) aRet.query, in.get(i))) {
aRet.querySize++;
added = true;
break;
}
}
if (!added) {
ret.add(new AssemblerHandler.RecipeQuery(in.get(i), 1));
}
}
return ret.toArray(new AssemblerHandler.RecipeQuery[ret.size()]);
}
@Override
public AssemblerHandler.RecipeQuery[] getQueriedInputs(T arg0) {
return new AssemblerHandler.RecipeQuery[0];
}
}
}

View file

@ -0,0 +1,20 @@
package malte0811.industrialWires.crafting.factories;
import com.google.gson.JsonObject;
import ic2.api.item.IC2Items;
import malte0811.industrialWires.IndustrialWires;
import net.minecraft.item.crafting.Ingredient;
import net.minecraftforge.common.crafting.IIngredientFactory;
import net.minecraftforge.common.crafting.JsonContext;
import javax.annotation.Nonnull;
public class IC2ItemFactory implements IIngredientFactory {
@Nonnull
@Override
public Ingredient parse(JsonContext context, JsonObject json) {
String name = json.get("name").getAsString();
String variant = json.get("variant").getAsString();
return Ingredient.fromStacks(IC2Items.getItem(name, variant));
}
}

View file

@ -0,0 +1,15 @@
package malte0811.industrialWires.crafting.factories;
import com.google.gson.JsonObject;
import malte0811.industrialWires.crafting.RecipeInitPC;
import net.minecraft.item.crafting.IRecipe;
import net.minecraftforge.common.crafting.IRecipeFactory;
import net.minecraftforge.common.crafting.JsonContext;
import net.minecraftforge.oredict.ShapedOreRecipe;
public class InitPCFactory implements IRecipeFactory {
@Override
public IRecipe parse(JsonContext context, JsonObject json) {
return new RecipeInitPC(ShapedOreRecipe.factory(context, json));
}
}

View file

@ -0,0 +1,16 @@
package malte0811.industrialWires.crafting.factories;
import com.google.gson.JsonObject;
import malte0811.industrialWires.IWConfig;
import net.minecraftforge.common.crafting.IConditionFactory;
import net.minecraftforge.common.crafting.JsonContext;
import java.util.function.BooleanSupplier;
public class IsConversionEnabled implements IConditionFactory {
@Override
public BooleanSupplier parse(JsonContext context, JsonObject json) {
return () -> IWConfig.enableConversion;
}
}

View file

@ -0,0 +1,20 @@
package malte0811.industrialWires.crafting.factories;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import malte0811.industrialWires.crafting.RecipeCoilLength;
import malte0811.industrialWires.crafting.RecipeInitPC;
import net.minecraft.item.crafting.IRecipe;
import net.minecraftforge.common.crafting.CraftingHelper;
import net.minecraftforge.common.crafting.IRecipeFactory;
import net.minecraftforge.common.crafting.JsonContext;
import net.minecraftforge.oredict.ShapedOreRecipe;
public class WireCoilFactory implements IRecipeFactory {
@Override
public RecipeCoilLength parse(JsonContext context, JsonObject json) {
JsonObject coil = json.getAsJsonObject("coil");
JsonObject cable = json.getAsJsonObject("cable");
return new RecipeCoilLength(CraftingHelper.getItemStack(coil, context), CraftingHelper.getIngredient(cable, context));
}
}

View file

@ -229,8 +229,9 @@ public class ItemIC2Coil extends Item implements IWireCoil {
return IWConfig.maxLengthOnCoil[i.getItemDamage()];
}
public static ItemStack getUninsulatedCable(ItemStack i) {
switch (i.getMetadata()) {
public static ItemStack getUninsulatedCable(String name) {
return IC2Items.getItem("cable", "type:"+name+",insulation:0");
/*switch (i.getMetadata()) {
case 0:
return IC2Items.getItem("cable", "type:tin,insulation:0");
case 1:
@ -242,6 +243,6 @@ public class ItemIC2Coil extends Item implements IWireCoil {
case 4:
return IC2Items.getItem("cable", "type:glass,insulation:0");
}
return null;
return null;*/
}
}

View file

@ -0,0 +1,12 @@
{
"conditions" : {
"conversion": "malte0811.industrialWires.crafting.factories.IsConversionEnabled"
},
"recipes": {
"component_init": "malte0811.industrialWires.crafting.factories.InitPCFactory",
"wire_coil": "malte0811.industrialWires.crafting.factories.WireCoilFactory"
},
"ingredients": {
"ic2_item": "malte0811.industrialWires.crafting.factories.IC2ItemFactory"
}
}

View file

@ -0,0 +1,22 @@
{
"result": {
"item": "industrialwires:control_panel",
"data": 2,
"count": 4
},
"pattern": [
" r ",
"rmr",
" r "
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "dustRedstone"
},
"m": {
"item": "industrialwires:control_panel",
"data": 4
}
}
}

View file

@ -0,0 +1,31 @@
{
"result": {
"item": "industrialwires:control_panel",
"data": 3
},
"pattern": [
"rmr",
"rdr",
"rar"
],
"type": "forge:ore_shaped",
"key": {
"a": {
"type": "industrialwires:ic2_item",
"name": "crafting",
"variant": "alloy"
},
"r": {
"type": "forge:ore_dict", "ore": "stickSteel"
},
"d": {
"item": "immersiveengineering:drillhead",
"data": 1
},
"m": {
"type": "industrialwires:ic2_item",
"name": "crafting",
"variant": "electric_motor"
}
}
}

View file

@ -0,0 +1,21 @@
{
"result": {
"item": "industrialwires:control_panel",
"data": 1
},
"pattern": [
"c",
"d"
],
"type": "minecraft:crafting_shaped",
"key": {
"c": {
"item": "immersiveengineering:connector",
"data": 12
},
"d": {
"item": "industrialwires:control_panel",
"data": 2
}
}
}

View file

@ -0,0 +1,20 @@
{
"result": {
"item": "industrialwires:control_panel",
"data": 4
},
"pattern": [
"ppp",
"www",
"ppp"
],
"type": "forge:ore_shaped",
"key": {
"p": {
"type": "forge:ore_dict", "ore": "plateIron"
},
"w": {
"type": "forge:ore_dict", "ore": "wireCopper"
}
}
}

View file

@ -0,0 +1,21 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 2,
"count": 4
},
"pattern": [
" c ",
"rcr",
"rcr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"c": {
"type": "forge:ore_dict", "ore": "ingotCopper"
}
}
}

View file

@ -0,0 +1,20 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 3,
"count": 4
},
"pattern": [
" c ",
"rcr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"c": {
"type": "forge:ore_dict", "ore": "ingotCopper"
}
}
}

View file

@ -0,0 +1,23 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 8,
"count": 4
},
"pattern": [
" c ",
"rcr",
"rcr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"c": {
"type": "industrialwires:ic2_item",
"name": "cable",
"variant": "type:glass,insulation:0"
}
}
}

View file

@ -0,0 +1,27 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 9,
"count": 4
},
"pattern": [
" c ",
"grg",
"grg"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"c": {
"type": "industrialwires:ic2_item",
"name": "cable",
"variant": "type:glass,insulation:0"
},
"g": {
"item": "immersiveengineering:stone_decoration",
"data": 8
}
}
}

View file

@ -0,0 +1,21 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 4,
"count": 4
},
"pattern": [
" g ",
"rgr",
"rgr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"g": {
"type": "forge:ore_dict", "ore": "ingotGold"
}
}
}

View file

@ -0,0 +1,20 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 5,
"count": 4
},
"pattern": [
" g ",
"rgr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"g": {
"type": "forge:ore_dict", "ore": "ingotGold"
}
}
}

View file

@ -0,0 +1,21 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 6,
"count": 4
},
"pattern": [
" i ",
"rir",
"rir"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"i": {
"type": "forge:ore_dict", "ore": "ingotIron"
}
}
}

View file

@ -0,0 +1,22 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 7,
"count": 4
},
"pattern": [
" i ",
"gig",
"gig"
],
"type": "forge:ore_shaped",
"key": {
"g": {
"item": "immersiveengineering:stone_decoration",
"data": 8
},
"i": {
"type": "forge:ore_dict", "ore": "ingotIron"
}
}
}

View file

@ -0,0 +1,23 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 0,
"count": 4
},
"pattern": [
" t ",
"rtr",
"rtr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict",
"ore": "itemRubber"
},
"t": {
"type": "forge:ore_dict",
"ore": "ingotTin"
}
}
}

View file

@ -0,0 +1,20 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 1,
"count": 4
},
"pattern": [
" t ",
"rtr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"t": {
"type": "forge:ore_dict", "ore": "ingotTin"
}
}
}

View file

@ -0,0 +1,27 @@
{
"result": {
"item": "industrialwires:jacobs_ladder",
"data": 2
},
"pattern": [
"c c",
"hhh",
"sts"
],
"type": "forge:ore_shaped",
"key": {
"c": {
"type": "forge:ore_dict", "ore": "blockCopper"
},
"s": {
"type": "forge:ore_dict", "ore": "ingotSteel"
},
"t": {
"item": "immersiveengineering:connector",
"data": 8
},
"h": {
"item": "minecraft:hardened_clay"
}
}
}

View file

@ -0,0 +1,27 @@
{
"result": {
"item": "industrialwires:jacobs_ladder",
"data": 1
},
"pattern": [
"c c",
"h h",
"sts"
],
"type": "forge:ore_shaped",
"key": {
"c": {
"type": "forge:ore_dict", "ore": "ingotCopper"
},
"s": {
"type": "forge:ore_dict", "ore": "ingotSteel"
},
"t": {
"item": "immersiveengineering:connector",
"data": 7
},
"h": {
"item": "minecraft:hardened_clay"
}
}
}

View file

@ -0,0 +1,30 @@
{
"result": {
"item": "industrialwires:jacobs_ladder",
"data": 0
},
"pattern": [
"c c",
" h ",
"sts"
],
"type": "forge:ore_shaped",
"key": {
"c": {
"type": "industrialwires:ic2_item",
"name": "cable",
"variant": "type:copper,insulation:0"
},
"s": {
"type": "forge:ore_dict", "ore": "ingotSteel"
},
"t": {
"type": "industrialwires:ic2_item",
"name": "te",
"variant": "mv_transformer"
},
"h": {
"item": "minecraft:hardened_clay"
}
}
}

View file

@ -0,0 +1,18 @@
{
"result": {
"item": "industrialwires:key",
"data": 0
},
"pattern": [
"rrp"
],
"type": "forge:ore_shaped",
"key": {
"p": {
"type": "forge:ore_dict", "ore": "plateSteel"
},
"r": {
"type": "forge:ore_dict", "ore": "stickSteel"
}
}
}

View file

@ -0,0 +1,17 @@
{
"result": {
"item": "industrialwires:key",
"data": 2
},
"pattern": [
" r ",
"r r",
" r "
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "stickSteel"
}
}
}

View file

@ -0,0 +1,41 @@
{
"result": {
"item": "industrialwires:mechanical_converter",
"data": 2
},
"pattern": [
"iIi",
"sbS",
"mrm"
],
"type": "forge:ore_shaped",
"key": {
"b": {
"type": "forge:ore_dict", "ore": "ingotBronze"
},
"r": {
"type": "forge:ore_dict", "ore": "stickSteel"
},
"s": {
"type": "forge:ore_dict", "ore": "blockSheetmetalIron"
},
"S": {
"type": "forge:ore_dict", "ore": "blockSheetmetalSteel"
},
"i": {
"type": "forge:ore_dict", "ore": "plateIron"
},
"I": {
"type": "industrialwires:ic2_item",
"name": "crafting",
"variant": "iron_shaft"
},
"m": {
"item": "immersiveengineering:material",
"data": 9
}
},
"conditions": [{
"type": "industrialwires:conversion"
}]
}

View file

@ -0,0 +1,37 @@
{
"result": {
"item": "industrialwires:mechanical_converter",
"data": 0
},
"pattern": [
" s ",
"ici",
"mum"
],
"type": "forge:ore_shaped",
"key": {
"s": {
"type": "forge:ore_dict",
"ore": "stickIron"
},
"c": {
"item": "immersiveengineering:metal_decoration0",
"data": 0
},
"u": {
"type": "forge:ore_dict",
"ore": "ingotCopper"
},
"i": {
"type": "forge:ore_dict",
"ore": "ingotIron"
},
"m": {
"item": "immersiveengineering:material",
"data": 8
}
},
"conditions": [{
"type": "industrialwires:conversion"
}]
}

View file

@ -0,0 +1,41 @@
{
"result": {
"item": "industrialwires:mechanical_converter",
"data": 1
},
"pattern": [
"mrm",
"sbS",
"iIi"
],
"type": "forge:ore_shaped",
"key": {
"b": {
"type": "forge:ore_dict", "ore": "ingotBronze"
},
"r": {
"type": "forge:ore_dict", "ore": "stickIron"
},
"s": {
"type": "forge:ore_dict", "ore": "blockSheetmetalIron"
},
"S": {
"type": "forge:ore_dict", "ore": "blockSheetmetalSteel"
},
"i": {
"type": "forge:ore_dict", "ore": "plateSteel"
},
"I": {
"type": "industrialwires:ic2_item",
"name": "crafting",
"variant": "steel_shaft"
},
"m": {
"item": "immersiveengineering:material",
"data": 8
}
},
"conditions": [{
"type": "industrialwires:conversion"
}]
}

View file

@ -0,0 +1,18 @@
{
"result": {
"item": "industrialwires:panel_component",
"data": 0
},
"ingredients": [
{
"type": "forge:ore_dict", "ore": "dustGlowstone"
},
{
"item": "minecraft:stone_button"
},
{
"type": "forge:ore_dict", "ore": "wireCopper"
}
],
"type": "forge:ore_shapeless"
}

View file

@ -0,0 +1,21 @@
{
"result": {
"item": "industrialwires:panel_component",
"data": 6
},
"pattern": [
"aaa",
"asa"
],
"type": "forge:ore_shaped",
"key": {
"a": {
"type": "forge:ore_dict", "ore": "plateAluminum"
},
"s": {
"item": "industrialwires:panel_component",
"data": 5,
"count": 2
}
}
}

View file

@ -0,0 +1,18 @@
{
"result": {
"item": "industrialwires:panel_component",
"data": 2
},
"ingredients": [
{
"type": "forge:ore_dict", "ore": "dustGlowstone"
},
{
"type": "forge:ore_dict", "ore": "dustRedstone"
},
{
"type": "forge:ore_dict", "ore": "wireCopper"
}
],
"type": "forge:ore_shapeless"
}

View file

@ -0,0 +1,16 @@
{
"result": {
"item": "industrialwires:panel_component",
"data": 1,
"count": 4
},
"ingredients": [
{
"type": "forge:ore_dict", "ore": "paper"
},
{
"type": "forge:ore_dict", "ore": "plateIron"
}
],
"type": "forge:ore_shapeless"
}

View file

@ -0,0 +1,22 @@
{
"result": {
"item": "industrialwires:panel_component",
"data": 7
},
"pattern": [
"rdr",
" w "
],
"type": "industrialwires:component_init",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "stickSteel"
},
"d": {
"item": "minecraft:iron_door"
},
"w": {
"type": "forge:ore_dict", "ore": "wireCopper"
}
}
}

View file

@ -0,0 +1,16 @@
{
"result": {
"item": "industrialwires:panel_component",
"data": 8
},
"ingredients": [
{
"type": "forge:ore_dict", "ore": "wireCopper"
},
{
"item": "immersiveengineering:tool",
"data": 2
}
],
"type": "forge:ore_shapeless"
}

View file

@ -0,0 +1,19 @@
{
"result": {
"item": "industrialwires:panel_component",
"data": 3
},
"ingredients": [
{
"item": "minecraft:stone_button"
},
{
"item": "immersiveengineering:wirecoil",
"data": 2
},
{
"type": "forge:ore_dict", "ore": "wireCopper"
}
],
"type": "forge:ore_shapeless"
}

View file

@ -0,0 +1,18 @@
{
"result": {
"item": "industrialwires:panel_component",
"data": 5
},
"ingredients": [
{
"type": "forge:ore_dict", "ore": "stickIron"
},
{
"item": "minecraft:lever"
},
{
"type": "forge:ore_dict", "ore": "wireCopper"
}
],
"type": "forge:ore_shapeless"
}

View file

@ -0,0 +1,26 @@
{
"result": {
"item": "industrialwires:panel_component",
"data": 4
},
"pattern": [
"r",
"g",
"c"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"c": {
"type": "industrialwires:ic2_item",
"name": "crafting",
"variant": "coil"
},
"g": {
"type": "forge:ore_dict",
"ore": "ingotHOPGraphite"
}
}
}

View file

@ -0,0 +1,12 @@
{
"type": "industrialwires:wire_coil",
"cable": {
"type": "industrialwires:ic2_item",
"name": "cable",
"variant": "type:copper,insulation:0"
},
"coil": {
"item": "industrialwires:ic2_wire_coil",
"data": 1
}
}

View file

@ -0,0 +1,12 @@
{
"type": "industrialwires:wire_coil",
"cable": {
"type": "industrialwires:ic2_item",
"name": "cable",
"variant": "type:glass,insulation:0"
},
"coil": {
"item": "industrialwires:ic2_wire_coil",
"data": 4
}
}

View file

@ -0,0 +1,12 @@
{
"type": "industrialwires:wire_coil",
"cable": {
"type": "industrialwires:ic2_item",
"name": "cable",
"variant": "type:gold,insulation:0"
},
"coil": {
"item": "industrialwires:ic2_wire_coil",
"data": 2
}
}

View file

@ -0,0 +1,12 @@
{
"type": "industrialwires:wire_coil",
"cable": {
"type": "industrialwires:ic2_item",
"name": "cable",
"variant": "type:iron,insulation:0"
},
"coil": {
"item": "industrialwires:ic2_wire_coil",
"data": 3
}
}

View file

@ -0,0 +1,12 @@
{
"type": "industrialwires:wire_coil",
"cable": {
"type": "industrialwires:ic2_item",
"name": "cable",
"variant": "type:tin,insulation:0"
},
"coil": {
"item": "industrialwires:ic2_wire_coil",
"data": 0
}
}