diff options
-rw-r--r-- | src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java | 119 |
1 files changed, 94 insertions, 25 deletions
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java index fa11fe9fbd..291e3856b8 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java @@ -9,10 +9,16 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent; import gregtech.api.enums.GT_Values; import gregtech.api.items.GT_MetaGenerated_Tool; import gregtech.api.util.GT_ModHandler; +import gregtech.common.items.GT_MetaGenerated_Item_01; +import gregtech.common.items.GT_MetaGenerated_Item_02; +import gregtech.common.items.GT_MetaGenerated_Item_03; +import gregtech.common.items.GT_MetaGenerated_Tool_01; +import gregtech.common.tools.GT_Tool; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.array.BlockPos; import gtPlusPlus.core.util.array.Pair; import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.nbt.NBTUtils; import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaWirelessCharger; import ic2.api.info.Info; import ic2.api.item.ElectricItem; @@ -43,12 +49,16 @@ public class ChargingHelper { //Utils.LOG_INFO("Found Server-Side."); mTickTimer++; - if (mTickTimer % 20 == 0){ + if (mTickTimer % 10 == 0){ long mVoltage = 0; long mEuStored = 0; - if (!mChargerMap.isEmpty() && mValidPlayers.containsKey(mPlayerMan)){ + if (!mChargerMap.isEmpty() && mValidPlayers.containsKey(mPlayerMan)){ + + InventoryPlayer mPlayerInventory = mPlayerMan.inventory; + ItemStack[] mArmourContents = mPlayerInventory.armorInventory.clone(); + ItemStack[] mInventoryContents = mPlayerInventory.mainInventory.clone(); for (GregtechMetaWirelessCharger mEntityTemp : mChargerMap.values()){ if (mEntityTemp != null){ @@ -56,10 +66,6 @@ public class ChargingHelper { mEuStored = mEntityTemp.getEUVar(); if (mVoltage > 0 && mEuStored >= mVoltage){ - InventoryPlayer mPlayerInventory = mPlayerMan.inventory; - ItemStack[] mArmourContents = mPlayerInventory.armorInventory; - ItemStack[] mInventoryContents = mPlayerInventory.mainInventory; - Map<EntityPlayer, UUID> LR = mEntityTemp.getLongRangeMap(); Map<UUID, EntityPlayer> LO = mEntityTemp.getLocalMap(); @@ -215,7 +221,7 @@ public class ChargingHelper { } return mEntityTemp.getDistanceBetweenTwoPositions(mEntityTemp.getTileEntityPosition(), mEntityTemp.getPositionOfEntity(mPlayerMan)); } - + public long chargeItems(GregtechMetaWirelessCharger mEntity, ItemStack[] mItems, EntityPlayer mPlayer){ if (mEntity == null){ return -100; @@ -229,42 +235,106 @@ public class ChargingHelper { } public long chargeItemsEx(GregtechMetaWirelessCharger mEntity, ItemStack[] mItems, EntityPlayer mPlayer){ + + //Bad Entity if (mEntity == null){ return -100; } + //Bad Inventory if (mItems == null || mItems.length == 0){ return mEntity.getEUVar(); } + //Set Variables to Charge int mChargedItems = 0; final int mTier = mEntity.getTier(); final long mVoltage = mEntity.maxEUInput(); long mEuStored = mEntity.getEUVar(); final long mEuStoredOriginal = mEntity.getEUVar(); + //For Inventory Contents + + int mItemSlot = 0; + for (ItemStack mTemp : mItems){ + mItemSlot++; + //Is item Electrical if (isItemValid(mTemp)){ - double mItemTier = ((IElectricItem) mTemp.getItem()).getTransferLimit(mTemp); - if (mEuStored >= mItemTier){ + + //Transfer Limit + double mItemEuTLimit = ((IElectricItem) mTemp.getItem()).getTransferLimit(mTemp); + //Check if Tile has more or equal EU to what can be transferred into the item. + if (mEuStored >= mItemEuTLimit){ + double mItemMaxCharge = ((IElectricItem) mTemp.getItem()).getMaxCharge(mTemp); double mitemCurrentCharge = ElectricItem.manager.getCharge(mTemp); - - double mVoltageDecrease; - if (mItemTier >= mVoltage){ - mVoltageDecrease = mVoltage; + + //Try get charge direct from NBT for GT and IC2 stacks + try { + if (mTemp.getItem() instanceof GT_MetaGenerated_Tool_01 + || mTemp.getItem() instanceof GT_MetaGenerated_Item_01 + || mTemp.getItem() instanceof GT_MetaGenerated_Item_02 + || Class.forName("gregtech.common.items.GT_MetaGenerated_Item_03").isInstance(mTemp.getItem()) + || mTemp.getItem().getClass().getName().toLowerCase().equals(("gregtech.common.items.GT_MetaGenerated_Tool_01").toLowerCase())){ + if (!NBTUtils.hasKey(mTemp, "GT.ItemCharge")){ + if (!mTemp.getDisplayName().toLowerCase().contains("battery")){ + if (!GT_ModHandler.isElectricItem(mTemp)){ + continue; + } + } + else { + mitemCurrentCharge = 0; + } + } + else { + mitemCurrentCharge = NBTUtils.getLong(mTemp, "GT.ItemCharge"); + } + } + else if (mTemp.getItem() instanceof IElectricItem){ + mitemCurrentCharge = NBTUtils.getLong(mTemp, "charge"); + } + } catch (ClassNotFoundException e) { + + } + + double mVoltageIncrease; + if (mItemEuTLimit >= mVoltage){ + mVoltageIncrease = mVoltage; + } + else if (mItemEuTLimit < mVoltage){ + mVoltageIncrease = mItemEuTLimit; + } + else { + mVoltageIncrease = mItemEuTLimit; + } + + int mMulti; + if ((mitemCurrentCharge + (mVoltageIncrease*20)) <= (mItemMaxCharge - (mVoltageIncrease*20))){ + mMulti = 20; + } + else if ((mitemCurrentCharge + (mVoltageIncrease*10)) <= (mItemMaxCharge - (mVoltageIncrease*10))){ + mMulti = 10; + } + else if ((mitemCurrentCharge + (mVoltageIncrease*5)) <= (mItemMaxCharge - (mVoltageIncrease*5))){ + mMulti = 5; } - else if (mItemTier < mVoltage){ - mVoltageDecrease = mItemTier; + else if ((mitemCurrentCharge + mVoltageIncrease) <= (mItemMaxCharge - mVoltageIncrease)){ + mMulti = 1; } else { - mVoltageDecrease = mItemTier; + mMulti = 1; } - - if ((mitemCurrentCharge + mVoltageDecrease) <= (mItemMaxCharge - mVoltageDecrease)){ - ElectricItem.manager.charge(mTemp, mVoltageDecrease, mTier, false, false); - mEntity.setEUVar((long) (mEuStored-mVoltage)); + + int mMultiVoltage = (int) (mMulti*mVoltageIncrease); + + if ((mitemCurrentCharge + (mVoltageIncrease*mMulti)) <= (mItemMaxCharge - (mVoltageIncrease*mMulti))){ + GT_ModHandler.chargeElectricItem(mTemp, mMultiVoltage, mTier, false, false); + //ElectricItem.manager.charge(mTemp, (mItemMaxCharge), mTier, false, false); + mEntity.setEUVar((long) (mEuStored-(mVoltage*mMulti))); mEuStored = mEntity.getEUVar(); + Utils.LOG_INFO("Charged "+mTemp.getDisplayName()+" | Slot: "+mItemSlot+" | EU Multiplier: "+mMulti+" | EU/t input: "+mVoltageIncrease+" | EU/t consumed by Tile: "+mVoltage+" | Item Max Charge: "+mItemMaxCharge+" | Item Start Charge: "+mitemCurrentCharge+" | Item New Charge"+ElectricItem.manager.getCharge(mTemp)); mChargedItems++; - Utils.LOG_INFO("Charged "+mTemp.getDisplayName()+" by "+mItemTier+" for "+mPlayer.getCommandSenderName()); } + + } } } @@ -278,6 +348,9 @@ public class ChargingHelper { if (itemstack == null){ return false; } + if (GT_ModHandler.isElectricItem(itemstack)){ + return true; + } if ((accepts(itemstack)) || (itemstack.getItem() instanceof IElectricItem)) { return true; } @@ -288,10 +361,6 @@ public class ChargingHelper { if (stack == null) { return false; } - if (GT_ModHandler.isElectricItem(stack)){ - return true; - } - return (Info.itemEnergy.getEnergyValue(stack) > 0.0D) || (ElectricItem.manager.discharge(stack, (1.0D / 0.0D), 4, true, true, true) > 0.0D); } |