List of usage examples for net.minecraftforge.energy IEnergyStorage receiveEnergy
int receiveEnergy(int maxReceive, boolean simulate);
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; } } }