Advertisement
lehjr

Extra Cells Power

Dec 5th, 2014
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.55 KB | None | 0 0
  1. package extracells.part;
  2.  
  3. import appeng.api.AEApi;
  4. import appeng.api.config.Actionable;
  5. import appeng.api.config.RedstoneMode;
  6. import appeng.api.parts.IPartCollisionHelper;
  7. import appeng.api.parts.IPartRenderHelper;
  8. import appeng.api.storage.data.IAEFluidStack;
  9. import appeng.api.util.AEColor;
  10. import cpw.mods.fml.relauncher.Side;
  11. import cpw.mods.fml.relauncher.SideOnly;
  12. import extracells.render.TextureManager;
  13. import net.minecraft.client.renderer.RenderBlocks;
  14. import net.minecraft.client.renderer.Tessellator;
  15. import net.minecraft.util.IIcon;
  16. import net.minecraftforge.common.util.ForgeDirection;
  17. import net.minecraftforge.fluids.Fluid;
  18. import net.minecraftforge.fluids.FluidStack;
  19. import net.minecraftforge.fluids.FluidTankInfo;
  20. import net.minecraftforge.fluids.IFluidHandler;
  21. import appeng.api.networking.energy.IEnergyGrid;
  22. import appeng.api.config.PowerMultiplier;
  23.  
  24.  
  25. import java.util.ArrayList;
  26. import java.util.List;
  27.  
  28. public class PartFluidImport extends PartFluidIO implements IFluidHandler {
  29.  
  30.     private double fluidRate = 0;
  31.  
  32.     @SideOnly(Side.CLIENT)
  33.     @Override
  34.     public void renderInventory(IPartRenderHelper rh, RenderBlocks renderer) {
  35.         Tessellator ts = Tessellator.instance;
  36.  
  37.         IIcon side = TextureManager.IMPORT_SIDE.getTexture();
  38.         rh.setTexture(side, side, side, TextureManager.IMPORT_FRONT.getTexture(), side, side);
  39.         rh.setBounds(4, 4, 14, 12, 12, 16);
  40.         rh.renderInventoryBox(renderer);
  41.  
  42.         rh.setTexture(side);
  43.         rh.setBounds(5, 5, 13, 11, 11, 14);
  44.         rh.renderInventoryBox(renderer);
  45.         rh.setBounds(6, 6, 12, 10, 10, 13);
  46.         rh.renderInventoryBox(renderer);
  47.  
  48.         rh.setBounds(4, 4, 14, 12, 12, 16);
  49.         rh.setInvColor(AEColor.Cyan.blackVariant);
  50.         ts.setBrightness(15 << 20 | 15 << 4);
  51.         rh.renderInventoryFace(TextureManager.IMPORT_FRONT.getTextures()[1], ForgeDirection.SOUTH, renderer);
  52.  
  53.  
  54.         rh.setBounds(6, 6, 11, 10, 10, 12);
  55.         renderInventoryBusLights(rh, renderer);
  56.     }
  57.  
  58.     @SideOnly(Side.CLIENT)
  59.     @Override
  60.     public void renderStatic(int x, int y, int z, IPartRenderHelper rh, RenderBlocks renderer) {
  61.         Tessellator ts = Tessellator.instance;
  62.  
  63.         IIcon side = TextureManager.IMPORT_SIDE.getTexture();
  64.         rh.setTexture(side, side, side, TextureManager.IMPORT_FRONT.getTextures()[0], side, side);
  65.         rh.setBounds(4, 4, 14, 12, 12, 16);
  66.         rh.renderBlock(x, y, z, renderer);
  67.  
  68.         ts.setColorOpaque_I(getHost().getColor().blackVariant);
  69.         if (isActive())
  70.             ts.setBrightness(15 << 20 | 15 << 4);
  71.         rh.renderFace(x, y, z, TextureManager.IMPORT_FRONT.getTextures()[1], ForgeDirection.SOUTH, renderer);
  72.  
  73.         rh.setTexture(side);
  74.         rh.setBounds(5, 5, 13, 11, 11, 14);
  75.         rh.renderBlock(x, y, z, renderer);
  76.         rh.setBounds(6, 6, 12, 10, 10, 13);
  77.         rh.renderBlock(x, y, z, renderer);
  78.  
  79.         rh.setBounds(6, 6, 11, 10, 10, 12);
  80.         renderStaticBusLights(x, y, z, rh, renderer);
  81.     }
  82.  
  83.     @Override
  84.     public void getBoxes(IPartCollisionHelper bch) {
  85.         bch.addBox(4, 4, 14, 12, 12, 16);
  86.         bch.addBox(5, 5, 13, 11, 11, 14);
  87.         bch.addBox(6, 6, 12, 10, 10, 13);
  88.         bch.addBox(6, 6, 11, 10, 10, 12);
  89.     }
  90.  
  91.     @Override
  92.     public int cableConnectionRenderTo() {
  93.         return 5;
  94.     }
  95.  
  96.     public boolean doWork(int rate, int TicksSinceLastCall) {
  97.         fluidRate = rate * 0.01;
  98.  
  99.         if (getFacingTank() == null)
  100.             return false;
  101.         boolean empty = true;
  102.         double powerDrain = 0;
  103.  
  104.         List<Fluid> filter = new ArrayList<Fluid>();
  105.         filter.add(filterFluids[4]);
  106.  
  107.         if (filterSize >= 1) {
  108.             for (byte i = 1; i < 9; i += 2) {
  109.                 if (i != 4) {
  110.                     filter.add(filterFluids[i]);
  111.                 }
  112.             }
  113.         }
  114.  
  115.         if (filterSize >= 2) {
  116.             for (byte i = 0; i < 9; i += 2) {
  117.                 if (i != 4) {
  118.                     filter.add(filterFluids[i]);
  119.                 }
  120.             }
  121.         }
  122.  
  123.         for (Fluid fluid : filter) {
  124.             if (fluid != null) {
  125.                 empty = false;
  126.  
  127.                 if (fillToNetwork(fluid, rate * TicksSinceLastCall)) {
  128.                     return true;
  129.                 }
  130.             }
  131.         }
  132.         if (empty)
  133.             return fillToNetwork(null, rate * TicksSinceLastCall);
  134.         return false;
  135.     }
  136.  
  137.     private boolean fillToNetwork(Fluid fluid, int toDrain) {
  138.         FluidStack drained;
  139.         IFluidHandler facingTank = getFacingTank();
  140.         ForgeDirection side = getSide();
  141.         double powerDrain = 0;
  142.  
  143.         if (fluid == null) {
  144.             drained = facingTank.drain(side.getOpposite(), toDrain, false);
  145.         } else {
  146.             drained = facingTank.drain(side.getOpposite(), new FluidStack(fluid, toDrain), false);
  147.         }
  148.  
  149.         if (drained == null || drained.amount <= 0 || drained.fluidID <= 0)
  150.             return false;
  151.  
  152.         IAEFluidStack toFill = AEApi.instance().storage().createFluidStack(drained);
  153.         IAEFluidStack notInjected = injectFluid(toFill, Actionable.MODULATE);
  154.  
  155.         IEnergyGrid g = getGridNode().getGrid().getCache(IEnergyGrid.class);
  156.         powerDrain = g.extractAEPower(fluidRate, Actionable.MODULATE, PowerMultiplier.ONE);
  157.  
  158.         if (notInjected != null) {
  159.             int amount = (int) (toFill.getStackSize() - notInjected.getStackSize());
  160.             if (amount > 0) {
  161.                 if (fluid == null)
  162.                     facingTank.drain(side.getOpposite(), amount, true);
  163.                 else
  164.                     facingTank.drain(side.getOpposite(), new FluidStack(toFill.getFluid(), amount), true);
  165.                 return true;
  166.             } else {
  167.                 return false;
  168.             }
  169.         } else {
  170.             if (fluid == null)
  171.                 facingTank.drain(side.getOpposite(), toFill.getFluidStack().amount, true);
  172.             else
  173.                 facingTank.drain(side.getOpposite(), toFill.getFluidStack(), true);
  174.             return true;
  175.         }
  176.     }
  177.  
  178.     @Override
  179.     public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
  180.         boolean redstonePowered = isRedstonePowered();
  181.         if (resource == null || (redstonePowered && getRedstoneMode() == RedstoneMode.LOW_SIGNAL || !redstonePowered && getRedstoneMode() == RedstoneMode.HIGH_SIGNAL))
  182.             return 0;
  183.         int drainAmount = Math.min(125 + speedState * 125, resource.amount);
  184.         FluidStack toFill = new FluidStack(resource.fluidID, drainAmount);
  185.         Actionable action = doFill ? Actionable.MODULATE : Actionable.SIMULATE;
  186.         IAEFluidStack filled = injectFluid(AEApi.instance().storage().createFluidStack(toFill), action);
  187.         if (filled == null)
  188.             return toFill.amount;
  189.         return toFill.amount - (int) filled.getStackSize();
  190.     }
  191.  
  192.     @Override
  193.     public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
  194.         return null;
  195.     }
  196.  
  197.     @Override
  198.     public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) {
  199.         return null;
  200.     }
  201.  
  202.     @Override
  203.     public boolean canFill(ForgeDirection from, Fluid fluid) {
  204.         return true;
  205.     }
  206.  
  207.     @Override
  208.     public boolean canDrain(ForgeDirection from, Fluid fluid) {
  209.         return false;
  210.     }
  211.  
  212.     @Override
  213.     public FluidTankInfo[] getTankInfo(ForgeDirection from) {
  214.         return new FluidTankInfo[0];
  215.     }
  216.  
  217.     @Override
  218.     public double getPowerUsage() {
  219.         return 1.0D;
  220.     }
  221.  
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement