Example usage for net.minecraftforge.energy IEnergyStorage receiveEnergy

List of usage examples for net.minecraftforge.energy IEnergyStorage receiveEnergy

Introduction

In this page you can find the example usage for net.minecraftforge.energy IEnergyStorage receiveEnergy.

Prototype

int receiveEnergy(int maxReceive, boolean simulate);

Source Link

Document

Adds energy to the storage.

Usage

From source file:com.buuz135.industrial.tile.CustomElectricMachine.java

License:Open Source License

@Override
public void protectedUpdate() {
    super.protectedUpdate();
    if (this.world.isRemote)
        return;/*from www.  ja v a 2  s .c  o  m*/
    if (world.getTotalWorldTime() % 2 == 0 && hasAddon(EnergyFieldAddon.class)) {
        ItemStack addon = getAddonStack(EnergyFieldAddon.class);
        if (addon.hasCapability(CapabilityEnergy.ENERGY, null)) {
            IEnergyStorage storage = addon.getCapability(CapabilityEnergy.ENERGY, null);
            storage.extractEnergy((int) this.getEnergyStorage().givePower(storage.extractEnergy(512, true)),
                    false);
            BlockPos pos = ItemRegistry.energyFieldAddon.getLinkedBlockPos(addon);
            if (this.world.getBlockState(pos).getBlock() instanceof EnergyFieldProviderBlock
                    && this.world.isAreaLoaded(pos, pos)) {
                EnergyFieldProviderTile tile = (EnergyFieldProviderTile) this.world.getTileEntity(pos);
                if (tile.getWorkingArea().grow(1)
                        .contains(new Vec3d(this.pos.getX(), this.pos.getY(), this.pos.getZ()))) {
                    float pull = tile.consumeWorkEnergy(
                            Math.min(storage.getMaxEnergyStored() - storage.getEnergyStored(), 1000));
                    storage.receiveEnergy((int) pull, false);
                }
            }
            this.forceSync();
        }
    }
    if (world.getTotalWorldTime() % 10 == 0 && this.getAddonItems() != null) {
        workTransferAddon(this, this.getAddonItems());
    }
}

From source file:com.elytradev.thermionics.tileentity.TileEntityBattery.java

License:Open Source License

@Override
public void update() {
    this.energyStorage.tick();
    IBlockState cur = world.getBlockState(pos);
    EnumFacing facing = cur.getValue(BlockBattery.FACING);
    IEnergyStorage target = RFTransport.getStorage(world, pos.offset(facing), facing.getOpposite());
    if (target.canReceive()) {
        int toPush = Math.min(energyStorage.getEnergyStored(), 800);
        int received = target.receiveEnergy(toPush, false);
        if (received > 0)
            energyStorage.extractEnergy(received, false);
    }/*  w  w w.  jav a  2 s  .co  m*/
}

From source file:com.elytradev.thermionics.tileentity.TileEntityBatteryCreative.java

License:Open Source License

@Override
public void update() {
    this.energyStorage.tick();
    IBlockState cur = world.getBlockState(pos);
    EnumFacing facing = cur.getValue(BlockBattery.FACING);
    IEnergyStorage target = RFTransport.getStorage(world, pos.offset(facing), facing.getOpposite());
    if (target.canReceive()) {
        int toPush = Math.min(energyStorage.getEnergyStored(), target.getMaxEnergyStored());
        int received = target.receiveEnergy(toPush, false);
        if (received > 0)
            energyStorage.extractEnergy(received, false);
        energyStorage.receiveEnergy(energyStorage.getMaxEnergyStored(), false);
    }/*from  ww w  .ja  va 2  s  .  co m*/
}

From source file:com.elytradev.thermionics.transport.RFTransport.java

License:Open Source License

