Cleanup deps (#434)

This commit is contained in:
Kogepan229 authored and GitHub committed 2026-05-19 14:14:35 +00:00
1 parent 04d80384b2
commit ead0aff1ae
26 files changed
+74 -1123

No files matched your search

+7 -13
View File
@@ -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'
}
}
@@ -2,7 +2,7 @@ package com.glodblock.github.common.item;
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 class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II
@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 class ItemBaseWirelessTerminal extends ToolWirelessTerminal implements II
if (GuiScreen.isCtrlKeyDown()) {
lines.add(NameConst.i18n(NameConst.TT_WIRELESS_INSTALLED));
if (hasInfinityBoosterCard(stack)) {
lines.add(" " + EnumChatFormatting.GOLD + getInfinityBoosterCard().getDisplayName());
lines.add(" " + EnumChatFormatting.GOLD + getQuantumBridgeCard().getDisplayName());
}
if (hasEnergyCard(stack)) {
lines.add(" " + EnumChatFormatting.GOLD + getEnergyCard().getDisplayName());
@@ -167,15 +167,6 @@ public class ItemWirelessUltraTerminal extends ItemBaseWirelessTerminal
this.openGui(is, w, player, mode, Integer.MIN_VALUE);
}
public static boolean hasInfinityBoosterCard(EntityPlayer player) {
ImmutablePair<Integer, ItemStack> 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) {
@@ -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 net.minecraft.nbt.NBTTagList;
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 class ThaumicEnergisticsCrafting {
}
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 class ThaumicEnergisticsCrafting {
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;
@@ -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 class RecipeLoader implements Runnable {
}
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());
@@ -9,35 +9,41 @@ import net.minecraft.item.ItemStack;
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
@@ -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<OrderStack<?>> compress(List<OrderStack<?>> list) {
List<OrderStack<?>> 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<OrderStack<?>> clearNull(List<OrderStack<?>> 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());
}
}
@@ -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<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs);
List<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs);
default List<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs, IRecipeHandler recipe, int index) {
return getInputIngredients(rawInputs);
}
default List<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs, IRecipeHandler recipe,
int index) {
return getOutputIngredients(rawOutputs);
}
}
@@ -1,6 +0,0 @@
package com.glodblock.github.nei.object;
public interface IRecipeExtractorLegacy extends IRecipeExtractor {
String getClassName();
}
@@ -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);
}
}
@@ -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<T> {
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<ItemStack> 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<ItemStack> 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);
}
}
}
@@ -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());
}
}
}
@@ -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<String, IRecipeExtractor> IdentifierMap = new HashMap<>();
private static final HashMap<String, IRecipeExtractor> 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<OrderStack<?>> 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<PositionedStack> tmp = new ArrayList<>(tRecipe.getIngredientStacks(index));
List<OrderStack<?>> out = extractor.getInputIngredients(tmp, recipe, index);
if (priority) {
List<OrderStack<?>> 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<OrderStack<?>> getDefaultPackageInputs(TemplateRecipeHandler tRecipe, int index) {
List<OrderStack<?>> 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<OrderStack<?>> getDefaultPackageOutputs(TemplateRecipeHandler tRecipe, int index) {
List<OrderStack<?>> 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<OrderStack<?>> 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<PositionedStack> tmp = new ArrayList<>(Collections.singleton(tRecipe.getResultStack(index)));
if (useOther) tmp.addAll(tRecipe.getOtherStacks(index));
return extractor.getOutputIngredients(tmp, recipe, index);
}
public static List<String> getSupportRecipes() {
return new ArrayList<>(IdentifierMap.keySet());
}
public static List<OrderStack<?>> 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<PositionedStack> tmp = new ArrayList<>(recipe.getIngredientStacks(index));
return extractor.getInputIngredients(tmp, recipe, index);
}
public static List<OrderStack<?>> 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<PositionedStack> tmp = new ArrayList<>(Collections.singleton(recipe.getResultStack(index)));
if (useOther) tmp.addAll(recipe.getOtherStacks(index));
return extractor.getOutputIngredients(tmp, recipe, index);
}
}
@@ -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<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs, IRecipeHandler recipe, int index) {
return getInputIngredients(rawInputs);
}
@Override
public List<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs, IRecipeHandler recipe,
int index) {
return getOutputIngredients(rawOutputs);
}
@Override
public List<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs) {
return NEIUtils.compress(ExtractorUtil.packItemStack(rawInputs));
}
@Override
public List<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs) {
return ExtractorUtil.packItemStack(rawOutputs);
}
}
@@ -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<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs) {
return ExtractorUtil.packItemStack(rawInputs);
}
@Override
public List<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs) {
return ExtractorUtil.packItemStack(rawOutputs);
}
@Override
public List<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs, IRecipeHandler recipe, int index) {
TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe;
List<OrderStack<?>> tmp;
if (tRecipe.arecipes.get(index) instanceof VatRecipeHandler.InnerVatRecipe vatRecipe) {
ArrayList<PositionedStack> 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<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs, IRecipeHandler recipe,
int index) {
TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe;
List<OrderStack<?>> 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<PositionedStack> 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);
}
}
}
@@ -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<OrderStack<?>> packItemStack(List<PositionedStack> 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<OrderStack<?>> packItemStack(List<PositionedStack> items,
Function<PositionedStack, Object> 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());
}
}
@@ -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<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs) {
return ExtractorUtil.packItemStack(rawInputs);
}
@Override
public List<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs) {
return ExtractorUtil.packItemStack(rawOutputs);
}
@Override
public List<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs, IRecipeHandler recipe, int index) {
TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe;
List<OrderStack<?>> tmp = new ArrayList<>();
if (tRecipe.arecipes.get(index) instanceof RecipeHandlerBase.CachedBaseRecipe) {
tmp = getInputIngredients(rawInputs);
List<PositionedFluidTank> 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<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs, IRecipeHandler recipe,
int index) {
TemplateRecipeHandler tRecipe = (TemplateRecipeHandler) recipe;
removeGlass(rawOutputs);
List<OrderStack<?>> tmp = new ArrayList<>();
if (tRecipe.arecipes.get(index) instanceof RecipeHandlerBase.CachedBaseRecipe) {
tmp = getOutputIngredients(rawOutputs);
List<PositionedFluidTank> 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<PositionedStack> list) {
if (handler instanceof NEIHandlerFabricator) {
list.remove(list.size() - 1);
}
}
}
@@ -1,8 +0,0 @@
package com.glodblock.github.nei.recipes.extractor;
public class GTPPRecipeExtractor extends GregTech5RecipeExtractor {
public GTPPRecipeExtractor() {
super(false);
}
}
@@ -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<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs) {
if (removeSpecial) removeSpecial(rawInputs);
return ExtractorUtil.packItemStack(rawInputs, GregTech5RecipeExtractor::getFluidFromDisplay);
}
@Override
public List<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs) {
return ExtractorUtil.packItemStack(rawOutputs, GregTech5RecipeExtractor::getFluidFromDisplay);
}
private void removeSpecial(List<PositionedStack> 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;
}
}
@@ -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<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs) {
this.removeMachine(rawInputs);
return ExtractorUtil.packItemStack(rawInputs, GregTech6RecipeExtractor::getFluidFromDisplay);
}
@Override
public List<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs) {
return ExtractorUtil.packItemStack(rawOutputs, GregTech6RecipeExtractor::getFluidFromDisplay);
}
private void removeMachine(List<PositionedStack> 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;
}
}
@@ -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<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs) {
return ExtractorUtil.packItemStack(rawInputs);
}
@Override
public List<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs) {
return ExtractorUtil.packItemStack(rawOutputs);
}
@Override
public List<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs, IRecipeHandler recipe, int index) {
List<OrderStack<?>> 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<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs, IRecipeHandler recipe,
int index) {
List<OrderStack<?>> 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);
}
}
}
}
@@ -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<OrderStack<?>> getInputIngredients(List<PositionedStack> rawInputs) {
List<OrderStack<?>> 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<OrderStack<?>> getOutputIngredients(List<PositionedStack> rawOutputs) {
return getInputIngredients(rawOutputs);
}
}
@@ -72,8 +72,9 @@ public class CPacketValueConfig implements IMessage {
: 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);
}
}
@@ -13,13 +13,10 @@ import com.glodblock.github.FluidCraft;
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 class ClientProxy extends CommonProxy {
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()) {
@@ -3,7 +3,6 @@ package com.glodblock.github.proxy;
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 class CommonProxy {
EntityPlayer player = e.entityPlayer;
EntityItem itemEntity = e.item;
ItemStack stack = itemEntity.getEntityItem();
World world = player.getEntityWorld();
ImmutablePair<Integer, ItemStack> result = Util.getUltraWirelessTerm(player);
if (result != null) {
@@ -62,7 +60,9 @@ public class CommonProxy {
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);
@@ -38,7 +38,6 @@ import appeng.api.AEApi;
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.StorageChannel;
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 final class Util {
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 final class Util {
}
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 final class Util {
}
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<Integer, ItemStack> getUltraWirelessTerm(EntityPlayer player) {