diff --git a/dependencies.gradle b/dependencies.gradle index 9ef4bd6fc..8070dc40e 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -35,27 +35,21 @@ */ dependencies { api('com.github.GTNewHorizons:NotEnoughItems:2.8.96-GTNH:dev') - api('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-929-GTNH:dev') + api('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-936-GTNH:dev') api('com.github.GTNewHorizons:waila:1.19.25:dev') api("com.github.GTNewHorizons:GTNHLib:0.9.62:dev") - implementation("com.github.GTNewHorizons:WirelessCraftingTerminal:1.12.15:dev") { - exclude group: 'com.github.GTNewHorizons', module: 'Applied-Energistics-2-Unofficial' - } - compileOnly('com.github.GTNewHorizons:Baubles-Expanded:2.2.14-GTNH:dev') + compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.57:dev') {transitive = false} compileOnly('com.github.GTNewHorizons:ExtraCells2:2.5.35:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:ForestryMC:4.11.19:dev') compileOnly('com.github.GTNewHorizons:EnderIO:5.2.62:dev') - compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.52.495:dev') { - exclude group: 'com.github.GTNewHorizons', module: 'AE2FluidCraft-Rework' - exclude group: 'com.github.GTNewHorizons', module: 'Applied-Energistics-2-Unofficial' - } - - compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') - compileOnly('com.gregoriust.gregtech:gregtech_1.7.10:6.14.23:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:OpenComputers:1.12.39-GTNH:dev') { transitive = false } - compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.7.48-GTNH:dev') { transitive = false } + + compileOnly("org.jetbrains:annotations:26.1.0") runtimeOnlyNonPublishable("com.github.GTNewHorizons:DuraDisplay:1.4.2:dev") + runtimeOnlyNonPublishable("com.github.GTNewHorizons:WirelessCraftingTerminal:1.12.15:dev") { + exclude group: 'com.github.GTNewHorizons', module: 'Applied-Energistics-2-Unofficial' + } } diff --git a/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java b/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java index 430524ffd..3a17ab1b7 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemBaseWirelessTerminal.java @@ -2,7 +2,7 @@ import static com.glodblock.github.common.item.ItemWirelessUltraTerminal.MODE; import static com.glodblock.github.loader.recipe.WirelessTerminalEnergyRecipe.getEnergyCard; -import static com.glodblock.github.loader.recipe.WirelessTerminalRecipe.getInfinityBoosterCard; +import static com.glodblock.github.loader.recipe.WirelessTerminalQuantumBridgeRecipe.getQuantumBridgeCard; import static com.glodblock.github.util.Util.DimensionalCoordSide.hasEnergyCard; import static com.glodblock.github.util.Util.hasInfinityBoosterCard; @@ -48,15 +48,16 @@ public ItemBaseWirelessTerminal(Object t) { @Override public ItemStack onItemRightClick(final ItemStack item, final World w, final EntityPlayer player) { - if (player.isSneaking()) return removeInfinityBoosterCard(player, item); // todo: doesn't work in universal - // terminal + if (player.isSneaking()) return removeQuantumBridgeCard(player, item); // todo: doesn't work in universal + // terminal return super.onItemRightClick(item, w, player); } - private ItemStack removeInfinityBoosterCard(final EntityPlayer player, ItemStack is) { + private ItemStack removeQuantumBridgeCard(final EntityPlayer player, ItemStack is) { if (hasInfinityBoosterCard(is)) { - if (!player.inventory.addItemStackToInventory(getInfinityBoosterCard())) { - player.entityDropItem(getInfinityBoosterCard(), 0); + ItemStack quantumBridgeCardStack = getQuantumBridgeCard().copy(); + if (!player.inventory.addItemStackToInventory(quantumBridgeCardStack)) { + player.entityDropItem(quantumBridgeCardStack, 0); } is.getTagCompound().setBoolean(infinityBoosterCard, false); } @@ -71,7 +72,7 @@ public void addCheckedInformation(ItemStack stack, EntityPlayer player, List term = Util.getUltraWirelessTerm(player); - if (term == null) return false; - if (term.getRight().getItem() instanceof ItemWirelessUltraTerminal) { - return Util.hasInfinityBoosterCard(term.getRight()); - } - return false; - } - @Override public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) { if (Platform.isServer() && entityLivingBase instanceof EntityPlayer player) { diff --git a/src/main/java/com/glodblock/github/crossmod/thaumcraft/ThaumicEnergisticsCrafting.java b/src/main/java/com/glodblock/github/crossmod/thaumcraft/ThaumicEnergisticsCrafting.java index ccb3d8339..122aca99c 100644 --- a/src/main/java/com/glodblock/github/crossmod/thaumcraft/ThaumicEnergisticsCrafting.java +++ b/src/main/java/com/glodblock/github/crossmod/thaumcraft/ThaumicEnergisticsCrafting.java @@ -1,7 +1,5 @@ package com.glodblock.github.crossmod.thaumcraft; -import javax.annotation.Nullable; - import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -9,13 +7,10 @@ import com.glodblock.github.util.ModAndClassUtil; +import appeng.api.storage.data.AEStackTypeRegistry; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEStack; -import cpw.mods.fml.common.Optional.Method; import cpw.mods.fml.common.registry.GameRegistry; -import thaumcraft.api.aspects.Aspect; -import thaumicenergistics.common.items.ItemCraftingAspect; -import thaumicenergistics.common.storage.AEEssentiaStack; public class ThaumicEnergisticsCrafting { @@ -37,18 +32,23 @@ public static boolean isAspectStack(ItemStack stack) { } public static IAEStack convertItemAspectStack(IAEStack stack) { - if (stack instanceof IAEItemStack ais && isAspectStack(ais.getItemStack())) { - Aspect aspect = getAspect(ais.getItemStack()); - if (aspect == null) return stack; + if (AEStackTypeRegistry.getType("essentia") == null) return stack; - return new AEEssentiaStack(aspect, stack.getStackSize()); + if (stack instanceof IAEItemStack ais && isAspectStack(ais.getItemStack())) { + String aspectTag = getAspectTag(ais.getItemStack()); + if (aspectTag == null || aspectTag.isEmpty()) return stack; + + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("StackType", "essentia"); + tag.setString("AspectTag", aspectTag); + tag.setLong("Cnt", stack.getStackSize()); + return IAEStack.fromNBTGeneric(tag); } else { return stack; } } - @Method(modid = "thaumicenergistics") - private static @Nullable Aspect getAspect(ItemStack stack) { + private static String getAspectTag(ItemStack stack) { if (stack == null) return null; if (stack.getItem() == neiAddonAspect) { @@ -58,11 +58,14 @@ public static IAEStack convertItemAspectStack(IAEStack stack) { String aspect = aspects.getCompoundTagAt(0).getString("key"); if (aspect.isEmpty()) return null; - return Aspect.getAspect(aspect); + return aspect; } if (stack.getItem() == thaumicEnergisticsAspect) { - return Aspect.getAspect(ItemCraftingAspect.getAspect(stack).getTag()); + NBTTagCompound tag = stack.getTagCompound(); + if (tag != null && tag.hasKey("Aspect")) { + return tag.getString("Aspect"); + } } return null; diff --git a/src/main/java/com/glodblock/github/loader/RecipeLoader.java b/src/main/java/com/glodblock/github/loader/RecipeLoader.java index e2e678637..6c160a642 100644 --- a/src/main/java/com/glodblock/github/loader/RecipeLoader.java +++ b/src/main/java/com/glodblock/github/loader/RecipeLoader.java @@ -175,8 +175,6 @@ public class RecipeLoader implements Runnable { GameRegistry.findItem("appliedenergistics2", "item.ItemMultiMaterial"), 1, 43); - private static final ItemStack WCT_WIRELESS_TERM = GameRegistry - .findItemStack("ae2wct", "wirelessCraftingTerminal", 1); public static final ItemStack BUCKET = new ItemStack(Items.bucket, 1); public static final ItemStack IRON_BAR = new ItemStack(Blocks.iron_bars, 1); public static final ItemStack AE2_ADVANCED_CARD = new ItemStack( @@ -711,7 +709,8 @@ public static void runTerminalRecipe() { } ItemStack[] term = { AE2_WIRELESS_TERMINAL, WIRELESS_PATTERN_TERM.stack(), WIRELESS_INTERFACE_TERM.stack(), - WIRELESS_LEVEL_TERM.stack(), WCT_WIRELESS_TERM }; + WIRELESS_LEVEL_TERM.stack(), + ModAndClassUtil.WCT ? GameRegistry.findItemStack("ae2wct", "wirelessCraftingTerminal", 1) : null }; GameRegistry.addShapelessRecipe( WIRELESS_ULTRA_TERM.stack(), Arrays.stream(term).filter(Objects::nonNull).toArray()); diff --git a/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalRecipe.java b/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalRecipe.java index b3a8467fe..8e509c70f 100644 --- a/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalRecipe.java +++ b/src/main/java/com/glodblock/github/loader/recipe/WirelessTerminalRecipe.java @@ -9,35 +9,41 @@ import net.minecraft.item.crafting.ShapelessRecipes; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -import net.p455w0rd.wirelesscraftingterminal.items.ItemEnum; -import net.p455w0rd.wirelesscraftingterminal.items.ItemInfinityBooster; import com.glodblock.github.common.item.ItemBaseWirelessTerminal; +import com.glodblock.github.util.ModAndClassUtil; import appeng.util.Platform; +import cpw.mods.fml.common.registry.GameRegistry; public class WirelessTerminalRecipe extends ShapelessRecipes { - private static final ItemStack infinityBoosterCard = ItemEnum.BOOSTER_CARD.getStack(); + private static ItemStack infinityBoosterCard; private final ItemStack installedTerm; public WirelessTerminalRecipe(ItemStack term) { - super(term, Arrays.asList(term, infinityBoosterCard)); + super(term, Arrays.asList(term, getInfinityBoosterCard())); this.installedTerm = installInfinityBoosterCard(term); } @Override public boolean matches(InventoryCrafting inv, World w) { ItemStack term = inv.getStackInSlot(0); - ItemStack infinityBoosterCard = inv.getStackInSlot(1); + ItemStack card = inv.getStackInSlot(1); + ItemStack recipeCard = getInfinityBoosterCard(); return term != null && term.getItem() instanceof ItemBaseWirelessTerminal && !hasInfinityBoosterCard(term) - && infinityBoosterCard != null - && infinityBoosterCard.getItem() instanceof ItemInfinityBooster; + && card != null + && recipeCard != null + && card.getItem() == recipeCard.getItem(); } public static ItemStack getInfinityBoosterCard() { - return infinityBoosterCard.copy(); + if (!ModAndClassUtil.WCT) return null; + if (infinityBoosterCard == null) { + infinityBoosterCard = GameRegistry.findItemStack("ae2wct", "infinityBoosterCard", 1); + } + return infinityBoosterCard == null ? null : infinityBoosterCard.copy(); } @Override diff --git a/src/main/java/com/glodblock/github/nei/NEIUtils.java b/src/main/java/com/glodblock/github/nei/NEIUtils.java deleted file mode 100644 index 0657ebfab..000000000 --- a/src/main/java/com/glodblock/github/nei/NEIUtils.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.glodblock.github.nei; - -import java.util.LinkedList; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.nei.object.OrderStack; - -public class NEIUtils { - - public static List> compress(List> list) { - List> comp = new LinkedList<>(); - for (OrderStack orderStack : list) { - if (orderStack == null) continue; - if (orderStack.getStack() instanceof FluidStack) { - comp.add(orderStack); - continue; - } - ItemStack currentStack = (ItemStack) orderStack.getStack(); - if (currentStack.stackSize == 0) continue; - boolean find = false; - for (OrderStack storedStack : comp) { - if (storedStack == null || !(storedStack.getStack() instanceof ItemStack firstStack)) continue; - boolean areItemStackEqual = firstStack.isItemEqual(currentStack) - && ItemStack.areItemStackTagsEqual(firstStack, currentStack); - if (areItemStackEqual - && (firstStack.stackSize + currentStack.stackSize) <= firstStack.getMaxStackSize()) { - find = true; - ((ItemStack) storedStack.getStack()).stackSize = firstStack.stackSize + currentStack.stackSize; - } - } - if (!find) { - comp.add(orderStack); - } - } - return comp.stream().filter(Objects::nonNull).collect(Collectors.toList()); - } - - public static List> clearNull(List> list) { - AtomicInteger i = new AtomicInteger(0); - return list.stream().filter(Objects::nonNull) - .filter( - orderStack -> !(orderStack.getStack() != null && orderStack.getStack() instanceof ItemStack - && ((ItemStack) orderStack.getStack()).stackSize == 0)) - .peek(orderStack -> orderStack.setIndex(i.getAndIncrement())).collect(Collectors.toList()); - } -} diff --git a/src/main/java/com/glodblock/github/nei/object/IRecipeExtractor.java b/src/main/java/com/glodblock/github/nei/object/IRecipeExtractor.java deleted file mode 100644 index b6be1d31f..000000000 --- a/src/main/java/com/glodblock/github/nei/object/IRecipeExtractor.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.glodblock.github.nei.object; - -import java.util.List; - -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.IRecipeHandler; - -public interface IRecipeExtractor { - - List> getInputIngredients(List rawInputs); - - List> getOutputIngredients(List rawOutputs); - - default List> getInputIngredients(List rawInputs, IRecipeHandler recipe, int index) { - return getInputIngredients(rawInputs); - } - - default List> getOutputIngredients(List rawOutputs, IRecipeHandler recipe, - int index) { - return getOutputIngredients(rawOutputs); - } -} diff --git a/src/main/java/com/glodblock/github/nei/object/IRecipeExtractorLegacy.java b/src/main/java/com/glodblock/github/nei/object/IRecipeExtractorLegacy.java deleted file mode 100644 index c69c7f833..000000000 --- a/src/main/java/com/glodblock/github/nei/object/IRecipeExtractorLegacy.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.glodblock.github.nei.object; - -public interface IRecipeExtractorLegacy extends IRecipeExtractor { - - String getClassName(); -} diff --git a/src/main/java/com/glodblock/github/nei/object/IllegalOrderStackID.java b/src/main/java/com/glodblock/github/nei/object/IllegalOrderStackID.java deleted file mode 100644 index 7f7a219c3..000000000 --- a/src/main/java/com/glodblock/github/nei/object/IllegalOrderStackID.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.glodblock.github.nei.object; - -public class IllegalOrderStackID extends RuntimeException { - - private static final long serialVersionUID = -3782749325355674453L; - - public IllegalOrderStackID(int id) { - super("Illegal type id: " + id); - } -} diff --git a/src/main/java/com/glodblock/github/nei/object/OrderStack.java b/src/main/java/com/glodblock/github/nei/object/OrderStack.java deleted file mode 100644 index 79d73a8e0..000000000 --- a/src/main/java/com/glodblock/github/nei/object/OrderStack.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.glodblock.github.nei.object; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Nullable; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.glodblock.github.util.Util; - -import codechicken.nei.PositionedStack; - -public class OrderStack { - - private T RealStack; - private int index; - private ItemStack[] items; - - public static final int ITEM = 1; - public static final int FLUID = 2; - public static final int CUSTOM = 3; - - public OrderStack(T stack, int order) { - if (stack == null || order < 0) - throw new IllegalArgumentException("Trying to create a null or negative order stack!"); - this.RealStack = stack; - this.index = order; - } - - public OrderStack(T stack, int order, ItemStack[] items) { - this(stack, order); - if (items.length > 1) { - this.items = items; - } - } - - public void putStack(T stack) { - this.RealStack = stack; - } - - public void putItems(ItemStack[] items) { - this.items = items; - } - - public ItemStack[] getItems() { - return this.items; - } - - public final void setIndex(int i) { - this.index = i; - } - - public T getStack() { - return RealStack; - } - - public int getIndex() { - return index; - } - - public static OrderStack pack(PositionedStack stack, int index) { - if (stack != null && stack.items != null && stack.items.length > 0) { - if (Items.feather.getDamage(stack.items[0]) == OreDictionary.WILDCARD_VALUE) { - ItemStack tmp = stack.items[0].copy(); - tmp.setItemDamage(0); - return new OrderStack<>(tmp, index); - } else return new OrderStack<>(stack.items[0].copy(), index); - } - return null; - } - - public static OrderStack packFluid(PositionedStack stack, int index) { - if (stack != null && stack.items != null && stack.items.length > 0) { - FluidStack fluid = Util.getFluidFromItem(stack.items[0]); - if (fluid != null) return new OrderStack<>(fluid.copy(), index); - else return pack(stack, index); - } - return null; - } - - protected void customNBTWriter(NBTTagCompound buf) {} - - protected T customNBTReader(NBTTagCompound buf) { - return null; - } - - public final void writeToNBT(NBTTagCompound buf) { - if (RealStack instanceof ItemStack) { - NBTTagCompound tmp = new NBTTagCompound(); - tmp.setByte("t", (byte) ITEM); - Util.writeItemStackToNBT(((ItemStack) RealStack), tmp); - // replacement items - if (items != null) { - NBTTagList list = new NBTTagList(); - for (ItemStack is : this.items) { - Util.writeItemStackToNBT(is, new NBTTagCompound()); - } - tmp.setTag(index + ":", list); - } - buf.setTag(index + ":", tmp); - } else if (RealStack instanceof FluidStack) { - NBTTagCompound tmp = new NBTTagCompound(); - tmp.setByte("t", (byte) FLUID); - ((FluidStack) RealStack).writeToNBT(tmp); - buf.setTag(index + ":", tmp); - } else { - NBTTagCompound tmp = new NBTTagCompound(); - tmp.setByte("t", (byte) CUSTOM); - customNBTWriter(tmp); - buf.setTag(index + ":", tmp); - } - } - - public static OrderStack readFromNBT(NBTTagCompound buf, @Nullable OrderStack dummy, int index) { - if (!buf.hasKey(index + ":")) return null; - NBTTagCompound info = buf.getCompoundTag(index + ":"); - byte id = info.getByte("t"); - switch (id) { - case ITEM -> { - List list = new ArrayList<>(); - if (info.hasKey(index + ":")) { - NBTTagList items = info.getTagList(index + ":", 10); - for (int x = 0; x < items.tagCount(); x++) { - final NBTTagCompound item = items.getCompoundTagAt(x); - list.add(Util.loadItemStackFromNBT(item)); - } - } - return new OrderStack<>(Util.loadItemStackFromNBT(info), index, list.toArray(new ItemStack[0])); - } - case FLUID -> { - return new OrderStack<>(FluidStack.loadFluidStackFromNBT(info), index); - } - case CUSTOM -> { - if (dummy == null) throw new IllegalOrderStackID(id); - return new OrderStack<>(dummy.customNBTReader(buf), index); - } - default -> throw new IllegalOrderStackID(id); - } - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/DefaultExtractorLoader.java b/src/main/java/com/glodblock/github/nei/recipes/DefaultExtractorLoader.java deleted file mode 100644 index 0c13e2bf5..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/DefaultExtractorLoader.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.glodblock.github.nei.recipes; - -import java.util.Collection; - -import com.glodblock.github.nei.recipes.extractor.AvaritiaRecipeExtractor; -import com.glodblock.github.nei.recipes.extractor.EnderIORecipeExtractor; -import com.glodblock.github.nei.recipes.extractor.ForestryRecipeExtractor; -import com.glodblock.github.nei.recipes.extractor.GTPPRecipeExtractor; -import com.glodblock.github.nei.recipes.extractor.GregTech5RecipeExtractor; -import com.glodblock.github.nei.recipes.extractor.GregTech6RecipeExtractor; -import com.glodblock.github.nei.recipes.extractor.IndustrialCraftRecipeExtractor; -import com.glodblock.github.nei.recipes.extractor.VanillaRecipeExtractor; -import com.glodblock.github.util.ModAndClassUtil; - -import forestry.factory.recipes.nei.NEIHandlerBottler; -import forestry.factory.recipes.nei.NEIHandlerCarpenter; -import forestry.factory.recipes.nei.NEIHandlerCentrifuge; -import forestry.factory.recipes.nei.NEIHandlerFabricator; -import forestry.factory.recipes.nei.NEIHandlerFermenter; -import forestry.factory.recipes.nei.NEIHandlerMoistener; -import forestry.factory.recipes.nei.NEIHandlerSqueezer; -import forestry.factory.recipes.nei.NEIHandlerStill; -import gregapi.recipes.Recipe; - -public class DefaultExtractorLoader implements Runnable { - - @Override - public void run() { - FluidRecipe.addRecipeMap("smelting", new VanillaRecipeExtractor(false)); - FluidRecipe.addRecipeMap("brewing", new VanillaRecipeExtractor(false)); - FluidRecipe.addRecipeMap("crafting", new VanillaRecipeExtractor(true)); - FluidRecipe.addRecipeMap("crafting2x2", new VanillaRecipeExtractor(true)); - - if (ModAndClassUtil.GT5) { - try { - Class recipeMapClazz = Class.forName("gregtech.api.util.GTRecipe$GT_Recipe_Map"); - Collection sMappings = (Collection) recipeMapClazz.getDeclaredField("sMappings").get(null); - for (Object tMap : sMappings) { - String mNEIName = (String) recipeMapClazz.getDeclaredField("mNEIName").get(tMap); - FluidRecipe.addRecipeMap( - mNEIName, - new GregTech5RecipeExtractor( - mNEIName.equals("gt.recipe.scanner") - || mNEIName.equals("gt.recipe.fakeAssemblylineProcess"))); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - if (ModAndClassUtil.GT6) { - for (Recipe.RecipeMap tMap : Recipe.RecipeMap.RECIPE_MAPS.values()) { - FluidRecipe.addRecipeMap(tMap.mNameNEI, new GregTech6RecipeExtractor(tMap)); - } - } - - if (ModAndClassUtil.GTPP && !ModAndClassUtil.GT5NH) { - try { - Class gtRecipeMapClazz = Class.forName("gregtech.api.util.GT_Recipe$GT_Recipe_Map"); - Class gtppRecipeMapClazz = Class.forName("gregtech.api.util.GTPP_Recipe$GTPP_Recipe_Map_Internal"); - Collection sMappingsEx = (Collection) gtppRecipeMapClazz.getDeclaredField("sMappingsEx") - .get(null); - for (Object gtppMap : sMappingsEx) { - boolean mNEIAllowed = gtRecipeMapClazz.getDeclaredField("mNEIAllowed").getBoolean(gtppMap); - if (mNEIAllowed) { - String mNEIName = (String) gtRecipeMapClazz.getDeclaredField("mNEIName").get(gtppMap); - FluidRecipe.addRecipeMap(mNEIName, new GTPPRecipeExtractor()); - } - } - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - if (ModAndClassUtil.EIO) { - FluidRecipe.addRecipeMap("EIOEnchanter", new EnderIORecipeExtractor()); - FluidRecipe.addRecipeMap("EnderIOAlloySmelter", new EnderIORecipeExtractor()); - FluidRecipe.addRecipeMap("EnderIOSagMill", new EnderIORecipeExtractor()); - FluidRecipe.addRecipeMap("EnderIOSliceAndSplice", new EnderIORecipeExtractor()); - FluidRecipe.addRecipeMap("EnderIOSoulBinder", new EnderIORecipeExtractor()); - FluidRecipe.addRecipeMap("EnderIOVat", new EnderIORecipeExtractor()); - } - - if (ModAndClassUtil.AVARITIA) { - FluidRecipe.addRecipeMap("extreme", new AvaritiaRecipeExtractor()); - } - - if (ModAndClassUtil.FTR) { - // GTNH - FluidRecipe.addRecipeMap("forestry.bottler", new ForestryRecipeExtractor(new NEIHandlerBottler())); - FluidRecipe.addRecipeMap("forestry.carpenter", new ForestryRecipeExtractor(new NEIHandlerCarpenter())); - FluidRecipe.addRecipeMap("forestry.centrifuge", new ForestryRecipeExtractor(new NEIHandlerCentrifuge())); - FluidRecipe.addRecipeMap("forestry.fabricator", new ForestryRecipeExtractor(new NEIHandlerFabricator())); - FluidRecipe.addRecipeMap("forestry.fermenter", new ForestryRecipeExtractor(new NEIHandlerFermenter())); - FluidRecipe.addRecipeMap("forestry.moistener", new ForestryRecipeExtractor(new NEIHandlerMoistener())); - FluidRecipe.addRecipeMap("forestry.squeezer", new ForestryRecipeExtractor(new NEIHandlerSqueezer())); - FluidRecipe.addRecipeMap("forestry.still", new ForestryRecipeExtractor(new NEIHandlerStill())); - - // LEGACY - FluidRecipe.addRecipeMap(null, new ForestryRecipeExtractor(new NEIHandlerBottler())); - FluidRecipe.addRecipeMap(null, new ForestryRecipeExtractor(new NEIHandlerCarpenter())); - FluidRecipe.addRecipeMap(null, new ForestryRecipeExtractor(new NEIHandlerCentrifuge())); - FluidRecipe.addRecipeMap(null, new ForestryRecipeExtractor(new NEIHandlerFabricator())); - FluidRecipe.addRecipeMap(null, new ForestryRecipeExtractor(new NEIHandlerFermenter())); - FluidRecipe.addRecipeMap(null, new ForestryRecipeExtractor(new NEIHandlerMoistener())); - FluidRecipe.addRecipeMap(null, new ForestryRecipeExtractor(new NEIHandlerSqueezer())); - FluidRecipe.addRecipeMap(null, new ForestryRecipeExtractor(new NEIHandlerStill())); - } - - if (ModAndClassUtil.IC2) { - FluidRecipe.addRecipeMap("blastfurnace", new IndustrialCraftRecipeExtractor()); - FluidRecipe.addRecipeMap("BlockCutter", new IndustrialCraftRecipeExtractor()); - FluidRecipe.addRecipeMap("centrifuge", new IndustrialCraftRecipeExtractor()); - FluidRecipe.addRecipeMap("compressor", new IndustrialCraftRecipeExtractor()); - FluidRecipe.addRecipeMap("extractor", new IndustrialCraftRecipeExtractor()); - FluidRecipe.addRecipeMap("fluidcanner", new IndustrialCraftRecipeExtractor()); - FluidRecipe.addRecipeMap("macerator", new IndustrialCraftRecipeExtractor()); - FluidRecipe.addRecipeMap("metalformer", new IndustrialCraftRecipeExtractor()); - FluidRecipe.addRecipeMap("oreWashing", new IndustrialCraftRecipeExtractor()); - FluidRecipe.addRecipeMap("solidcanner", new IndustrialCraftRecipeExtractor()); - } - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/FluidRecipe.java b/src/main/java/com/glodblock/github/nei/recipes/FluidRecipe.java deleted file mode 100644 index 8e4f54fc6..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/FluidRecipe.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.glodblock.github.nei.recipes; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.nei.object.IRecipeExtractor; -import com.glodblock.github.nei.object.IRecipeExtractorLegacy; -import com.glodblock.github.nei.object.OrderStack; - -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.IRecipeHandler; -import codechicken.nei.recipe.TemplateRecipeHandler; - -public final class FluidRecipe { - - private static final HashMap IdentifierMap = new HashMap<>(); - private static final HashMap IdentifierMapLegacy = new HashMap<>(); - - public static void addRecipeMap(String recipeIdentifier, IRecipeExtractor extractor) { - IdentifierMap.put(recipeIdentifier, extractor); - if (recipeIdentifier == null && extractor instanceof IRecipeExtractorLegacy) { - IdentifierMapLegacy.put(((IRecipeExtractorLegacy) extractor).getClassName(), extractor); - } - } - - public static List> getPackageInputs(IRecipeHandler recipe, int index, boolean priority) { - TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe; - if (tRecipe == null) return new ArrayList<>(); - if (!IdentifierMap.containsKey(tRecipe.getOverlayIdentifier())) return getDefaultPackageInputs(tRecipe, index); - if (tRecipe.getOverlayIdentifier() == null) return getPackageInputsLegacy(recipe, index); - IRecipeExtractor extractor = IdentifierMap.get(tRecipe.getOverlayIdentifier()); - if (extractor == null) return new ArrayList<>(); - List tmp = new ArrayList<>(tRecipe.getIngredientStacks(index)); - List> out = extractor.getInputIngredients(tmp, recipe, index); - if (priority) { - List> reordered = new ArrayList<>(); - byte numFluids = 0; - for (OrderStack orderStack : out) { - if (orderStack != null && orderStack.getStack() instanceof FluidStack) { - reordered.add(new OrderStack<>(orderStack.getStack(), numFluids++)); - } - } - for (OrderStack orderStack : out) { - if (orderStack != null && orderStack.getStack() instanceof ItemStack) { - reordered.add(new OrderStack<>(orderStack.getStack(), numFluids++)); - } - } - return reordered; - } - return out; - } - - private static List> getDefaultPackageInputs(TemplateRecipeHandler tRecipe, int index) { - List> tmp = new LinkedList<>(); - AtomicInteger i = new AtomicInteger(0); - tRecipe.getIngredientStacks(index) - .forEach(ps -> tmp.add(new OrderStack<>(ps.item, i.getAndIncrement(), ps.items))); - return tmp; - } - - private static List> getDefaultPackageOutputs(TemplateRecipeHandler tRecipe, int index) { - List> tmp = new LinkedList<>(); - AtomicInteger i = new AtomicInteger(0); - tmp.add(new OrderStack<>(tRecipe.getResultStack(index).item, i.getAndIncrement())); - tRecipe.getOtherStacks(index).forEach(ps -> tmp.add(new OrderStack<>(ps.item, i.getAndIncrement()))); - return tmp; - } - - public static List> getPackageOutputs(IRecipeHandler recipe, int index, boolean useOther) { - TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe; - if (tRecipe == null) return new ArrayList<>(); - if (!IdentifierMap.containsKey(tRecipe.getOverlayIdentifier())) return getDefaultPackageOutputs(tRecipe, index); - if (tRecipe.getOverlayIdentifier() == null) return getPackageOutputsLegacy(recipe, index, useOther); - IRecipeExtractor extractor = IdentifierMap.get(tRecipe.getOverlayIdentifier()); - if (extractor == null) return new ArrayList<>(); - List tmp = new ArrayList<>(Collections.singleton(tRecipe.getResultStack(index))); - if (useOther) tmp.addAll(tRecipe.getOtherStacks(index)); - return extractor.getOutputIngredients(tmp, recipe, index); - } - - public static List getSupportRecipes() { - return new ArrayList<>(IdentifierMap.keySet()); - } - - public static List> getPackageInputsLegacy(IRecipeHandler recipe, int index) { - if (recipe == null || !IdentifierMapLegacy.containsKey(recipe.getClass().getName())) return new ArrayList<>(); - IRecipeExtractor extractor = IdentifierMapLegacy.get(recipe.getClass().getName()); - if (extractor == null) return new ArrayList<>(); - List tmp = new ArrayList<>(recipe.getIngredientStacks(index)); - return extractor.getInputIngredients(tmp, recipe, index); - } - - public static List> getPackageOutputsLegacy(IRecipeHandler recipe, int index, boolean useOther) { - if (recipe == null || !IdentifierMapLegacy.containsKey(recipe.getClass().getName())) return new ArrayList<>(); - IRecipeExtractor extractor = IdentifierMapLegacy.get(recipe.getClass().getName()); - if (extractor == null) return new ArrayList<>(); - List tmp = new ArrayList<>(Collections.singleton(recipe.getResultStack(index))); - if (useOther) tmp.addAll(recipe.getOtherStacks(index)); - return extractor.getOutputIngredients(tmp, recipe, index); - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/AvaritiaRecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/AvaritiaRecipeExtractor.java deleted file mode 100644 index 61cc390c3..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/AvaritiaRecipeExtractor.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.glodblock.github.nei.recipes.extractor; - -import java.util.List; - -import com.glodblock.github.nei.NEIUtils; -import com.glodblock.github.nei.object.IRecipeExtractor; -import com.glodblock.github.nei.object.OrderStack; - -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.IRecipeHandler; - -public class AvaritiaRecipeExtractor implements IRecipeExtractor { - - public AvaritiaRecipeExtractor() {} - - @Override - public List> getInputIngredients(List rawInputs, IRecipeHandler recipe, int index) { - return getInputIngredients(rawInputs); - } - - @Override - public List> getOutputIngredients(List rawOutputs, IRecipeHandler recipe, - int index) { - return getOutputIngredients(rawOutputs); - } - - @Override - public List> getInputIngredients(List rawInputs) { - return NEIUtils.compress(ExtractorUtil.packItemStack(rawInputs)); - } - - @Override - public List> getOutputIngredients(List rawOutputs) { - return ExtractorUtil.packItemStack(rawOutputs); - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/EnderIORecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/EnderIORecipeExtractor.java deleted file mode 100644 index 6f9ccbe6c..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/EnderIORecipeExtractor.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.glodblock.github.nei.recipes.extractor; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.nei.object.IRecipeExtractor; -import com.glodblock.github.nei.object.OrderStack; -import com.glodblock.github.util.Ae2Reflect; - -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.IRecipeHandler; -import codechicken.nei.recipe.TemplateRecipeHandler; -import crazypants.enderio.machine.crusher.CrusherRecipeManager; -import crazypants.enderio.nei.VatRecipeHandler; - -public class EnderIORecipeExtractor implements IRecipeExtractor { - - public EnderIORecipeExtractor() {} - - @Override - public List> getInputIngredients(List rawInputs) { - return ExtractorUtil.packItemStack(rawInputs); - } - - @Override - public List> getOutputIngredients(List rawOutputs) { - return ExtractorUtil.packItemStack(rawOutputs); - } - - @Override - public List> getInputIngredients(List rawInputs, IRecipeHandler recipe, int index) { - TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe; - List> tmp; - if (tRecipe.arecipes.get(index) instanceof VatRecipeHandler.InnerVatRecipe vatRecipe) { - ArrayList inputs = ReflectEIO.getInputs(vatRecipe); - tmp = ExtractorUtil.packItemStack(inputs); - FluidStack in = ReflectEIO.getInputFluid(vatRecipe); - if (in != null) { - tmp.add(new OrderStack<>(in, inputs.size())); - } - return tmp; - } else if (tRecipe.getOverlayIdentifier().equals("EnderIOSagMill")) { - for (int i = rawInputs.size() - 1; i >= 0; i--) { - PositionedStack stack = rawInputs.get(i); - if (stack != null && CrusherRecipeManager.getInstance().isValidSagBall(stack.items[0])) { - rawInputs.remove(i); - break; - } - } - return getInputIngredients(rawInputs); - } else { - return getInputIngredients(rawInputs); - } - } - - @Override - public List> getOutputIngredients(List rawOutputs, IRecipeHandler recipe, - int index) { - TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe; - List> tmp = new LinkedList<>(); - if (tRecipe.arecipes.get(index) instanceof VatRecipeHandler.InnerVatRecipe vatRecipe) { - FluidStack result = ReflectEIO.getResult(vatRecipe); - if (result != null) { - tmp.add(new OrderStack<>(result, 0)); - } - return tmp; - } else { - return getOutputIngredients(rawOutputs); - } - } - - private static class ReflectEIO { - - private static final Field inputsF; - private static final Field resultF; - private static final Field inFluidF; - - static { - try { - inputsF = Ae2Reflect.reflectField(VatRecipeHandler.InnerVatRecipe.class, "inputs"); - resultF = Ae2Reflect.reflectField(VatRecipeHandler.InnerVatRecipe.class, "result"); - inFluidF = Ae2Reflect.reflectField(VatRecipeHandler.InnerVatRecipe.class, "inFluid"); - } catch (NoSuchFieldException e) { - throw new IllegalStateException("Failed to initialize EIO reflection hacks!", e); - } - } - - private static ArrayList getInputs(VatRecipeHandler.InnerVatRecipe vat) { - return Ae2Reflect.readField(vat, inputsF); - } - - private static FluidStack getResult(VatRecipeHandler.InnerVatRecipe vat) { - return Ae2Reflect.readField(vat, resultF); - } - - private static FluidStack getInputFluid(VatRecipeHandler.InnerVatRecipe vat) { - return Ae2Reflect.readField(vat, inFluidF); - } - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/ExtractorUtil.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/ExtractorUtil.java deleted file mode 100644 index f4dcc4def..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/ExtractorUtil.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.glodblock.github.nei.recipes.extractor; - -import java.util.List; -import java.util.Objects; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.Function; -import java.util.stream.Collectors; - -import com.glodblock.github.nei.object.OrderStack; - -import codechicken.nei.PositionedStack; - -public final class ExtractorUtil { - - public static List> packItemStack(List items) { - AtomicInteger index = new AtomicInteger(-1); - return items.stream().map(item -> { - index.getAndIncrement(); - return OrderStack.pack(item, index.get()); - }).filter(Objects::nonNull).collect(Collectors.toList()); - } - - public static List> packItemStack(List items, - Function transformer) { - AtomicInteger index = new AtomicInteger(-1); - return items.stream().map(item -> { - index.getAndIncrement(); - Object o = transformer.apply(item); - return o != null ? new OrderStack<>(o, index.get(), item.items) : null; - }).filter(Objects::nonNull).collect(Collectors.toList()); - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/ForestryRecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/ForestryRecipeExtractor.java deleted file mode 100644 index 185fe25ab..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/ForestryRecipeExtractor.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.glodblock.github.nei.recipes.extractor; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.nei.object.IRecipeExtractorLegacy; -import com.glodblock.github.nei.object.OrderStack; - -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.IRecipeHandler; -import codechicken.nei.recipe.TemplateRecipeHandler; -import forestry.core.recipes.nei.PositionedFluidTank; -import forestry.core.recipes.nei.RecipeHandlerBase; -import forestry.factory.recipes.nei.NEIHandlerFabricator; -import forestry.factory.recipes.nei.NEIHandlerSqueezer; - -public class ForestryRecipeExtractor implements IRecipeExtractorLegacy { - - private final IRecipeHandler handler; - - public ForestryRecipeExtractor(IRecipeHandler recipes) { - handler = recipes; - } - - @Override - public String getClassName() { - return handler.getClass().getName(); - } - - @Override - public List> getInputIngredients(List rawInputs) { - return ExtractorUtil.packItemStack(rawInputs); - } - - @Override - public List> getOutputIngredients(List rawOutputs) { - return ExtractorUtil.packItemStack(rawOutputs); - } - - @Override - public List> getInputIngredients(List rawInputs, IRecipeHandler recipe, int index) { - TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe; - List> tmp = new ArrayList<>(); - if (tRecipe.arecipes.get(index) instanceof RecipeHandlerBase.CachedBaseRecipe) { - tmp = getInputIngredients(rawInputs); - List tanks = ((RecipeHandlerBase.CachedBaseRecipe) tRecipe.arecipes.get(index)) - .getFluidTanks(); - if (tanks.size() > 0 && !(handler instanceof NEIHandlerSqueezer)) { - FluidStack fluid = tanks.get(0).tank.getFluid(); - if (fluid != null) { - tmp.add(new OrderStack<>(fluid, rawInputs.size())); - } - } - } - return tmp; - } - - @Override - public List> getOutputIngredients(List rawOutputs, IRecipeHandler recipe, - int index) { - TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe; - removeGlass(rawOutputs); - List> tmp = new ArrayList<>(); - if (tRecipe.arecipes.get(index) instanceof RecipeHandlerBase.CachedBaseRecipe) { - tmp = getOutputIngredients(rawOutputs); - List tanks = ((RecipeHandlerBase.CachedBaseRecipe) tRecipe.arecipes.get(index)) - .getFluidTanks(); - if (tanks.size() > 0 && handler instanceof NEIHandlerSqueezer) { - FluidStack fluid = tanks.get(0).tank.getFluid(); - if (fluid != null) { - tmp.add(new OrderStack<>(fluid, rawOutputs.size())); - } - } else if (tanks.size() > 1) { - FluidStack fluid = tanks.get(1).tank.getFluid(); - if (fluid != null) { - tmp.add(new OrderStack<>(fluid, rawOutputs.size())); - } - } - } - return tmp; - } - - private void removeGlass(List list) { - if (handler instanceof NEIHandlerFabricator) { - list.remove(list.size() - 1); - } - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/GTPPRecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/GTPPRecipeExtractor.java deleted file mode 100644 index 891ffa20b..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/GTPPRecipeExtractor.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.glodblock.github.nei.recipes.extractor; - -public class GTPPRecipeExtractor extends GregTech5RecipeExtractor { - - public GTPPRecipeExtractor() { - super(false); - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java deleted file mode 100644 index 41224abeb..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech5RecipeExtractor.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.glodblock.github.nei.recipes.extractor; - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.nei.object.IRecipeExtractor; -import com.glodblock.github.nei.object.OrderStack; - -import codechicken.nei.PositionedStack; -import gregtech.api.enums.ItemList; -import gregtech.common.items.ItemFluidDisplay; - -public class GregTech5RecipeExtractor implements IRecipeExtractor { - - boolean removeSpecial; - - public GregTech5RecipeExtractor(boolean removeSpecial) { - this.removeSpecial = removeSpecial; - } - - @Override - public List> getInputIngredients(List rawInputs) { - if (removeSpecial) removeSpecial(rawInputs); - return ExtractorUtil.packItemStack(rawInputs, GregTech5RecipeExtractor::getFluidFromDisplay); - } - - @Override - public List> getOutputIngredients(List rawOutputs) { - return ExtractorUtil.packItemStack(rawOutputs, GregTech5RecipeExtractor::getFluidFromDisplay); - } - - private void removeSpecial(List list) { - for (int i = list.size() - 1; i >= 0; i--) { - PositionedStack positionedStack = list.get(i); - if (positionedStack != null && (positionedStack.items[0].isItemEqual(ItemList.Tool_DataStick.get(1)) - || positionedStack.items[0].isItemEqual(ItemList.Tool_DataOrb.get(1)))) { - list.remove(i); - break; - } - } - } - - public static Object getFluidFromDisplay(PositionedStack stack) { - if (stack != null) { - ItemStack item = stack.items[0].copy(); - if (item.getItem() instanceof ItemFluidDisplay) { - if (item.getTagCompound() != null) { - Fluid fluid = FluidRegistry.getFluid(item.getItemDamage()); - int amt = (int) item.getTagCompound().getLong("mFluidDisplayAmount"); - return amt > 0 && fluid != null ? new FluidStack(fluid, amt) : null; - } - } else { - return item; - } - } - return null; - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java deleted file mode 100644 index 7203a09f8..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/GregTech6RecipeExtractor.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.glodblock.github.nei.recipes.extractor; - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.nei.object.IRecipeExtractor; -import com.glodblock.github.nei.object.OrderStack; - -import codechicken.nei.PositionedStack; -import gregapi.item.ItemFluidDisplay; -import gregapi.recipes.Recipe; - -public class GregTech6RecipeExtractor implements IRecipeExtractor { - - private final Recipe.RecipeMap Recipes; - - public GregTech6RecipeExtractor(Recipe.RecipeMap aMap) { - Recipes = aMap; - } - - @Override - public List> getInputIngredients(List rawInputs) { - this.removeMachine(rawInputs); - return ExtractorUtil.packItemStack(rawInputs, GregTech6RecipeExtractor::getFluidFromDisplay); - } - - @Override - public List> getOutputIngredients(List rawOutputs) { - return ExtractorUtil.packItemStack(rawOutputs, GregTech6RecipeExtractor::getFluidFromDisplay); - } - - private void removeMachine(List list) { - for (int i = list.size() - 1; i >= 0; i--) { - PositionedStack positionedStack = list.get(i); - if (positionedStack != null) { - for (ItemStack machine : this.Recipes.mRecipeMachineList) { - if (positionedStack.items[0].isItemEqual(machine)) { - list.remove(i); - break; - } - } - } - } - } - - public static Object getFluidFromDisplay(PositionedStack stack) { - if (stack != null) { - ItemStack item = stack.items[0].copy(); - if (item.getItem() instanceof ItemFluidDisplay) { - if (item.getTagCompound() != null) { - FluidStack fluid = ((ItemFluidDisplay) item.getItem()).getFluid(item); - return fluid != null && fluid.amount > 0 ? fluid : null; - } - } else { - return item; - } - } - return null; - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/IndustrialCraftRecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/IndustrialCraftRecipeExtractor.java deleted file mode 100644 index 270d1ced4..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/IndustrialCraftRecipeExtractor.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.glodblock.github.nei.recipes.extractor; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.LinkedList; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.nei.object.IRecipeExtractor; -import com.glodblock.github.nei.object.OrderStack; -import com.glodblock.github.util.Ae2Reflect; - -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.IRecipeHandler; -import ic2.neiIntegration.core.recipehandler.FluidCannerRecipeHandler; -import ic2.neiIntegration.core.recipehandler.OreWashingRecipeHandler; - -public class IndustrialCraftRecipeExtractor implements IRecipeExtractor { - - @Override - public List> getInputIngredients(List rawInputs) { - return ExtractorUtil.packItemStack(rawInputs); - } - - @Override - public List> getOutputIngredients(List rawOutputs) { - return ExtractorUtil.packItemStack(rawOutputs); - } - - @Override - public List> getInputIngredients(List rawInputs, IRecipeHandler recipe, int index) { - List> stacks = new LinkedList<>(); - - if (recipe instanceof FluidCannerRecipeHandler) { - FluidCannerRecipeHandler.CachedFluidCannerRecipe cachedRecipe = (FluidCannerRecipeHandler.CachedFluidCannerRecipe) ((FluidCannerRecipeHandler) recipe).arecipes - .get(index); - FluidStack input = ReflectIC2.getInputFluid(cachedRecipe); - PositionedStack add = rawInputs.size() > 1 ? rawInputs.get(1) : null; - stacks.add(OrderStack.pack(add, 0)); - stacks.add(new OrderStack<>(input, 1)); - } else if (recipe instanceof OreWashingRecipeHandler) { - stacks = getInputIngredients(rawInputs); - int water = ReflectIC2.getOreWasherWater((OreWashingRecipeHandler) recipe, index); - stacks.add(new OrderStack<>(new FluidStack(FluidRegistry.WATER, water), stacks.size())); - } else { - stacks = getInputIngredients(rawInputs); - } - - return stacks.stream().filter(Objects::nonNull).collect(Collectors.toList()); - } - - @Override - public List> getOutputIngredients(List rawOutputs, IRecipeHandler recipe, - int index) { - List> stacks = new LinkedList<>(); - - if (recipe instanceof FluidCannerRecipeHandler) { - FluidCannerRecipeHandler.CachedFluidCannerRecipe cachedRecipe = (FluidCannerRecipeHandler.CachedFluidCannerRecipe) ((FluidCannerRecipeHandler) recipe).arecipes - .get(index); - FluidStack output = ReflectIC2.getOutputFluid(cachedRecipe); - stacks.add(new OrderStack<>(output, 0)); - } else { - stacks = getOutputIngredients(rawOutputs); - } - - return stacks.stream().filter(Objects::nonNull).collect(Collectors.toList()); - } - - private static class ReflectIC2 { - - private static final Field inputsF; - private static final Field resultF; - - private static final Method oreWasherWater; - - static { - try { - inputsF = Ae2Reflect.reflectField(FluidCannerRecipeHandler.CachedFluidCannerRecipe.class, "fluidInput"); - resultF = Ae2Reflect - .reflectField(FluidCannerRecipeHandler.CachedFluidCannerRecipe.class, "fluidOutput"); - oreWasherWater = Ae2Reflect.reflectMethod(OreWashingRecipeHandler.class, "getreqWater", int.class); - } catch (NoSuchFieldException | NoSuchMethodException e) { - throw new IllegalStateException("Failed to initialize IC2 reflection hacks!", e); - } - } - - private static FluidStack getInputFluid(FluidCannerRecipeHandler.CachedFluidCannerRecipe recipe) { - return Ae2Reflect.readField(recipe, inputsF); - } - - private static FluidStack getOutputFluid(FluidCannerRecipeHandler.CachedFluidCannerRecipe recipe) { - return Ae2Reflect.readField(recipe, resultF); - } - - private static int getOreWasherWater(OreWashingRecipeHandler recipeHandler, int index) { - try { - return (int) oreWasherWater.invoke(recipeHandler, index); - } catch (Exception e) { - throw new IllegalStateException("Failed to invoke method: " + oreWasherWater, e); - } - } - } -} diff --git a/src/main/java/com/glodblock/github/nei/recipes/extractor/VanillaRecipeExtractor.java b/src/main/java/com/glodblock/github/nei/recipes/extractor/VanillaRecipeExtractor.java deleted file mode 100644 index b4f004f9b..000000000 --- a/src/main/java/com/glodblock/github/nei/recipes/extractor/VanillaRecipeExtractor.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.glodblock.github.nei.recipes.extractor; - -import java.util.LinkedList; -import java.util.List; - -import com.glodblock.github.nei.object.IRecipeExtractor; -import com.glodblock.github.nei.object.OrderStack; - -import codechicken.nei.PositionedStack; - -public class VanillaRecipeExtractor implements IRecipeExtractor { - - private final boolean c; - - public VanillaRecipeExtractor(boolean isCraft) { - c = isCraft; - } - - @Override - public List> getInputIngredients(List rawInputs) { - List> tmp = new LinkedList<>(); - for (int i = 0; i < rawInputs.size(); i++) { - if (rawInputs.get(i) == null) continue; - final int col = (rawInputs.get(i).relx - 25) / 18; - final int row = (rawInputs.get(i).rely - 6) / 18; - int index = col + row * 3; - OrderStack stack = OrderStack.pack(rawInputs.get(i), c ? index : i); - if (stack != null) tmp.add(stack); - } - return tmp; - } - - @Override - public List> getOutputIngredients(List rawOutputs) { - return getInputIngredients(rawOutputs); - } -} diff --git a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java index f3a0720dc..5c5320e1e 100644 --- a/src/main/java/com/glodblock/github/network/CPacketValueConfig.java +++ b/src/main/java/com/glodblock/github/network/CPacketValueConfig.java @@ -72,8 +72,9 @@ public IMessage onMessage(CPacketValueConfig message, MessageContext ctx) { : NameConst.TT_ULTRA_TERMINAL_RESTOCK_OFF))); } else { IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); - if (gridNode != null && Util.isRestock(wirelessTerm) - && Util.rangeCheck(wirelessTerm, player, gridNode)) { + boolean inRange = AEApi.instance().registries().wireless().checkRange(wirelessTerm, player); + + if (gridNode != null && Util.isRestock(wirelessTerm) && inRange) { restockItems(wirelessTerm, gridNode, result.getLeft(), player); } } diff --git a/src/main/java/com/glodblock/github/proxy/ClientProxy.java b/src/main/java/com/glodblock/github/proxy/ClientProxy.java index 5176f8e7e..4151090a4 100644 --- a/src/main/java/com/glodblock/github/proxy/ClientProxy.java +++ b/src/main/java/com/glodblock/github/proxy/ClientProxy.java @@ -13,13 +13,10 @@ import com.glodblock.github.loader.KeybindLoader; import com.glodblock.github.loader.ListenerLoader; import com.glodblock.github.loader.RenderLoader; -import com.glodblock.github.nei.recipes.DefaultExtractorLoader; import com.glodblock.github.network.CPacketValueConfig; -import com.glodblock.github.util.ModAndClassUtil; import com.glodblock.github.util.Util; import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLLoadCompleteEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -50,14 +47,6 @@ public void postInit(FMLPostInitializationEvent event) { super.postInit(event); } - @Override - public void onLoadComplete(FMLLoadCompleteEvent event) { - super.onLoadComplete(event); - if (ModAndClassUtil.NEI) { - new DefaultExtractorLoader().run(); - } - } - @SubscribeEvent public void tickEvent(TickEvent.PlayerTickEvent e) { if (refreshTick + reStockTime < System.currentTimeMillis()) { diff --git a/src/main/java/com/glodblock/github/proxy/CommonProxy.java b/src/main/java/com/glodblock/github/proxy/CommonProxy.java index ba18ac289..5cd2e72ba 100644 --- a/src/main/java/com/glodblock/github/proxy/CommonProxy.java +++ b/src/main/java/com/glodblock/github/proxy/CommonProxy.java @@ -3,7 +3,6 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.player.EntityItemPickupEvent; @@ -54,7 +53,6 @@ public void pickupEvent(EntityItemPickupEvent e) { EntityPlayer player = e.entityPlayer; EntityItem itemEntity = e.item; ItemStack stack = itemEntity.getEntityItem(); - World world = player.getEntityWorld(); ImmutablePair result = Util.getUltraWirelessTerm(player); if (result != null) { @@ -62,7 +60,9 @@ public void pickupEvent(EntityItemPickupEvent e) { WirelessMagnet.Mode mode = WirelessMagnet.getMode(wirelessTerm); if (mode == WirelessMagnet.Mode.ME) { IGridNode gridNode = Util.getWirelessGrid(wirelessTerm); - if (gridNode != null && Util.rangeCheck(wirelessTerm, player, gridNode)) { + boolean inRange = AEApi.instance().registries().wireless().checkRange(wirelessTerm, player); + + if (gridNode != null && inRange) { WirelessMagnetCardFilterInventory inv = FilterCache .getFilter(wirelessTerm, result.getLeft(), gridNode, player); diff --git a/src/main/java/com/glodblock/github/util/Util.java b/src/main/java/com/glodblock/github/util/Util.java index 3360b895e..91b4e023f 100644 --- a/src/main/java/com/glodblock/github/util/Util.java +++ b/src/main/java/com/glodblock/github/util/Util.java @@ -38,7 +38,6 @@ import appeng.api.config.Actionable; import appeng.api.config.PowerMultiplier; import appeng.api.config.SecurityPermissions; -import appeng.api.implementations.tiles.IWirelessAccessPoint; import appeng.api.networking.IGrid; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; @@ -50,12 +49,10 @@ import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEStack; import appeng.api.util.DimensionalCoord; -import appeng.api.util.WorldCoord; import appeng.container.AEBaseContainer; import appeng.items.tools.powered.ToolWirelessTerminal; import appeng.me.storage.NullInventory; import appeng.tile.networking.TileCableBus; -import appeng.tile.networking.TileWireless; import appeng.util.Platform; import appeng.util.item.AEFluidStack; import appeng.util.item.AEItemStack; @@ -105,32 +102,6 @@ public static int drainItemPower(AEBaseContainer c, InventoryPlayer ip, int slot return ticks; } - public static boolean rangeCheck(ItemStack is, EntityPlayer player, IGridNode grid) { - if (grid.getGrid() == null) return false; - return rangeCheck(is, player, grid.getGrid()); - } - - public static boolean rangeCheck(ItemStack is, EntityPlayer player, IGrid grid) { - boolean canConnect = false; - if (hasInfinityBoosterCard(is)) { - canConnect = true; - } else { - for (IGridNode node : grid.getMachines(TileWireless.class)) { - IWirelessAccessPoint accessPoint = (IWirelessAccessPoint) node.getMachine(); - if (accessPoint.isActive() && accessPoint.getLocation().getDimension() == player.dimension) { - WorldCoord distance = accessPoint.getLocation() - .subtract((int) player.posX, (int) player.posY, (int) player.posZ); - int squaredDistance = distance.x * distance.x + distance.y * distance.y + distance.z * distance.z; - if (squaredDistance <= accessPoint.getRange() * accessPoint.getRange()) { - canConnect = true; - break; - } - } - } - } - return canConnect; - } - public static boolean isRestock(ItemStack is) { if (is.getItem() instanceof ItemBaseWirelessTerminal) { NBTTagCompound data = Platform.openNbtData(is); @@ -155,8 +126,8 @@ public static boolean hasInfinityBoosterCard(ItemStack is) { } public static IGridNode getWirelessGrid(ItemStack is) { - if (is.getItem() instanceof ToolWirelessTerminal) { - String key = ((ToolWirelessTerminal) is.getItem()).getEncryptionKey(is); + if (is.getItem() instanceof ToolWirelessTerminal wirelessTerminal) { + String key = wirelessTerminal.getEncryptionKey(is); IGridHost securityTerminal = (IGridHost) AEApi.instance().registries().locatable() .getLocatableBy(Long.parseLong(key)); if (securityTerminal == null) return null; @@ -166,26 +137,27 @@ public static IGridNode getWirelessGrid(ItemStack is) { } public static IMEInventoryHandler getWirelessInv(ItemStack is, EntityPlayer player, StorageChannel channel) { - if (Platform.isServer()) { - IGridNode gridNode = getWirelessGrid(is); - if (gridNode != null) { - IGrid grid = gridNode.getGrid(); - if (grid != null) { - if (rangeCheck(is, player, grid)) { - IStorageGrid gridCache = grid.getCache(IStorageGrid.class); - if (gridCache != null) { - if (channel == StorageChannel.FLUIDS) { - return gridCache.getFluidInventory(); - } else { - return gridCache.getItemInventory(); - } - } - } + if (Platform.isClient()) return new NullInventory<>(); + + IGridNode gridNode = getWirelessGrid(is); + if (gridNode == null) return null; + + IGrid grid = gridNode.getGrid(); + if (grid == null) return null; + + boolean inRange = AEApi.instance().registries().wireless().checkRange(is, player); + if (inRange) { + IStorageGrid gridCache = grid.getCache(IStorageGrid.class); + if (gridCache != null) { + if (channel == StorageChannel.FLUIDS) { + return gridCache.getFluidInventory(); + } else { + return gridCache.getItemInventory(); } } - return null; } - return new NullInventory<>(); + + return null; } public static ImmutablePair getUltraWirelessTerm(EntityPlayer player) {