public static void diffuse(World world, BlockPos pos, IEnergyStorage host) {
    ArrayList<IEnergyStorage> consumers = getAdjacentStorage(world, pos);
    reorder(consumers); //We want to sample them in random order
    for (IEnergyStorage consumer : consumers) {
        //int totalEnergy = host.getEnergyStored() + consumer.getEnergyStored();
        //float energyRatio = host.getMaxEnergyStored() / (float)consumer.getMaxEnergyStored();
        float sourceLevel = host.getEnergyStored() / (float) host.getMaxEnergyStored();
        float destLevel = consumer.getEnergyStored() / (float) consumer.getMaxEnergyStored();
        if (sourceLevel > destLevel) {
            //Figure out how many quanta to transfer
            //int desiredSource = (int)(totalEnergy*energyRatio);
            //int desiredDest = (int)(totalEnergy/energyRatio);
            /*/*from   ww  w  . j  a  v  a 2 s  .c o  m*/
             * Example: 2200 source, 1700 dest, capacity for each is 4000.
             * 
             *   totalEnergy: 3900
             *   energyRatio: 1.0f
             *   sourceLevel: 0.55f
             *   destLevel: 0.425f
             *   availableQuanta: 500 / 2 - 1 = 249
             * 
             */

            /*
             * Transmission data:
             * 0 blocks: 775.0
             * 1 block : 393.6
             * 2 blocks: 260.8
             * 3 blocks: 196.6
             * 4 blocks: 157.8
             * 5 blocks: 131.8
             */

            int availableQuanta = ((int) ((sourceLevel - destLevel) * host.getMaxEnergyStored()) / 2); //trunc leaves fractional power differences where they are
            if (availableQuanta <= 0)
                continue;
            //StringBuilder debugString = new StringBuilder("RFTransfer: ");
            //debugString.append(host.getEnergyStored());
            //debugString.append("("); debugString.append((int)(sourceLevel*100)); debugString.append("%) -> ");
            //debugString.append(consumer.getEnergyStored());
            //debugString.append("("); debugString.append((int)(destLevel*100)); debugString.append("%) :");

            //debugString.append(" req="); debugString.append(availableQuanta);
            int transferred = consumer.receiveEnergy(availableQuanta, true);
            if (transferred > 0)
                transferred = host.extractEnergy(transferred, false);
            //debugString.append(" rec="); debugString.append(transferred);
            //System.out.println(debugString.toString());
            consumer.receiveEnergy(transferred, false);
        }
    }
}

From source file:com.lothrazar.cyclicmagic.block.cable.TileEntityCableBase.java

License:Open Source License

private void moveEnergy(EnumFacing myFacingDir) {
    IEnergyStorage handlerHere = this.getCapability(CapabilityEnergy.ENERGY, myFacingDir);
    if (handlerHere.getEnergyStored() == 0) {
        return;/*from  ww w.j  a  v a2  s.  c om*/
    }
    EnumFacing themFacingMe = myFacingDir.getOpposite();
    BlockPos posTarget = pos.offset(myFacingDir);
    TileEntity tileTarget = world.getTileEntity(posTarget);
    if (tileTarget == null || tileTarget.hasCapability(CapabilityEnergy.ENERGY, themFacingMe) == false) {
        return;
    }
    IEnergyStorage handlerOutput = tileTarget.getCapability(CapabilityEnergy.ENERGY, themFacingMe);
    if (handlerHere != null && handlerOutput != null && handlerHere.canExtract()
            && handlerOutput.canReceive()) {
        //first simulate
        int drain = handlerHere.extractEnergy(MENERGY, true);
        if (drain > 0) {
            //now push it into output, but find out what was ACTUALLY taken
            int filled = handlerOutput.receiveEnergy(drain, false);
            //now actually drain that much from here
            handlerHere.extractEnergy(filled, false);
            if (filled > 0 && tileTarget instanceof TileEntityCableBase) {
                //TODO: not so compatible with other fluid systems. itl do i guess
                TileEntityCableBase cable = (TileEntityCableBase) tileTarget;
                if (cable.isEnergyPipe()) {
                    cable.updateIncomingEnergyFace(themFacingMe);
                }
            }
        }
    }
}

From source file:com.lothrazar.cyclicmagic.block.cablepump.energy.TileEntityEnergyPump.java

License:Open Source License

