Skip to content

Commit

Permalink
Consolidate charging logic for consistency
Browse files Browse the repository at this point in the history
  • Loading branch information
dizzyd committed Mar 10, 2019
1 parent 8a1a762 commit f6e13c2
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 35 deletions.
35 changes: 3 additions & 32 deletions src/main/java/mekanism/common/tile/TileEntityChargepad.java
Expand Up @@ -19,6 +19,7 @@
import mekanism.common.entity.EntityRobit;
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
import mekanism.common.tile.prefab.TileEntityNoisyBlock;
import mekanism.common.util.ChargeUtils;
import mekanism.common.util.MekanismUtils;
import net.darkhax.tesla.api.ITeslaConsumer;
import net.minecraft.entity.EntityLivingBase;
Expand Down Expand Up @@ -77,15 +78,15 @@ public void onUpdate() {
double prevEnergy = getEnergy();

for (ItemStack itemstack : player.inventory.armorInventory) {
chargeItemStack(itemstack);
ChargeUtils.charge(itemstack, this);

if (prevEnergy != getEnergy()) {
break;
}
}

for (ItemStack itemstack : player.inventory.mainInventory) {
chargeItemStack(itemstack);
ChargeUtils.charge(itemstack, this);

if (prevEnergy != getEnergy()) {
break;
Expand All @@ -112,36 +113,6 @@ public void onUpdate() {
}
}

public void chargeItemStack(ItemStack itemstack) {
if (!itemstack.isEmpty()) {
if (itemstack.getItem() instanceof IEnergizedItem) {
setEnergy(getEnergy() - EnergizedItemManager.charge(itemstack, getEnergy()));
} else if (MekanismUtils.useTesla() && itemstack
.hasCapability(Capabilities.TESLA_CONSUMER_CAPABILITY, null)) {
ITeslaConsumer consumer = itemstack.getCapability(Capabilities.TESLA_CONSUMER_CAPABILITY, null);

long stored = Math.round(getEnergy() * general.TO_TESLA);
setEnergy(getEnergy() - consumer.givePower(stored, false) * general.FROM_TESLA);
} else if (MekanismUtils.useForge() && itemstack.hasCapability(CapabilityEnergy.ENERGY, null)) {
IEnergyStorage storage = itemstack.getCapability(CapabilityEnergy.ENERGY, null);

if (storage.canReceive()) {
int stored = (int) Math.round(Math.min(Integer.MAX_VALUE, getEnergy() * general.TO_FORGE));
setEnergy(getEnergy() - storage.receiveEnergy(stored, false) * general.FROM_FORGE);
}
} else if (MekanismUtils.useRF() && itemstack.getItem() instanceof IEnergyContainerItem) {
IEnergyContainerItem item = (IEnergyContainerItem) itemstack.getItem();

int toTransfer = (int) Math.round(getEnergy() * general.TO_RF);
setEnergy(getEnergy() - (item.receiveEnergy(itemstack, toTransfer, false) * general.FROM_RF));
} else if (MekanismUtils.useIC2() && ElectricItem.manager.getTier(itemstack) > 0) {
double sent = ElectricItem.manager.charge(itemstack, getEnergy() * general.TO_IC2, 4, true, false)
* general.FROM_IC2;
setEnergy(getEnergy() - sent);
}
}
}

@Override
public boolean sideIsConsumer(EnumFacing side) {
return side == EnumFacing.DOWN || side == facing.getOpposite();
Expand Down
14 changes: 11 additions & 3 deletions src/main/java/mekanism/common/util/ChargeUtils.java
Expand Up @@ -79,8 +79,16 @@ public static void discharge(int slotID, IStrictEnergyStorage storer) {
*/
public static void charge(int slotID, IStrictEnergyStorage storer) {
IInventory inv = (TileEntityContainerBlock) storer;
ItemStack stack = inv.getStackInSlot(slotID);
ChargeUtils.charge(inv.getStackInSlot(slotID), storer);
}

/**
* Universally charges an item, and updates the TileEntity's energy level.
*
* @param stack - ItemStack to charge
* @param storer - TileEntity the item is being discharged in
*/
public static void charge(ItemStack stack, IStrictEnergyStorage storer) {
if (!stack.isEmpty() && storer.getEnergy() > 0) {
if (stack.getItem() instanceof IEnergizedItem) {
storer.setEnergy(storer.getEnergy() - EnergizedItemManager.charge(stack, storer.getEnergy()));
Expand All @@ -101,7 +109,7 @@ public static void charge(int slotID, IStrictEnergyStorage storer) {

int toTransfer = (int) Math.round(storer.getEnergy() * general.TO_RF);
storer.setEnergy(storer.getEnergy() - (item.receiveEnergy(stack, toTransfer, false) * general.FROM_RF));
} else if (MekanismUtils.useIC2() && stack.getItem() instanceof IElectricItem) {
} else if (MekanismUtils.useIC2() && ElectricItem.manager.getTier(stack) > 0) {
double sent = ElectricItem.manager.charge(stack, storer.getEnergy() * general.TO_IC2, 4, true, false)
* general.FROM_IC2;
storer.setEnergy(storer.getEnergy() - sent);
Expand Down Expand Up @@ -136,7 +144,7 @@ public static boolean canBeDischarged(ItemStack itemstack) {
* @return if the ItemStack can be discharged
*/
public static boolean canBeCharged(ItemStack itemstack) {
return (MekanismUtils.useIC2() && itemstack.getItem() instanceof IElectricItem) ||
return (MekanismUtils.useIC2() && ElectricItem.manager.getTier(itemstack) > 0) ||
(itemstack.getItem() instanceof IEnergizedItem && ((IEnergizedItem) itemstack.getItem())
.canReceive(itemstack)) ||
(MekanismUtils.useRF() && itemstack.getItem() instanceof IEnergyContainerItem
Expand Down

0 comments on commit f6e13c2

Please sign in to comment.