From f075d6391c83a2f90ccfd7ccbf3c61c0eee177a8 Mon Sep 17 00:00:00 2001 From: Modmuss50 Date: Thu, 7 May 2015 21:12:07 +0100 Subject: [PATCH] Some more work on the crafting system, almost done it. It was a lot easier that I thought it would be --- .../techreborn/api/recipe/BaseRecipe.java | 1 - .../techreborn/api/recipe/RecipeCrafter.java | 39 ++++++++++++++++++- .../techreborn/api/recipe/RecipeHanderer.java | 2 +- src/main/java/techreborn/init/ModRecipes.java | 7 ++-- .../tiles/TileImplosionCompressor.java | 23 ++++++++--- 5 files changed, 59 insertions(+), 13 deletions(-) diff --git a/src/main/java/techreborn/api/recipe/BaseRecipe.java b/src/main/java/techreborn/api/recipe/BaseRecipe.java index 1793dacd2..b4af134a1 100644 --- a/src/main/java/techreborn/api/recipe/BaseRecipe.java +++ b/src/main/java/techreborn/api/recipe/BaseRecipe.java @@ -25,7 +25,6 @@ public abstract class BaseRecipe implements IBaseRecipeType { outputs = new ArrayList(); this.name = name; //This adds all new recipes - RecipeHanderer.addRecipe(this); this.tickTime = tickTime; this.euPerTick = euPerTick; } diff --git a/src/main/java/techreborn/api/recipe/RecipeCrafter.java b/src/main/java/techreborn/api/recipe/RecipeCrafter.java index 9ace84184..d5fd88371 100644 --- a/src/main/java/techreborn/api/recipe/RecipeCrafter.java +++ b/src/main/java/techreborn/api/recipe/RecipeCrafter.java @@ -3,6 +3,7 @@ package techreborn.api.recipe; import ic2.api.energy.prefab.BasicSink; import techreborn.tiles.TileMachineBase; import techreborn.util.Inventory; +import techreborn.util.ItemUtils; /** * Use this in your tile entity to craft things @@ -45,7 +46,7 @@ public class RecipeCrafter { public int[] inputSlots; /** - * This si the list fo the slots that the crafting logic should look fot the output item stacks. + * This is the list for the slots that the crafting logic should look fot the output item stacks. */ public int[] outputSlots; @@ -72,10 +73,44 @@ public class RecipeCrafter { } + IBaseRecipeType currentRecipe; + int currentTickTime = 0; + /** * Call this on the tile tick */ public void updateEntity(){ - + if(currentRecipe == null){ + for(IBaseRecipeType recipe : RecipeHanderer.getRecipeClassFromName(recipeName)){ + boolean isFullRecipe = false; + for (int i = 0; i < inputs; i++) { + if(ItemUtils.isItemEqual(inventory.getStackInSlot(inputSlots[i]), recipe.getInputs().get(i), true, true)){ + isFullRecipe = true; + } else { + isFullRecipe = false; + } + } + if(isFullRecipe){ + currentRecipe = recipe; + return; + } + } + } else { + for (int i = 0; i < inputs; i++) { + if(!ItemUtils.isItemEqual(inventory.getStackInSlot(inputSlots[i]), currentRecipe.getInputs().get(i), true, true)){ + currentRecipe = null; + currentTickTime = 0; + return; + } + } + if(currentTickTime >= currentRecipe.tickTime()){ + //TODO give the player the goodies :) + //Need some nicer way of added the crafting things. + } else { + if(energy.useEnergy(currentRecipe.euPerTick())){ + currentTickTime ++; + } + } + } } } diff --git a/src/main/java/techreborn/api/recipe/RecipeHanderer.java b/src/main/java/techreborn/api/recipe/RecipeHanderer.java index ae3018d2c..8ddb048c8 100644 --- a/src/main/java/techreborn/api/recipe/RecipeHanderer.java +++ b/src/main/java/techreborn/api/recipe/RecipeHanderer.java @@ -19,7 +19,7 @@ public class RecipeHanderer { public static List getRecipeClassFromName(String name){ List baseRecipeList = new ArrayList(); for(IBaseRecipeType baseRecipe : recipeList){ - if(baseRecipe.equals(name)){ + if(baseRecipe.getRecipeName().equals(name)){ baseRecipeList.add(baseRecipe); } } diff --git a/src/main/java/techreborn/init/ModRecipes.java b/src/main/java/techreborn/init/ModRecipes.java index 4026f0321..26ae618da 100644 --- a/src/main/java/techreborn/init/ModRecipes.java +++ b/src/main/java/techreborn/init/ModRecipes.java @@ -1,6 +1,6 @@ package techreborn.init; -import codechicken.nei.api.API; +import cpw.mods.fml.common.registry.GameRegistry; import ic2.api.item.IC2Items; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -8,12 +8,11 @@ import net.minecraft.item.ItemStack; import techreborn.api.BlastFurnaceRecipe; import techreborn.api.CentrifugeRecipie; import techreborn.api.TechRebornAPI; +import techreborn.api.recipe.RecipeHanderer; import techreborn.config.ConfigTechReborn; import techreborn.recipes.ImplosionCompressorRecipe; import techreborn.util.CraftingHelper; import techreborn.util.LogHelper; -import techreborn.util.RecipeRemover; -import cpw.mods.fml.common.registry.GameRegistry; public class ModRecipes { public static ConfigTechReborn config; @@ -196,7 +195,7 @@ public class ModRecipes { Blocks.cobblestone); TechRebornAPI.registerBlastFurnaceRecipe(new BlastFurnaceRecipe(new ItemStack(Items.apple), new ItemStack(Items.ender_pearl), new ItemStack(Items.golden_apple), new ItemStack(Items.diamond), 120, 1000)); - new ImplosionCompressorRecipe(new ItemStack(Items.diamond), new ItemStack(Items.golden_apple), new ItemStack(Items.brewing_stand), new ItemStack(Items.carrot), 120, 5); + RecipeHanderer.addRecipe(new ImplosionCompressorRecipe(new ItemStack(Items.diamond), new ItemStack(Items.golden_apple), new ItemStack(Items.brewing_stand), new ItemStack(Items.carrot), 120, 5)); LogHelper.info("Machine Recipes Added"); } diff --git a/src/main/java/techreborn/tiles/TileImplosionCompressor.java b/src/main/java/techreborn/tiles/TileImplosionCompressor.java index a953cfb69..b4f3d8a02 100644 --- a/src/main/java/techreborn/tiles/TileImplosionCompressor.java +++ b/src/main/java/techreborn/tiles/TileImplosionCompressor.java @@ -2,6 +2,7 @@ package techreborn.tiles; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import techreborn.api.recipe.RecipeCrafter; import techreborn.init.ModBlocks; import techreborn.util.Inventory; import ic2.api.energy.prefab.BasicSink; @@ -12,7 +13,19 @@ public class TileImplosionCompressor extends TileMachineBase implements IWrencha public int tickTime; public BasicSink energy; public Inventory inventory = new Inventory(4, "TileImplosionCompressor", 64); - + public RecipeCrafter crafter; + + public TileImplosionCompressor() { + energy = new BasicSink(this, 100000, 1); + //Input slots + int[] inputs = new int[2]; + inputs[0] = 0; + inputs[1] = 1; + int[] outputs = new int[2]; + outputs[0] = 2; + outputs[1] = 3; + crafter = new RecipeCrafter("implosionCompressorRecipe", this, energy, 2, 2, inventory, inputs, outputs); + } @Override public boolean wrenchCanSetFacing(EntityPlayer entityPlayer, int side) @@ -49,9 +62,9 @@ public class TileImplosionCompressor extends TileMachineBase implements IWrencha return new ItemStack(ModBlocks.ImplosionCompressor, 1); } - public boolean isComplete() - { - return false; + @Override + public void updateEntity() { + super.updateEntity(); + crafter.updateEntity(); } - }