@Override
public void update() {
    if (this.isRunning() == false) {
        return;//  w  w  w.  j a  v a 2s . c o  m
    }
    EnumFacing importFromSide = this.getCurrentFacing();
    IEnergyStorage myEnergy = this.getCapability(CapabilityEnergy.ENERGY, null);
    TileEntity importFromTile = world.getTileEntity(pos.offset(importFromSide));
    IEnergyStorage exportHandler = null;
    IEnergyStorage importHandlr = null;
    if (importFromTile != null
            && importFromTile.hasCapability(CapabilityEnergy.ENERGY, importFromSide.getOpposite())) {
        importHandlr = importFromTile.getCapability(CapabilityEnergy.ENERGY, importFromSide.getOpposite());
        // ModCyclic.logger.error("importFromTile  "+importFromTile.getBlockType().getLocalizedName());
    } else {
        return; //no tile or no capability
    }
    //ALL EXCEPT THIS SIDE
    //IMPORT
    if (importHandlr != null && importHandlr.canExtract()) {
        int drain = importHandlr.extractEnergy(transferRate, true);
        if (drain > 0) {
            //now push it into output, but find out what was ACTUALLY taken
            int filled = myEnergy.receiveEnergy(drain, false);
            //now actually drain that much  
            importHandlr.extractEnergy(filled, false);
            //    ModCyclic.logger.error("pump take IN  " + filled + "i am holding" + this.pumpEnergyStore.getEnergyStored());
        }
    }
    //EXPORT
    List<EnumFacing> sidesOut = getSidesNotFacing();
    for (EnumFacing exportToSide : sidesOut) {
        if (this.hasCapability(CapabilityEnergy.ENERGY, exportToSide) == false) {
            continue;
        }
        TileEntity exportToTile = world.getTileEntity(pos.offset(exportToSide));
        if (exportToTile != null
                && importFromTile.hasCapability(CapabilityEnergy.ENERGY, exportToSide.getOpposite())) {
            exportHandler = exportToTile.getCapability(CapabilityEnergy.ENERGY, exportToSide.getOpposite());
            //   ModCyclic.logger.error("exportToTile   "+exportToTile.getBlockType().getLocalizedName());
        }
        if (exportHandler != null && exportHandler.canReceive()) {
            int drain = myEnergy.extractEnergy(transferRate, true);
            if (drain > 0) {
                //now push it into output, but find out what was ACTUALLY taken
                int filled = exportHandler.receiveEnergy(drain, false);
                //now actually drain that much  
                myEnergy.extractEnergy(filled, false);
                if (world.getTileEntity(pos.offset(exportToSide)) instanceof TileEntityCableBase) {
                    //TODO: not so compatible with other fluid systems. itl do i guess
                    TileEntityCableBase cable = (TileEntityCableBase) world
                            .getTileEntity(pos.offset(exportToSide));
                    //  ModCyclic.logger.error("pump EXPORT  " + filled);
                    if (cable.isEnergyPipe()) {
                        cable.updateIncomingEnergyFace(importFromSide); // .getOpposite()
                    }
                }
                break;//found a side that works, all done
            }
        }
    }
}

From source file:com.lothrazar.cyclicmagic.block.core.TileEntityBaseMachineInvo.java

License:Open Source License

protected void tryOutputPower(int TRANSFER_ENERGY_PER_TICK) {
    // TODO share code in base class somehow? with CableBase maybe?
    List<EnumFacing> targetFaces = Arrays.asList(EnumFacing.values());
    Collections.shuffle(targetFaces);
    for (EnumFacing myFacingDir : targetFaces) {
        BlockPos posTarget = pos.offset(myFacingDir);
        if (this.hasCapability(CapabilityEnergy.ENERGY, myFacingDir) == false) {
            continue;
        }/* w ww  . j a  v  a 2 s .  com*/
        IEnergyStorage handlerHere = this.getCapability(CapabilityEnergy.ENERGY, myFacingDir);
        TileEntity tileTarget = world.getTileEntity(posTarget);
        if (tileTarget == null) {
            continue;
        }
        IEnergyStorage handlerOutput = tileTarget.getCapability(CapabilityEnergy.ENERGY,
                myFacingDir.getOpposite());
        if (handlerHere != null && handlerOutput != null && handlerHere.canExtract()
                && handlerOutput.canReceive()) {
            //first simulate
            int drain = handlerHere.extractEnergy(TRANSFER_ENERGY_PER_TICK, true);
            if (drain > 0) {
                //now push it into output, but find out what was ACTUALLY taken
                int filled = handlerOutput.receiveEnergy(drain, false);
                //now actually drain that much from here
                handlerHere.extractEnergy(filled, false);
                if (tileTarget instanceof TileEntityCableBase) {
                    //TODO: not so compatible with other fluid systems. itl do i guess
                    TileEntityCableBase cable = (TileEntityCableBase) tileTarget;
                    if (cable.isEnergyPipe())
                        cable.updateIncomingEnergyFace(myFacingDir.getOpposite());
                }
                //              return;// stop now because only pull from one side at a time
            }
        }
    }
}

