use of com.cjm721.overloaded.storage.stacks.intint.LongEnergyStack in project Overloaded by CJ-MC-Mods.
the class LongEnergyStorageTest method extractEnergy_simulate_whenFalse.
@Test
public void extractEnergy_simulate_whenFalse() {
// Setup Base energy
storage.give(new LongEnergyStack(1000), true);
updateCalled = false;
int simulatedExtract = storage.extractEnergy(1000, false);
assertThat(simulatedExtract).isEqualTo(1000);
assertThat(storage.status().getAmount()).isEqualTo(0);
assertThat(updateCalled).isTrue();
}
use of com.cjm721.overloaded.storage.stacks.intint.LongEnergyStack in project Overloaded by CJ-MC-Mods.
the class TileEnergyExtractor method update.
/**
* Like the old updateEntity(), except more generic.
*/
@Override
public void update() {
BlockPos me = this.getPos();
TileEntity frontTE = getWorld().getTileEntity(me.add(front.getDirectionVec()));
if (frontTE == null || !frontTE.hasCapability(HYPER_ENERGY_HANDLER, front.getOpposite()))
return;
IHyperHandlerEnergy storage = frontTE.getCapability(HYPER_ENERGY_HANDLER, front.getOpposite());
LongEnergyStack energy = storage.take(new LongEnergyStack(Long.MAX_VALUE), false);
for (EnumFacing facing : EnumFacing.values()) {
if (energy.getAmount() == 0L)
return;
if (facing == front)
continue;
TileEntity te = world.getTileEntity(me.add(facing.getDirectionVec()));
if (te == null || !te.hasCapability(ENERGY, facing.getOpposite()))
continue;
IEnergyStorage receiver = te.getCapability(ENERGY, facing.getOpposite());
if (!receiver.canReceive())
continue;
int acceptedAmount = receiver.receiveEnergy((int) Math.min(energy.getAmount(), Integer.MAX_VALUE), true);
if (acceptedAmount != 0) {
receiver.receiveEnergy(acceptedAmount, false);
energy = storage.take(new LongEnergyStack(acceptedAmount), true);
}
}
}
use of com.cjm721.overloaded.storage.stacks.intint.LongEnergyStack in project Overloaded by CJ-MC-Mods.
the class BlockInfiniteCapacitor method onBlockActivated.
@Override
public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
if (!worldIn.isRemote) {
ItemStack heldItem = playerIn.getHeldItem(hand);
if (heldItem.isEmpty() && hand == EnumHand.MAIN_HAND) {
LongEnergyStack stack = ((TileInfiniteCapacitor) worldIn.getTileEntity(pos)).getStorage().status();
// TODO Make the exact number show in a tooltip so it can be easier to read at a glance
double percent = (double) stack.getAmount() / (double) Long.MAX_VALUE;
playerIn.sendStatusMessage(new TextComponentString(String.format("Energy Amount: %,d %,.4f%%", stack.getAmount(), percent)), false);
return true;
}
}
return super.onBlockActivated(worldIn, pos, state, playerIn, hand, side, hitX, hitY, hitZ);
}
use of com.cjm721.overloaded.storage.stacks.intint.LongEnergyStack in project Overloaded by CJ-MC-Mods.
the class ItemEnergyShield method onItemRightClick.
@Nonnull
@Override
public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, @Nonnull EnumHand handIn) {
ItemStack itemstack = playerIn.getHeldItem(handIn);
playerIn.setActiveHand(handIn);
IHyperHandlerEnergy handler = itemstack.getCapability(HYPER_ENERGY_HANDLER, null);
LongEnergyStack energy = handler.take(new LongEnergyStack(initialUseCost), true);
if (energy.amount == initialUseCost) {
System.out.println("Right click Success");
return new ActionResult<>(EnumActionResult.SUCCESS, itemstack);
} else {
System.out.println("Right click FAIL");
return new ActionResult<>(EnumActionResult.FAIL, itemstack);
}
}
use of com.cjm721.overloaded.storage.stacks.intint.LongEnergyStack in project Overloaded by CJ-MC-Mods.
the class TileEnergyExtractor method tick.
@Override
public void tick() {
if (getLevel().isClientSide) {
return;
}
BlockPos me = this.getBlockPos();
TileEntity frontTE = getLevel().getBlockEntity(me.offset(getFacing().getNormal()));
if (frontTE == null) {
return;
}
LazyOptional<IHyperHandlerEnergy> optionalStorage = frontTE.getCapability(HYPER_ENERGY_HANDLER, getFacing().getOpposite());
if (!optionalStorage.isPresent()) {
return;
}
IHyperHandlerEnergy storage = optionalStorage.orElse(null);
for (Direction facing : Direction.values()) {
if (facing == getFacing())
continue;
TileEntity te = level.getBlockEntity(me.offset(facing.getNormal()));
if (te == null)
continue;
LazyOptional<IEnergyStorage> optionalReceiver = te.getCapability(ENERGY, facing.getOpposite());
LongEnergyStack energy = storage.take(new LongEnergyStack(Long.MAX_VALUE), false);
if (energy.getAmount() == 0L)
return;
optionalReceiver.ifPresent(receiver -> {
if (!receiver.canReceive())
return;
int acceptedAmount = receiver.receiveEnergy((int) Math.min(energy.getAmount(), Integer.MAX_VALUE), true);
if (acceptedAmount != 0) {
LongEnergyStack actualTaken = storage.take(new LongEnergyStack(acceptedAmount), true);
receiver.receiveEnergy((int) Math.min(actualTaken.getAmount(), Integer.MAX_VALUE), false);
}
});
}
}
Aggregations