From a69932dd1c1c2a92cf465656a92be6ac1af83884 Mon Sep 17 00:00:00 2001 From: Alex_hawks Date: Sun, 23 Feb 2014 16:04:22 +0800 Subject: [PATCH] NEI Plugin --- .../api/recipe/RecipeResource.java | 25 ++- .../core/nei/NEIResonantInductionConfig.java | 40 ++++ .../core/nei/RICrusherRecipeHandler.java | 26 +++ .../core/nei/RIGrinderRecipeHandler.java | 26 +++ .../core/nei/RIMixerRecipeHandler.java | 26 +++ .../core/nei/RISawmillRecipeHandler.java | 26 +++ .../core/nei/RISmelterRecipeHandler.java | 26 +++ .../core/nei/RITemplateRecipeHandler.java | 207 ++++++++++++++++++ .../languages/en_US.properties | 5 + .../textures/gui/gui_machine.png | Bin 0 -> 1896 bytes 10 files changed, 406 insertions(+), 1 deletion(-) create mode 100644 src/main/java/resonantinduction/core/nei/NEIResonantInductionConfig.java create mode 100644 src/main/java/resonantinduction/core/nei/RICrusherRecipeHandler.java create mode 100644 src/main/java/resonantinduction/core/nei/RIGrinderRecipeHandler.java create mode 100644 src/main/java/resonantinduction/core/nei/RIMixerRecipeHandler.java create mode 100644 src/main/java/resonantinduction/core/nei/RISawmillRecipeHandler.java create mode 100644 src/main/java/resonantinduction/core/nei/RISmelterRecipeHandler.java create mode 100644 src/main/java/resonantinduction/core/nei/RITemplateRecipeHandler.java create mode 100644 src/main/resources/assets/resonantinduction/textures/gui/gui_machine.png diff --git a/src/main/java/resonantinduction/api/recipe/RecipeResource.java b/src/main/java/resonantinduction/api/recipe/RecipeResource.java index def13039..9e4312c9 100644 --- a/src/main/java/resonantinduction/api/recipe/RecipeResource.java +++ b/src/main/java/resonantinduction/api/recipe/RecipeResource.java @@ -56,6 +56,10 @@ public abstract class RecipeResource { return this.itemStack.isItemEqual(((ItemStackResource) obj).itemStack); } + if (obj instanceof ItemStack) + { + return this.itemStack.isItemEqual((ItemStack) obj); + } return false; } @@ -65,6 +69,12 @@ public abstract class RecipeResource { return itemStack.copy(); } + + @Override + public String toString() + { + return "[ItemStackResource {" + itemStack.toString() + "}]"; + } } public static class OreDictResource extends RecipeResource @@ -98,7 +108,14 @@ public abstract class RecipeResource if (obj instanceof ItemStackResource) { - return this.name.equals(OreDictionary.getOreName(OreDictionary.getOreID(((ItemStackResource) obj).itemStack))); + return OreDictionary.getOres(name).contains(((ItemStackResource) obj).itemStack); + } + if (obj instanceof ItemStack) + { + for (ItemStack is : OreDictionary.getOres(name).toArray(new ItemStack[0])) + if (is.isItemEqual((ItemStack) obj)) + return true; + return false; } return false; @@ -109,6 +126,12 @@ public abstract class RecipeResource { return OreDictionary.getOres(name).get(0).copy(); } + + @Override + public String toString() + { + return "[OreDictResource {" + name.toString() + "}]"; + } } public static class FluidStackResource extends RecipeResource diff --git a/src/main/java/resonantinduction/core/nei/NEIResonantInductionConfig.java b/src/main/java/resonantinduction/core/nei/NEIResonantInductionConfig.java new file mode 100644 index 00000000..30d710fd --- /dev/null +++ b/src/main/java/resonantinduction/core/nei/NEIResonantInductionConfig.java @@ -0,0 +1,40 @@ +package resonantinduction.core.nei; + +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; + +public class NEIResonantInductionConfig implements IConfigureNEI +{ + + @Override + public void loadConfig() + { + API.registerRecipeHandler(new RIGrinderRecipeHandler()); + API.registerUsageHandler(new RIGrinderRecipeHandler()); + + API.registerRecipeHandler(new RICrusherRecipeHandler()); + API.registerUsageHandler(new RICrusherRecipeHandler()); + + API.registerRecipeHandler(new RIMixerRecipeHandler()); + API.registerUsageHandler(new RIMixerRecipeHandler()); + + API.registerRecipeHandler(new RISawmillRecipeHandler()); + API.registerUsageHandler(new RISawmillRecipeHandler()); + + API.registerRecipeHandler(new RISmelterRecipeHandler()); + API.registerUsageHandler(new RISmelterRecipeHandler()); + } + + @Override + public String getName() + { + return "Resonant Induction Plugin"; + } + + @Override + public String getVersion() + { + return "1.0"; + } + +} diff --git a/src/main/java/resonantinduction/core/nei/RICrusherRecipeHandler.java b/src/main/java/resonantinduction/core/nei/RICrusherRecipeHandler.java new file mode 100644 index 00000000..dc87af26 --- /dev/null +++ b/src/main/java/resonantinduction/core/nei/RICrusherRecipeHandler.java @@ -0,0 +1,26 @@ +package resonantinduction.core.nei; + +import calclavia.lib.utility.LanguageUtility; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; + +public class RICrusherRecipeHandler extends RITemplateRecipeHandler +{ + + @Override + public String getRecipeName() + { + return LanguageUtility.getLocal("resonantinduction.machine.crusher"); + } + + @Override + public void loadTransferRects() + { + + } + + @Override + public RecipeType getMachine() + { + return RecipeType.CRUSHER; + } +} diff --git a/src/main/java/resonantinduction/core/nei/RIGrinderRecipeHandler.java b/src/main/java/resonantinduction/core/nei/RIGrinderRecipeHandler.java new file mode 100644 index 00000000..8bfd8cec --- /dev/null +++ b/src/main/java/resonantinduction/core/nei/RIGrinderRecipeHandler.java @@ -0,0 +1,26 @@ +package resonantinduction.core.nei; + +import calclavia.lib.utility.LanguageUtility; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; + +public class RIGrinderRecipeHandler extends RITemplateRecipeHandler +{ + + @Override + public String getRecipeName() + { + return LanguageUtility.getLocal("resonantinduction.machine.grinder"); + } + + @Override + public void loadTransferRects() + { + + } + + @Override + public RecipeType getMachine() + { + return RecipeType.GRINDER; + } +} diff --git a/src/main/java/resonantinduction/core/nei/RIMixerRecipeHandler.java b/src/main/java/resonantinduction/core/nei/RIMixerRecipeHandler.java new file mode 100644 index 00000000..0de933a1 --- /dev/null +++ b/src/main/java/resonantinduction/core/nei/RIMixerRecipeHandler.java @@ -0,0 +1,26 @@ +package resonantinduction.core.nei; + +import calclavia.lib.utility.LanguageUtility; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; + +public class RIMixerRecipeHandler extends RITemplateRecipeHandler +{ + + @Override + public String getRecipeName() + { + return LanguageUtility.getLocal("resonantinduction.machine.mixer"); + } + + @Override + public void loadTransferRects() + { + + } + + @Override + public RecipeType getMachine() + { + return RecipeType.MIXER; + } +} diff --git a/src/main/java/resonantinduction/core/nei/RISawmillRecipeHandler.java b/src/main/java/resonantinduction/core/nei/RISawmillRecipeHandler.java new file mode 100644 index 00000000..8cd1a4ae --- /dev/null +++ b/src/main/java/resonantinduction/core/nei/RISawmillRecipeHandler.java @@ -0,0 +1,26 @@ +package resonantinduction.core.nei; + +import calclavia.lib.utility.LanguageUtility; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; + +public class RISawmillRecipeHandler extends RITemplateRecipeHandler +{ + + @Override + public String getRecipeName() + { + return LanguageUtility.getLocal("resonantinduction.machine.sawmill"); + } + + @Override + public void loadTransferRects() + { + + } + + @Override + public RecipeType getMachine() + { + return RecipeType.SAWMILL; + } +} diff --git a/src/main/java/resonantinduction/core/nei/RISmelterRecipeHandler.java b/src/main/java/resonantinduction/core/nei/RISmelterRecipeHandler.java new file mode 100644 index 00000000..6ca29fc1 --- /dev/null +++ b/src/main/java/resonantinduction/core/nei/RISmelterRecipeHandler.java @@ -0,0 +1,26 @@ +package resonantinduction.core.nei; + +import calclavia.lib.utility.LanguageUtility; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; + +public class RISmelterRecipeHandler extends RITemplateRecipeHandler +{ + + @Override + public String getRecipeName() + { + return LanguageUtility.getLocal("resonantinduction.machine.smelter"); + } + + @Override + public void loadTransferRects() + { + + } + + @Override + public RecipeType getMachine() + { + return RecipeType.SMELTER; + } +} diff --git a/src/main/java/resonantinduction/core/nei/RITemplateRecipeHandler.java b/src/main/java/resonantinduction/core/nei/RITemplateRecipeHandler.java new file mode 100644 index 00000000..89ee865b --- /dev/null +++ b/src/main/java/resonantinduction/core/nei/RITemplateRecipeHandler.java @@ -0,0 +1,207 @@ +package resonantinduction.core.nei; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; +import resonantinduction.api.recipe.MachineRecipes; +import resonantinduction.api.recipe.RecipeResource; +import resonantinduction.api.recipe.RecipeResource.FluidStackResource; +import resonantinduction.api.recipe.RecipeResource.ItemStackResource; +import resonantinduction.api.recipe.RecipeResource.OreDictResource; +import resonantinduction.core.Reference; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.TemplateRecipeHandler; + +public abstract class RITemplateRecipeHandler extends TemplateRecipeHandler +{ + int[][] inputSlots = new int[][] { + {11, 5}, {29, 5}, + {11, 23}, {29, 23}, + {11, 41}, {29, 41} + }; + int[][] outputSlots = new int[][] { + {121, 5}, {139, 5}, + {121, 23}, {139, 23}, + {121, 41}, {139, 41} + }; + + @Override + public abstract String getRecipeName(); + + public abstract MachineRecipes.RecipeType getMachine(); + + @Override + public String getOverlayIdentifier() + { + return getMachine().name().toLowerCase(); + } + + @Override + public void loadTransferRects() + { + //transferRects.add(new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(57, 26, 52, 22), getMachine().name().toLowerCase(), new Object[0])); + // No point, there is no GUI class to use it... :( + } + + @Override + public int recipiesPerPage() + { + return 1; + } + + @Override + public String getGuiTexture() + { + return Reference.PREFIX + Reference.GUI_DIRECTORY + "gui_machine.png"; + } + + @Override + public Class getGuiClass() + { + return null; + } + + @Override + public void loadCraftingRecipes(ItemStack result) + { + for (Map.Entry irecipe : MachineRecipes.INSTANCE.getRecipes(getMachine()).entrySet()) + { + CachedRIRecipe recipe = new CachedRIRecipe(irecipe); + if (recipe.canProduce(result)) + { + this.arecipes.add(recipe); + } + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) + { + for (Map.Entry irecipe : MachineRecipes.INSTANCE.getRecipes(getMachine()).entrySet()) + { + CachedRIRecipe recipe = new CachedRIRecipe(irecipe); + if (recipe.doesUse(ingredient)) + { + this.arecipes.add(recipe); + } + } + } + + public class CachedRIRecipe extends TemplateRecipeHandler.CachedRecipe + { + // Raw + private RecipeResource[] inputResources; + private RecipeResource[] outputResources; + + // Cache + private List inputs = new ArrayList(); + private List outputs = new ArrayList(); + + @Override + public List getOtherStacks() + { + if (outputs != null && !outputs.isEmpty()) + return outputs; + + int i = 0; + outputs = new ArrayList(); + for (RecipeResource output : outputResources) + { + if (output instanceof ItemStackResource) + { + this.outputs.add(new PositionedStack(((ItemStackResource) output).itemStack, outputSlots[i][0], outputSlots[i++][1])); + } else if (output instanceof OreDictResource) + { + this.outputs.add(new PositionedStack(OreDictionary.getOres(((OreDictResource) output).name), outputSlots[i][0], outputSlots[i++][1])); + } else if (output instanceof FluidStackResource) + { + //this.inputs.add(new PositionedStack(((FluidStackResource) output), outputSlots[i][0], outputSlots[i++][1])); + // TODO fluidstack compatibility + } + this.outputs.get(this.outputs.size() - 1).generatePermutations(); + } + return outputs; + } + + @Override + public List getIngredients() + { + if (inputs != null && !inputs.isEmpty()) + return inputs; + + int i = 0; + inputs = new ArrayList(); + for (RecipeResource input : inputResources) + { + if (input instanceof ItemStackResource) + { + this.inputs.add(new PositionedStack(((ItemStackResource) input).itemStack, inputSlots[i][0], inputSlots[i++][1])); + } else if (input instanceof OreDictResource) + { + this.inputs.add(new PositionedStack(OreDictionary.getOres(((OreDictResource) input).name), inputSlots[i][0], inputSlots[i++][1])); + } else if (input instanceof FluidStackResource) + { + //this.inputs.add(new PositionedStack(((FluidStackResource) input), inputSlots[i][0], inputSlots[i++][1])); + // TODO fluidstack compatibility + } + this.inputs.get(this.inputs.size() - 1).generatePermutations(); + } + return inputs; + } + + public CachedRIRecipe(Map.Entry recipe) + { + + this.inputResources = recipe.getKey(); + this.outputResources = recipe.getValue(); + } + + @Override + public PositionedStack getResult() + { + return null; + } + + public boolean canProduce(ItemStack product) + { + boolean canProduce = false; + this.getOtherStacks(); + + for (int i = 0; i < this.outputResources.length; i ++) + { + RecipeResource rStack = this.outputResources[i]; + if (rStack.equals(product)) + { + this.outputs.get(i).item = product; + canProduce = true; + } + } + + return canProduce; + } + + public boolean doesUse(ItemStack input) + { + boolean doesUse = false; + this.getIngredients(); + + for (int i = 0; i < this.inputResources.length; i++) + { + RecipeResource rStack = this.inputResources[i]; + if (rStack.equals(input)) + { + this.inputs.get(i).item = input; + doesUse = true; + } + } + + return doesUse; + } + + } + +} diff --git a/src/main/resources/assets/resonantinduction/languages/en_US.properties b/src/main/resources/assets/resonantinduction/languages/en_US.properties index 5669477d..a97165e1 100644 --- a/src/main/resources/assets/resonantinduction/languages/en_US.properties +++ b/src/main/resources/assets/resonantinduction/languages/en_US.properties @@ -104,6 +104,11 @@ tile.resonantinduction\:mixer.tooltip=The mixer mixes dusts with water to wash a tile.resonantinduction\:grindingWheel.name=Grinder Wheel tile.resonantinduction\:grindingWheel.tooltip=The grinding wheel grinds ores into rubble and dust. Larger torque allows faster grinding. tile.resonantinduction\:filter.name=Filter +resonantinduction.machine.grinder=Grinder +resonantinduction.machine.crusher=Crusher +resonantinduction.machine.mixer=Mixer +resonantinduction.machine.sawmill=Saw-mill +resonantinduction.machine.smelter=Smelter ### Electrical Module ## Blocks diff --git a/src/main/resources/assets/resonantinduction/textures/gui/gui_machine.png b/src/main/resources/assets/resonantinduction/textures/gui/gui_machine.png new file mode 100644 index 0000000000000000000000000000000000000000..44345340990f75daddc6f8799800ad0c0849571a GIT binary patch literal 1896 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6kBO{}`yZhL&WB>pE2MUgY(GVC3A&{w;5d+F7B|(0{z?46d0YmV2 zc2!`Ua~60+7BevL9Ry*<9TT(P0tMMiJbhi+?{dqrnH&AIw|oT@k}7eHC<)F_D=AMb zN@WO0%*-p%^K%VRC^ObG)iX3O_)@fxfq`kKr;B4qMcmt)xBVUm2(ShUJN^6L&+F;s zw?Ws@MSADn)p1oVkIq?U>+#P^lxer?{mT2e;N@jDCgr0!|i;|1K<5P6&Uu<5NhZbQ(@3v&SIf+;Fq&Ci^cu_(%)7-_5bn0d#(M~ zSKI#{pWjgFn%|OUu4raw^-g->&-YLF%Kj6*A(ZelLF&MxlNJp>7gsWDPXEnZuvYxh z!Rk(i`k&j98Eow3I6s_Qd|ilf-urrnhVS=}ecgW_Sd{M1`}z;4{P%IjGw!S{{Lyfnl4u z2Qa`M+(`uqGHuxF2nvwrdfq@mfrhudDAr(xF;W;xtB`Kx18AX8#xd3_%fvBFc~BZH%QKAICEpbq;zEx aWb7G>zO+o*#wrO){S2P2elF{r5}E+{5Jq7D literal 0 HcmV?d00001