diff options
author | miozune <miozune@gmail.com> | 2023-07-10 18:15:18 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-10 11:15:18 +0200 |
commit | fbfca2f60c6c83f77c9d80517b62db902fcc3c85 (patch) | |
tree | a5c9ec3156cfdd6c7138741931418b8af9ac186c /src | |
parent | 2cff3953cc8f84cc5094c1a914a625abaf1653e9 (diff) | |
download | GT5-Unofficial-fbfca2f60c6c83f77c9d80517b62db902fcc3c85.tar.gz GT5-Unofficial-fbfca2f60c6c83f77c9d80517b62db902fcc3c85.tar.bz2 GT5-Unofficial-fbfca2f60c6c83f77c9d80517b62db902fcc3c85.zip |
Migrate findRecipe method (#338)
* Migrate findRecipe method
* Update dependencies.gradle
* Update deps
* update deps
---------
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Former-commit-id: d173b08a7017209b9ea4383680c34fda56035b5c
Diffstat (limited to 'src')
4 files changed, 1 insertions, 615 deletions
diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/BWRecipes.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/BWRecipes.java index 116fd7f1ef..9fc49a3716 100644 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/BWRecipes.java +++ b/src/main/java/com/github/bartimaeusnek/bartworks/util/BWRecipes.java @@ -45,13 +45,10 @@ import com.gtnewhorizons.modularui.api.math.Pos2d; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import gregtech.api.GregTech_API; import gregtech.api.enums.GT_Values; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords; -import gregtech.api.objects.GT_ItemStack; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; @@ -812,85 +809,7 @@ public class BWRecipes { aNEISpecialValuePost, aShowVoltageAmperageInNEI, aNEIAllowed); - } - - /** - * finds a Recipe matching the aFluid, aSpecial and ItemStack Inputs. - * - * @param aTileEntity an Object representing the current coordinates of the executing - * Block/Entity/Whatever. This may be null, especially during Startup. - * @param aRecipe in case this is != null it will try to use this Recipe first when looking things - * up. - * @param aNotUnificated if this is T the Recipe searcher will unificate the ItemStack Inputs - * @param aDontCheckStackSizes if set to false will only return recipes that can be executed at least once with - * the provided input - * @param aVoltage Voltage of the Machine or Long.MAX_VALUE if it has no Voltage - * @param aFluids the Fluid Inputs - * @param aSpecialSlot the content of the Special Slot, the regular Manager doesn't do anything with - * this, but some custom ones do. Like this one. - * @param aInputs the Item Inputs - * @return the Recipe it has found or null for no matching Recipe - */ - public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, - boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, - ItemStack... aInputs) { - // No Recipes? Well, nothing to be found then. - if (mRecipeList.isEmpty()) return null; - - // Some Recipe Classes require a certain amount of Inputs of certain kinds. Like "at least 1 Fluid + 1 - // Stack" or "at least 2 Stacks" before they start searching for Recipes. - // This improves Performance massively, especially if people leave things like Circuits, Molds or Shapes in - // their Machines to select Sub Recipes. - if (GregTech_API.sPostloadFinished) { - if (mMinimalInputFluids > 0) { - if (aFluids == null) return null; - int tAmount = 0; - for (FluidStack aFluid : aFluids) if (aFluid != null) tAmount++; - if (tAmount < mMinimalInputFluids) return null; - } - if (mMinimalInputItems > 0) { - if (aInputs == null) return null; - int tAmount = 0; - for (ItemStack aInput : aInputs) if (aInput != null) tAmount++; - if (tAmount < mMinimalInputItems) return null; - } - } - - // Unification happens here in case the Input isn't already unificated. - if (aNotUnificated) aInputs = GT_OreDictUnificator.getStackArray(true, (Object) aInputs); - - // Check the Recipe which has been used last time in order to not have to search for it again, if possible. - if (aRecipe != null) if (!aRecipe.mFakeRecipe && aRecipe.mCanBeBuffered - && aRecipe.isRecipeInputEqual(false, aDontCheckStackSizes, aFluids, aInputs) - && BW_Util.areStacksEqualOrNull((ItemStack) aRecipe.mSpecialItems, aSpecialSlot)) - return aRecipe.mEnabled && aVoltage * mAmperage >= aRecipe.mEUt ? aRecipe : null; - - // Now look for the Recipes inside the Item HashMaps, but only when the Recipes usually have Items. - if (mUsualInputCount > 0 && aInputs != null) for (ItemStack tStack : aInputs) if (tStack != null) { - Collection<GT_Recipe> tRecipes = mRecipeItemMap.get(new GT_ItemStack(tStack)); - if (tRecipes != null) for (GT_Recipe tRecipe : tRecipes) if (!tRecipe.mFakeRecipe - && tRecipe.isRecipeInputEqual(false, aDontCheckStackSizes, aFluids, aInputs) - && BW_Util.areStacksEqualOrNull((ItemStack) tRecipe.mSpecialItems, aSpecialSlot)) - return tRecipe.mEnabled && aVoltage * mAmperage >= tRecipe.mEUt ? tRecipe : null; - tRecipes = mRecipeItemMap.get(new GT_ItemStack(GT_Utility.copyMetaData(GT_Values.W, tStack))); - if (tRecipes != null) for (GT_Recipe tRecipe : tRecipes) if (!tRecipe.mFakeRecipe - && tRecipe.isRecipeInputEqual(false, aDontCheckStackSizes, aFluids, aInputs) - && BW_Util.areStacksEqualOrNull((ItemStack) tRecipe.mSpecialItems, aSpecialSlot)) - return tRecipe.mEnabled && aVoltage * mAmperage >= tRecipe.mEUt ? tRecipe : null; - } - - // If the minimal Amount of Items for the Recipe is 0, then it could be a Fluid-Only Recipe, so check that - // Map too. - if (mMinimalInputItems == 0 && aFluids != null) for (FluidStack aFluid : aFluids) if (aFluid != null) { - Collection<GT_Recipe> tRecipes = mRecipeFluidMap.get(aFluid.getFluid()); - if (tRecipes != null) for (GT_Recipe tRecipe : tRecipes) if (!tRecipe.mFakeRecipe - && tRecipe.isRecipeInputEqual(false, aDontCheckStackSizes, aFluids, aInputs) - && BW_Util.areStacksEqualOrNull((ItemStack) tRecipe.mSpecialItems, aSpecialSlot)) - return tRecipe.mEnabled && aVoltage * mAmperage >= tRecipe.mEUt ? tRecipe : null; - } - - // And nothing has been found. - return null; + setSpecialSlotSensitive(true); } } diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/emt/recipe/TCRecipeHandler.java b/src/main/java/com/github/bartimaeusnek/crossmod/emt/recipe/TCRecipeHandler.java deleted file mode 100644 index 124b41cd2f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/emt/recipe/TCRecipeHandler.java +++ /dev/null @@ -1,312 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.emt.recipe; - -import static com.github.bartimaeusnek.crossmod.thaumcraft.util.ThaumcraftHandler.AspectAdder; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.util.BWRecipes; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.github.bartimaeusnek.crossmod.thaumcraft.util.ThaumcraftHandler; -import com.google.common.collect.ArrayListMultimap; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -@SuppressWarnings("ALL") -public class TCRecipeHandler { - - public static final GT_Recipe.GT_Recipe_Map alchemicalConstructHandler = new TCRecipeHandler.TCRecipeMap( - new HashSet<>(15000), - "bwcm.recipe.alchemicalConstruct", - "Industrical Alchemical Construct", - null, - "gregtech:textures/gui/basicmachines/Default", - 2, - 1, - 2, - 0, - 1, - "", - 1, - "", - true, - true); - static Class aCrucibleRecipeClass; - static Class aThaumcraftAPI; - static Field craftingRecipes; - static Field aCrucibleRecipeField; - static Field aCrucibleRecipeCatalyst; - static Field aspects; - static Field key; - - static { - try { - aCrucibleRecipeClass = Class.forName("thaumcraft.api.crafting.CrucibleRecipe"); - aThaumcraftAPI = Class.forName("thaumcraft.api.ThaumcraftApi"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - try { - aspects = aCrucibleRecipeClass.getField("aspects"); - - key = aCrucibleRecipeClass.getField("key"); - - aCrucibleRecipeField = aCrucibleRecipeClass.getDeclaredField("recipeOutput"); - aCrucibleRecipeField.setAccessible(true); - - aCrucibleRecipeCatalyst = aCrucibleRecipeClass.getField("catalyst"); - - craftingRecipes = aThaumcraftAPI.getDeclaredField("craftingRecipes"); - craftingRecipes.setAccessible(true); - } catch (NoSuchFieldException e) { - e.printStackTrace(); - } - } - - public static void init() throws IllegalAccessException, InvocationTargetException { - ArrayList tcCraftingList = (ArrayList) craftingRecipes.get(null); - HashSet crucibleRecipes = new HashSet(); - for (Object o : tcCraftingList) { - if (TCRecipeHandler.aCrucibleRecipeClass.isInstance(o)) crucibleRecipes.add(o); - } - TCRecipeHandler.convertCrucibleRecipesToGTRecipes(crucibleRecipes); - } - - public static void convertCrucibleRecipesToGTRecipes(HashSet crucibleRecipes) - throws IllegalAccessException, InvocationTargetException { - HashSet<GT_Recipe> ret = new HashSet<>(); - ArrayListMultimap<ItemStack, Integer> itemToCircuitConfigMap = ArrayListMultimap.create(); - ArrayListMultimap<ItemStack, Object> itemToAspectsMap = ArrayListMultimap.create(); - ArrayListMultimap<ItemStack, ItemStack> itemToOutputMap = ArrayListMultimap.create(); - ArrayListMultimap<ItemStack, String> itemToResearchMap = ArrayListMultimap.create(); - - for (Object o : crucibleRecipes) { - - String key = (String) TCRecipeHandler.key.get(o); - ItemStack out = (ItemStack) TCRecipeHandler.aCrucibleRecipeField.get(o); - Object aspects = TCRecipeHandler.aspects.get(o); - Object cat = TCRecipeHandler.aCrucibleRecipeCatalyst.get(o); - - if (cat instanceof ItemStack) { - itemToAspectsMap.put((ItemStack) cat, aspects); - itemToOutputMap.put((ItemStack) cat, out); - itemToResearchMap.put((ItemStack) cat, key); - } else if (cat instanceof String) { - for (ItemStack stack : OreDictionary.getOres((String) cat)) { - itemToAspectsMap.put(stack, aspects); - itemToOutputMap.put(stack, out); - itemToResearchMap.put(stack, key); - } - } else if (cat instanceof ArrayList && ((ArrayList) cat).size() > 0) { - for (ItemStack stack : ((ArrayList<ItemStack>) cat)) { - itemToAspectsMap.put(stack, aspects); - itemToOutputMap.put(stack, out); - itemToResearchMap.put(stack, key); - } - } - } - for (ItemStack o : itemToAspectsMap.keySet()) { - if (o.getItemDamage() == Short.MAX_VALUE) itemToCircuitConfigMap.put(o, 24); - else for (int j = 1; j <= itemToAspectsMap.get(o).size(); j++) { - itemToCircuitConfigMap.put(o, j % 24); - } - - for (int j = 0; j < itemToAspectsMap.get(o).size(); j++) { - ret.add( - addRecipes( - itemToResearchMap.get(o).get(j), - itemToOutputMap.get(o).get(j), - itemToAspectsMap.get(o).get(j), - o, - itemToCircuitConfigMap.get(o).get(j))); - } - } - - for (GT_Recipe recipe : ret) { - TCRecipeHandler.alchemicalConstructHandler.add(recipe); - } - } - - public static GT_Recipe addRecipes(String key, ItemStack out, Object aspects, ItemStack cat, int config) - throws InvocationTargetException, IllegalAccessException { - - NBTTagCompound toWrite = new NBTTagCompound(); - ThaumcraftHandler.AspectAdder.writeAspectListToNBT.invoke(aspects, toWrite); - ItemStack fake = new ItemStack(Items.feather); - fake.setTagCompound(toWrite); - fake.setStackDisplayName(key); - GT_Recipe recipe = new BWRecipes.DynamicGTRecipe( - false, - new ItemStack[] { cat, GT_Utility.getIntegratedCircuit(config) }, - new ItemStack[] { out }, - fake, - null, - null, - null, - 60, - 480, - 0); - return recipe; - } - - static class TCRecipeMap extends GT_Recipe.GT_Recipe_Map { - - public TCRecipeMap(Collection<GT_Recipe> aRecipeList, String aUnlocalizedName, String aLocalName, - String aNEIName, String aNEIGUIPath, int aUsualInputCount, int aUsualOutputCount, - int aMinimalInputItems, int aMinimalInputFluids, int aAmperage, String aNEISpecialValuePre, - int aNEISpecialValueMultiplier, String aNEISpecialValuePost, boolean aShowVoltageAmperageInNEI, - boolean aNEIAllowed) { - super( - aRecipeList, - aUnlocalizedName, - aLocalName, - aNEIName, - aNEIGUIPath, - aUsualInputCount, - aUsualOutputCount, - aMinimalInputItems, - aMinimalInputFluids, - aAmperage, - aNEISpecialValuePre, - aNEISpecialValueMultiplier, - aNEISpecialValuePost, - aShowVoltageAmperageInNEI, - aNEIAllowed); - } - - @Override - public GT_Recipe findRecipe(IHasWorldObjectAndCoords aTileEntity, GT_Recipe aRecipe, boolean aNotUnificated, - boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot, - ItemStack... aInputs) { - // No Recipes? Well, nothing to be found then. - if (mRecipeList.isEmpty()) return null; - - // Some Recipe Classes require a certain amount of Inputs of certain kinds. Like "at least 1 Fluid + 1 - // Stack" or "at least 2 Stacks" before they start searching for Recipes. - // This improves Performance massively, especially if people leave things like Circuits, Molds or Shapes in - // their Machines to select Sub Recipes. - if (GregTech_API.sPostloadFinished) { - if (this.mMinimalInputItems > 0) { - if (aInputs == null) return null; - int tAmount = 0; - for (ItemStack aInput : aInputs) if (aInput != null) tAmount++; - if (tAmount < this.mMinimalInputItems) return null; - } - } - - // Unification happens here in case the Input isn't already unificated. - if (aNotUnificated) aInputs = GT_OreDictUnificator.getStackArray(true, (Object[]) aInputs); - - // // Check the Recipe which has been used last time in order to not have to search for it again, - // if possible. - // if (aRecipe != null) - // if (!aRecipe.mFakeRecipe && aRecipe.mCanBeBuffered && aRecipe.isRecipeInputEqual(false, - // aDontCheckStackSizes, aFluids, aInputs)) { - // NBTTagCompound toCheckNBT = aSpecialSlot.getTagCompound(); - // NBTTagCompound givenNBT = ((ItemStack)aRecipe.mSpecialItems).getTagCompound(); - // Object aAspectListToCheck = null; - // Object aGivenAspectList = null; - // try { - // aAspectListToCheck = AspectAdder.mAspectListClass.newInstance(); - // aGivenAspectList = AspectAdder.mAspectListClass.newInstance(); - // AspectAdder.readAspectListFromNBT.invoke(aAspectListToCheck,toCheckNBT); - // AspectAdder.readAspectListFromNBT.invoke(aGivenAspectList,givenNBT); - // if - // (!TCRecipeHandler.TCRecipeMap.containsAspects(aAspectListToCheck,aGivenAspectList)) - // return null; - // } catch (InstantiationException | IllegalAccessException | InvocationTargetException - // e) { - // e.printStackTrace(); - // return null; - // } - // return aRecipe.mEnabled && aVoltage * mAmperage >= aRecipe.mEUt ? aRecipe : null; - // } - - // Now look for the Recipes inside the Item HashMaps, but only when the Recipes usually have Items. - if (this.mUsualInputCount > 0 && aInputs != null) for (ItemStack tStack : aInputs) if (tStack != null) { - Collection<GT_Recipe> tRecipes = mRecipeItemMap.get(new GT_ItemStack(tStack)); - if (tRecipes != null) for (GT_Recipe tRecipe : tRecipes) if (!tRecipe.mFakeRecipe - && tRecipe.isRecipeInputEqual(false, aDontCheckStackSizes, aFluids, aInputs)) { - NBTTagCompound toCheckNBT = aSpecialSlot.getTagCompound(); - NBTTagCompound givenNBT = ((ItemStack) aRecipe.mSpecialItems).getTagCompound(); - Object aAspectListToCheck = null; - Object aGivenAspectList = null; - try { - aAspectListToCheck = AspectAdder.mAspectListClass.newInstance(); - aGivenAspectList = AspectAdder.mAspectListClass.newInstance(); - AspectAdder.readAspectListFromNBT.invoke(aAspectListToCheck, toCheckNBT); - AspectAdder.readAspectListFromNBT.invoke(aGivenAspectList, givenNBT); - if (!TCRecipeHandler.TCRecipeMap.containsAspects(aAspectListToCheck, aGivenAspectList)) - continue; - } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); - return null; - } - return tRecipe.mEnabled && aVoltage * mAmperage >= tRecipe.mEUt ? tRecipe : null; - } - tRecipes = mRecipeItemMap.get(new GT_ItemStack(GT_Utility.copyMetaData(GT_Values.W, tStack))); - if (tRecipes != null) for (GT_Recipe tRecipe : tRecipes) if (!tRecipe.mFakeRecipe - && tRecipe.isRecipeInputEqual(false, aDontCheckStackSizes, aFluids, aInputs) - && BW_Util.areStacksEqualOrNull((ItemStack) tRecipe.mSpecialItems, aSpecialSlot)) { - NBTTagCompound toCheckNBT = aSpecialSlot.getTagCompound(); - NBTTagCompound givenNBT = ((ItemStack) aRecipe.mSpecialItems).getTagCompound(); - Object aAspectListToCheck = null; - Object aGivenAspectList = null; - try { - aAspectListToCheck = AspectAdder.mAspectListClass.newInstance(); - aGivenAspectList = AspectAdder.mAspectListClass.newInstance(); - AspectAdder.readAspectListFromNBT.invoke(aAspectListToCheck, toCheckNBT); - AspectAdder.readAspectListFromNBT.invoke(aGivenAspectList, givenNBT); - if (!TCRecipeHandler.TCRecipeMap.containsAspects(aAspectListToCheck, aGivenAspectList)) - continue; - } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); - return null; - } - return tRecipe.mEnabled && aVoltage * mAmperage >= tRecipe.mEUt ? tRecipe : null; - } - } - // And nothing has been found. - return null; - } - - private static boolean containsAspects(Object aAspectListToCheck, Object aGivenAspectList) - throws InvocationTargetException, IllegalAccessException { - Object[] aspects = (Object[]) ThaumcraftHandler.AspectAdder.getAspects.invoke(aGivenAspectList); - for (int i = 0; i < aspects.length; i++) { - if ((int) ThaumcraftHandler.AspectAdder.getAmount.invoke(aAspectListToCheck, aspects[i]) - < (int) ThaumcraftHandler.AspectAdder.getAmount.invoke(aGivenAspectList, aspects[i])) - return false; - } - return true; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/emt/tileentities/multi/GT_Industrial_Alchemic_Construct.java b/src/main/java/com/github/bartimaeusnek/crossmod/emt/tileentities/multi/GT_Industrial_Alchemic_Construct.java deleted file mode 100644 index 25fe6af637..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/emt/tileentities/multi/GT_Industrial_Alchemic_Construct.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.emt.tileentities.multi; - -import static gregtech.api.enums.GT_Values.V; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.crossmod.emt.recipe.TCRecipeHandler; -import com.github.bartimaeusnek.crossmod.emt.util.EMTHandler; -import com.github.bartimaeusnek.crossmod.thaumcraft.util.ThaumcraftHandler; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -@SuppressWarnings("ALL") -public class GT_Industrial_Alchemic_Construct extends GT_MetaTileEntity_MultiBlockBase { - - private List<Object> mEssentiaHatches = new ArrayList<>(); - - public boolean addInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity.getClass().isInstance(EMTHandler.aEssentiaInputHatch)) - return this.addEssetiaHatchToList(aTileEntity, aBaseCasingIndex); - return super.addInputToMachineList(aTileEntity, aBaseCasingIndex); - } - - private boolean addEssetiaHatchToList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } else if (aTileEntity.getClass().isInstance(EMTHandler.aEssentiaInputHatch)) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mEssentiaHatches.add(aMetaTileEntity); - } else { - return false; - } - } - } - - public GT_Industrial_Alchemic_Construct(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - private GT_Industrial_Alchemic_Construct(String aName) { - super(aName); - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - @Override - public boolean checkRecipe(ItemStack itemStack) { - ItemStack stack = new ItemStack(Items.feather); - String owner = this.getBaseMetaTileEntity().getOwnerName(); - Object allAspects = null; - try { - allAspects = ThaumcraftHandler.AspectAdder.mAspectListClass.newInstance(); - for (Object o : this.mEssentiaHatches) { - Object aspectList = EMTHandler.aAspectField.get(o); - ThaumcraftHandler.AspectAdder.add.invoke(allAspects, aspectList); - } - NBTTagCompound toWrite = (NBTTagCompound) ThaumcraftHandler.AspectAdder.writeAspectListToNBT - .invoke(allAspects, new NBTTagCompound()); - stack.setTagCompound(toWrite); - } catch (IllegalAccessException | InstantiationException | InvocationTargetException e) { - e.printStackTrace(); - return false; - } - ItemStack[] tInputs = this.getStoredInputs().toArray(new ItemStack[0]); - ItemStack outputItems = null; - - long tVoltage = this.getMaxInputVoltage(); - byte tTier = (byte) Math.max(1, Math.min(GT_Utility.getTier(tVoltage), V.length - 1)); - GT_Recipe tRecipe = TCRecipeHandler.alchemicalConstructHandler - .findRecipe(this.getBaseMetaTileEntity(), null, false, false, V[tTier], null, stack, tInputs); - ItemStack helper = (ItemStack) tRecipe.mSpecialItems; - NBTTagCompound tagCompound = helper.getTagCompound(); - String research = tagCompound.getCompoundTag("display").getString("Name"); - Object aspectList = null; - try { - aspectList = ThaumcraftHandler.AspectAdder.mAspectListClass.newInstance(); - ThaumcraftHandler.AspectAdder.readAspectListFromNBT.invoke(aspectList, tagCompound); - } catch (IllegalAccessException | InvocationTargetException | InstantiationException e) { - e.printStackTrace(); - return false; - } - boolean complete = false; - try { - complete = (boolean) ThaumcraftHandler.AspectAdder.isResearchComplete.invoke(null, owner, research); - } catch (IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); - } - if (!complete) return false; - if (!tRecipe.isRecipeInputEqual(true, new FluidStack[0], tInputs)) return false; - LinkedHashMap<Object, Integer> list = null; - LinkedHashMap<Object, Integer> needed = null; - try { - list = (LinkedHashMap) ThaumcraftHandler.AspectAdder.linkedAspektList.get(allAspects); - needed = (LinkedHashMap) ThaumcraftHandler.AspectAdder.linkedAspektList.get(aspectList); - } catch (IllegalAccessException e) { - e.printStackTrace(); - return false; - } - assert list != null; - assert needed != null; - for (Map.Entry<Object, Integer> toTake : needed.entrySet()) { - list.replace(toTake.getKey(), list.get(toTake.getKey()) - toTake.getValue()); - } - this.addOutput(tRecipe.mOutputs[0]); - this.updateSlots(); - return true; - } - - @Override - public boolean checkMachine(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - return false; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 0; - } - - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_Industrial_Alchemic_Construct(mName); - } - - @Override - public String[] getDescription() { - return new String[0]; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity iGregTechTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean b3, boolean b4) { - return new ITexture[0]; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/emt/util/EMTHandler.java b/src/main/java/com/github/bartimaeusnek/crossmod/emt/util/EMTHandler.java deleted file mode 100644 index afc42577fe..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/emt/util/EMTHandler.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.emt.util; - -import java.lang.reflect.Field; - -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; - -@SuppressWarnings("unchecked") -public class EMTHandler { - - public static Class<? extends GT_MetaTileEntity_Hatch_Input> aEssentiaInputHatch; - public static Field aAspectField; - - static { - try { - aEssentiaInputHatch = (Class<? extends GT_MetaTileEntity_Hatch_Input>) Class - .forName("emt.gthandler.common.implementations.EssentiaHatch"); - aAspectField = aEssentiaInputHatch.getDeclaredField("current"); - aAspectField.setAccessible(true); - } catch (ClassNotFoundException | NoSuchFieldException e) { - e.printStackTrace(); - } - } -} |