/** * Copyright (c) Lambda Innovation, 2013-2016 * This file is part of the AcademyCraft mod. * https://github.com/LambdaInnovation/AcademyCraft * Licensed under GPLv3, see project root for more information. */ package cn.academy.support.ic2; import cn.academy.core.AcademyCraft; import cn.academy.crafting.ModuleCrafting; import cn.academy.energy.ModuleEnergy; import cn.academy.support.BlockConverterBase; import cn.academy.support.EnergyBlockHelper; import cn.academy.support.EnergyItemHelper; import cn.academy.support.EnergyItemHelper.EnergyItemManager; import cn.lambdalib.annoreg.core.Registrant; import cn.lambdalib.annoreg.mc.RegInitCallback; import com.google.common.base.Preconditions; import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.registry.GameRegistry; import ic2.api.item.ElectricItem; import ic2.api.item.IC2Items; import ic2.api.item.IElectricItem; import ic2.api.item.IElectricItemManager; import net.minecraft.item.ItemStack; /** * * @author KSkun */ @Registrant public class IC2Support { /** * The convert rate from EU to IF(1IF = <CONV_RATE>EU). */ public static final double CONV_RATE = 1; private static final String MODID = "IC2"; public static double eu2if(double euEnergy) { return euEnergy / CONV_RATE; } public static double if2eu(double ifEnergy) { return ifEnergy * CONV_RATE; } @Optional.Method(modid=MODID) @RegInitCallback public static void init() { BlockEUInput euInput = new BlockEUInput(); BlockEUOutput euOutput = new BlockEUOutput(); GameRegistry.registerBlock(euInput, BlockConverterBase.Item.class, "eu_input"); GameRegistry.registerBlock(euOutput, BlockConverterBase.Item.class, "eu_output"); GameRegistry.registerTileEntity(TileEUInput.class, "eu_input"); GameRegistry.registerTileEntity(TileEUOutput.class, "eu_output"); EnergyBlockHelper.register(new EUSinkManager()); EnergyBlockHelper.register(new EUSourceManager()); GameRegistry.addRecipe(new ItemStack(euInput), "abc", " d ", 'a', ModuleEnergy.energyUnit, 'b', ModuleCrafting.machineFrame, 'c', IC2Items.getItem("insulatedCopperCableItem"), 'd', ModuleCrafting.convComp); GameRegistry.addRecipe(new ItemStack(euOutput), "abc", " d ", 'a', IC2Items.getItem("batBox"), 'b', ModuleCrafting.machineFrame, 'c', IC2Items.getItem("insulatedCopperCableItem"), 'd', ModuleCrafting.convComp); GameRegistry.addRecipe(new ItemStack(euInput),"X",'X',new ItemStack(euOutput)); GameRegistry.addRecipe(new ItemStack(euOutput),"X",'X',new ItemStack(euInput)); EnergyItemHelper.register(new IC2EnergyItemManager()); AcademyCraft.log.info("IC2 API Support has been loaded."); } } class IC2EnergyItemManager implements EnergyItemManager { private IElectricItemManager manager() { return Preconditions.checkNotNull(ElectricItem.manager); } @Override public boolean isSupported(ItemStack stack) { return stack.getItem() instanceof IElectricItem; } @Override public double getEnergy(ItemStack stack) { return manager().getCharge(stack); } @Override public void setEnergy(ItemStack stack, double energy) { double current = getEnergy(stack); double delta = energy - current; if (delta > 0) { manager().charge(stack, delta, 10, true, false); } else { manager().discharge(stack, -delta, 10, true, false, false); } } @Override public double charge(ItemStack stack, double amt, boolean ignoreBandwidth) { double transferred = manager().charge(stack, amt, 10, ignoreBandwidth, false); return amt - transferred; } @Override public double pull(ItemStack stack, double amt, boolean ignoreBandwidth) { double pulled = manager().discharge(stack, amt, 10, ignoreBandwidth, true, false); return pulled; } }