From source file:com.teambr.bookshelf.util.EnergyUtils.java

License:Creative Commons License

/**
 * Transfers power from one storage to another, either can be null if you are not sure if it is capable
 * @param source      The source energy storage
 * @param destination The destination energy storage
 * @param maxAmount   Max amount to transfer
 * @param simulate    True to only simulate, not actually transfer
 * @return The amount moved or would be moved
 *//*w  ww .  j  a va 2 s. c  o  m*/
public static int transferPower(@Nullable IEnergyStorage source, @Nullable IEnergyStorage destination,
        int maxAmount, boolean simulate) {
    if (source == null || destination == null)
        return 0;

    int amount = source.extractEnergy(destination.receiveEnergy(maxAmount, true), true);
    // Try move power
    return destination.receiveEnergy(source.extractEnergy(amount, simulate), simulate);
}

From source file:cpw.mods.simplepower.tiles.RelayTE.java

License:Open Source License

@Override
public void update() {
    if (getWorld().isRemote)
        return;/*from  w ww  . j  a  v  a  2s.c o m*/
    List<IEnergyStorage> receivers = new ArrayList<>(associates.stream().map((pt) -> (ReceiverTE) pt)
            .filter(ReceiverTE::canReceive).collect(Collectors.toList()));

    for (EnumFacing facing : EnumFacing.VALUES) {
        TileEntity receiver = getWorld().getTileEntity(getPos().offset(facing));
        if (receiver != null && receiver.hasCapability(CapabilityEnergy.ENERGY, facing.getOpposite())) {
            final IEnergyStorage receiverCapability = receiver.getCapability(CapabilityEnergy.ENERGY,
                    facing.getOpposite());
            if (receiverCapability.canReceive())
                receivers.add(receiverCapability);
        }
    }

    if (receivers.isEmpty())
        return;
    if (storedEnergy < receivers.size())
        return;
    int amttosend = Math.min(100, storedEnergy / receivers.size());
    int sum = 0;
    for (IEnergyStorage e : receivers) {
        int amt = e.receiveEnergy(amttosend, true);
        amt = e.receiveEnergy(amt, false);
        sum += amt;
    }
    storedEnergy -= sum;
}

From source file:de.canitzp.rarmor.module.main.ActiveModuleMain.java

@Override
public void tick(World world, Entity entity, boolean isWearingHat, boolean isWearingChest,
        boolean isWearingPants, boolean isWearingShoes) {
    if (!world.isRemote) {
        if (this.data.getEnergyStored() < this.data.getMaxEnergyStored()) {
            ItemStack discharge = this.inventory.getStackInSlot(0);
            if (!discharge.isEmpty()) {
                if (discharge.hasCapability(CapabilityEnergy.ENERGY, EnumFacing.DOWN)) {
                    IEnergyStorage storage = discharge.getCapability(CapabilityEnergy.ENERGY, EnumFacing.DOWN);
                    if (storage != null) {
                        int canDischarge = storage.extractEnergy(Integer.MAX_VALUE, true);
                        if (canDischarge > 0) {
                            int discharged = this.data.receiveEnergy(canDischarge, false);
                            storage.extractEnergy(discharged, false);
                            this.data.setDirty();
                        }//  w ww .  ja va 2  s  .  com
                    }
                }
            }
        }

        if (this.data.getEnergyStored() > 0) {
            ItemStack charge = this.inventory.getStackInSlot(1);
            if (!charge.isEmpty()) {
                if (charge.hasCapability(CapabilityEnergy.ENERGY, EnumFacing.DOWN)) {
                    IEnergyStorage storage = charge.getCapability(CapabilityEnergy.ENERGY, EnumFacing.DOWN);
                    if (storage != null) {
                        int canDischarge = storage.receiveEnergy(Integer.MAX_VALUE, true);
                        if (canDischarge > 0) {
                            int discharged = this.data.extractEnergy(canDischarge, false);
                            storage.receiveEnergy(discharged, false);
                            this.data.setDirty();
                        }
                    }
                }
            }
        }

        int energy = this.data.getEnergyStored();
        if (energy != this.lastEnergy && this.data.getTotalTickedTicks() % 10 == 0) {
            this.data.queueUpdate();
            this.lastEnergy = energy;
        }
    }
}