diff options
-rw-r--r-- | src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java | 382 |
1 files changed, 115 insertions, 267 deletions
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java index 842e19438b..ce9ea45841 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java @@ -1,17 +1,21 @@ package gtPlusPlus.xmod.gregtech.common.helpers; import static gregtech.api.GregTech_API.mEUtoRF; -import static gregtech.api.enums.Mods.COFHCore; +import static gregtech.api.enums.Mods.*; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import javax.annotation.Nonnull; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; +import baubles.api.BaublesApi; import cofh.api.energy.IEnergyContainerItem; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -21,7 +25,6 @@ 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 gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.Pair; import gtPlusPlus.api.objects.minecraft.BlockPos; import gtPlusPlus.core.util.Utils; @@ -33,125 +36,82 @@ import ic2.api.item.IElectricItem; public class ChargingHelper { - private static Map<String, Pair<GregtechMetaWirelessCharger, Byte>> mValidPlayers = new HashMap<String, Pair<GregtechMetaWirelessCharger, Byte>>(); - protected static Map<BlockPos, GregtechMetaWirelessCharger> mChargerMap = new HashMap<BlockPos, GregtechMetaWirelessCharger>(); + private static final Map<String, Pair<GregtechMetaWirelessCharger, Byte>> mValidPlayers = new HashMap<>(); + protected static Map<BlockPos, GregtechMetaWirelessCharger> mChargerMap = new HashMap<>(); private int mTickTimer = 0; - private final int mTickMultiplier = 20; + private static final int mTickMultiplier = 20; // Called whenever the player is updated or ticked. @SubscribeEvent(priority = EventPriority.HIGHEST) + @SuppressWarnings("unused") public void onPlayerTick(LivingUpdateEvent event) { try { if (event.entity != null && event.entityLiving != null) { - if (event.entityLiving instanceof EntityPlayer) { - EntityPlayer mPlayerMan = (EntityPlayer) event.entityLiving; - - if (mPlayerMan != null) { - // Utils.LOG_WARNING("Found Player."); - - if (Utils.isServer()) { - // Utils.LOG_WARNING("Found Server-Side."); - - mTickTimer++; - if (mTickTimer % mTickMultiplier == 0) { - - long mVoltage = 0; - long mEuStored = 0; - - if (!mChargerMap.isEmpty() && mValidPlayers.containsKey(mPlayerMan.getDisplayName())) { - InventoryPlayer mPlayerInventory = mPlayerMan.inventory; - ItemStack[] mArmourContents = mPlayerInventory.armorInventory.clone(); - ItemStack[] mInventoryContents = mPlayerInventory.mainInventory.clone(); - - for (GregtechMetaWirelessCharger mEntityTemp : mChargerMap.values()) { - if (mEntityTemp != null) { - if (mEntityTemp.getBaseMetaTileEntity() == null - || !mEntityTemp.getBaseMetaTileEntity().isAllowedToWork()) - continue; - if (mPlayerMan.getEntityWorld().provider.dimensionId - == mEntityTemp.getDimensionID()) { - mVoltage = mEntityTemp.maxEUInput(); - mEuStored = mEntityTemp.getEUVar(); - if (mVoltage > 0 && mEuStored >= mVoltage) { - - Map<String, UUID> LR = mEntityTemp.getLongRangeMap(); - Map<String, UUID> LO = mEntityTemp.getLocalMap(); - - long mStartingEu = mEntityTemp.getEUVar(); - long mCurrentEu = mEntityTemp.getEUVar(); - long mEuUsed = 0; + if (event.entityLiving instanceof EntityPlayer mPlayerMan) { + if (Utils.isServer()) { + mTickTimer++; + if (mTickTimer % mTickMultiplier == 0) { + + long mVoltage; + long mEuStored; + + if (!mChargerMap.isEmpty() && mValidPlayers.containsKey(mPlayerMan.getDisplayName())) { + InventoryPlayer mPlayerInventory = mPlayerMan.inventory; + ItemStack[] mArmourContents = mPlayerInventory.armorInventory.clone(); + ItemStack[] mInventoryContents = mPlayerInventory.mainInventory.clone(); + ItemStack[] baubleSlots = null; + if (Baubles.isModLoaded()) { + IInventory baubleInv = BaublesApi.getBaubles(mPlayerMan); + if (baubleInv != null) { + baubleSlots = new ItemStack[baubleInv.getSizeInventory()]; + for (int i = 0; i < baubleInv.getSizeInventory(); i++) { + baubleSlots[i] = baubleInv.getStackInSlot(i); + } + } + } + + for (GregtechMetaWirelessCharger mEntityTemp : mChargerMap.values()) { + if (mEntityTemp != null) { + if (mEntityTemp.getBaseMetaTileEntity() == null + || !mEntityTemp.getBaseMetaTileEntity().isAllowedToWork()) + continue; + if (mPlayerMan.getEntityWorld().provider.dimensionId + == mEntityTemp.getDimensionID()) { + mVoltage = mEntityTemp.maxEUInput(); + mEuStored = mEntityTemp.getEUVar(); + if (mVoltage > 0 && mEuStored >= mVoltage) { + + Map<String, UUID> LR = mEntityTemp.getLongRangeMap(); + Map<String, UUID> LO = mEntityTemp.getLocalMap(); + + long mStartingEu = mEntityTemp.getEUVar(); + if (canCharge(mEntityTemp, mPlayerMan, LR, LO)) { + chargeItems(mEntityTemp, mArmourContents); + chargeItems(mEntityTemp, mInventoryContents); + chargeItems(mEntityTemp, baubleSlots); + } + + if (mStartingEu - mEntityTemp.getEUVar() <= 0) { + long mMaxDistance; if (mEntityTemp.getMode() == 0) { - if (!LR.isEmpty() - && LR.containsKey(mPlayerMan.getDisplayName())) { - mCurrentEu = chargeItems( - mEntityTemp, - mArmourContents, - mPlayerMan); - mCurrentEu = chargeItems( - mEntityTemp, - mInventoryContents, - mPlayerMan); - } + mMaxDistance = (4 * GT_Values.V[mEntityTemp.getTier()]); } else if (mEntityTemp.getMode() == 1) { - if (!LO.isEmpty() - && LO.containsKey(mPlayerMan.getDisplayName())) { - mCurrentEu = chargeItems( - mEntityTemp, - mArmourContents, - mPlayerMan); - mCurrentEu = chargeItems( - mEntityTemp, - mInventoryContents, - mPlayerMan); - } + mMaxDistance = (mEntityTemp.getTier() * 10L); } else { - if (!LR.isEmpty() - && LR.containsKey(mPlayerMan.getDisplayName())) { - mCurrentEu = chargeItems( - mEntityTemp, - mArmourContents, - mPlayerMan); - mCurrentEu = chargeItems( - mEntityTemp, - mInventoryContents, - mPlayerMan); - } - if (!LO.isEmpty() - && LO.containsKey(mPlayerMan.getDisplayName())) { - mCurrentEu = chargeItems( - mEntityTemp, - mArmourContents, - mPlayerMan); - mCurrentEu = chargeItems( - mEntityTemp, - mInventoryContents, - mPlayerMan); - } + mMaxDistance = (4 * GT_Values.V[mEntityTemp.getTier()] / 2); } - - if ((mEuUsed = (mStartingEu - mCurrentEu)) <= 0 - && mEntityTemp != null) { - long mMaxDistance; - if (mEntityTemp.getMode() == 0) { - mMaxDistance = (4 * GT_Values.V[mEntityTemp.getTier()]); - } else if (mEntityTemp.getMode() == 1) { - mMaxDistance = (mEntityTemp.getTier() * 10); + double mDistance = calculateDistance(mEntityTemp, mPlayerMan); + long mVoltageCost = MathUtils + .findPercentageOfInt(mMaxDistance, (float) mDistance); + + if (mVoltageCost > 0) { + if (mVoltageCost > mEntityTemp.maxEUInput()) { + mEntityTemp.setEUVar( + (mEntityTemp.getEUVar() + - mEntityTemp.maxEUInput())); } else { - mMaxDistance = (4 * GT_Values.V[mEntityTemp.getTier()] / 2); - } - double mDistance = calculateDistance(mEntityTemp, mPlayerMan); - long mVoltageCost = MathUtils - .findPercentageOfInt(mMaxDistance, (float) mDistance); - - if (mVoltageCost > 0) { - if (mVoltageCost > mEntityTemp.maxEUInput()) { - mEntityTemp.setEUVar( - (mEntityTemp.getEUVar() - - mEntityTemp.maxEUInput())); - } else { - mEntityTemp.setEUVar( - (mEntityTemp.getEUVar() - mVoltageCost)); - } + mEntityTemp + .setEUVar((mEntityTemp.getEUVar() - mVoltageCost)); } } } @@ -165,7 +125,6 @@ public class ChargingHelper { } } } catch (Throwable t) { - // Utils.LOG_WARNING("State of Wireless Charger changed in an invalid way, this prevented a crash."); if (!mChargerMap.isEmpty()) { for (BlockPos aPos : mChargerMap.keySet()) { GregtechMetaWirelessCharger r = mChargerMap.get(aPos); @@ -174,7 +133,6 @@ public class ChargingHelper { } } } - // t.printStackTrace(); } } @@ -183,11 +141,7 @@ public class ChargingHelper { return false; } if (!mChargerMap.containsKey(mPos)) { - if (mChargerMap.put(mPos, mEntity) == null) { - return true; - } else { - return false; - } + return mChargerMap.put(mPos, mEntity) == null; } else { return true; } @@ -198,11 +152,7 @@ public class ChargingHelper { return false; } if (mChargerMap.containsKey(mPos)) { - if (mChargerMap.remove(mPos, mEntity)) { - return true; - } else { - return false; - } + return mChargerMap.remove(mPos, mEntity); } else { return false; } @@ -212,22 +162,11 @@ public class ChargingHelper { if (mEntity == null) { return false; } - Logger.WARNING("trying to map new player"); if (mValidPlayers.containsKey(mPlayer.getDisplayName())) { - Logger.WARNING("Key contains player already?"); return false; } else { - Logger.WARNING("key not found, adding"); - Pair<GregtechMetaWirelessCharger, Byte> mEntry = new Pair<GregtechMetaWirelessCharger, Byte>( - mEntity, - (byte) mEntity.getMode()); - if (mValidPlayers.put(mPlayer.getDisplayName(), mEntry) == null) { - Logger.WARNING("Added a Player to the Tick Map."); - return true; - } else { - Logger.WARNING("Tried to add player but it was already there?"); - return false; - } + Pair<GregtechMetaWirelessCharger, Byte> mEntry = new Pair<>(mEntity, (byte) mEntity.getMode()); + return mValidPlayers.put(mPlayer.getDisplayName(), mEntry) == null; } } @@ -235,26 +174,29 @@ public class ChargingHelper { if (mEntity == null) { return false; } - Logger.WARNING("trying to remove player from map"); if (mValidPlayers.containsKey(mPlayer.getDisplayName())) { - Logger.WARNING("key found, removing"); - Pair<GregtechMetaWirelessCharger, Byte> mEntry = new Pair<GregtechMetaWirelessCharger, Byte>( - mEntity, - (byte) mEntity.getMode()); - if (mValidPlayers.remove(mPlayer, mEntry)) { - Logger.WARNING("Removed a Player to the Tick Map."); - return true; - } else { - Logger.WARNING("Tried to remove player but it was not there?"); - return false; - } + Pair<GregtechMetaWirelessCharger, Byte> mEntry = new Pair<>(mEntity, (byte) mEntity.getMode()); + return mValidPlayers.remove(mPlayer.getDisplayName(), mEntry); } else { - Logger.WARNING("Key does not contain player?"); return false; } } - public double calculateDistance(GregtechMetaWirelessCharger mEntityTemp, EntityPlayer mPlayerMan) { + private boolean canCharge(GregtechMetaWirelessCharger charger, EntityPlayer chargeablePlayer, + Map<String, UUID> longRangeChargers, Map<String, UUID> shortRangeChargers) { + if (charger.getMode() == 0) { + return !longRangeChargers.isEmpty() && longRangeChargers.containsKey(chargeablePlayer.getDisplayName()); + } else if (charger.getMode() == 1) { + return !shortRangeChargers.isEmpty() && shortRangeChargers.containsKey(chargeablePlayer.getDisplayName()); + } else { + if (!longRangeChargers.isEmpty() && longRangeChargers.containsKey(chargeablePlayer.getDisplayName())) { + return true; + } + return !shortRangeChargers.isEmpty() && shortRangeChargers.containsKey(chargeablePlayer.getDisplayName()); + } + } + + private double calculateDistance(GregtechMetaWirelessCharger mEntityTemp, EntityPlayer mPlayerMan) { if (mEntityTemp == null || mPlayerMan == null) { return 0; } @@ -263,52 +205,30 @@ public class ChargingHelper { mEntityTemp.getPositionOfEntity(mPlayerMan)); } - public long chargeItems(GregtechMetaWirelessCharger mEntity, ItemStack[] mItems, EntityPlayer mPlayer) { - if (mEntity == null) { - return -100; - } + private void chargeItems(@Nonnull GregtechMetaWirelessCharger mEntity, ItemStack[] mItems) { if (mItems == null || mItems.length == 0) { - return mEntity.getEUVar(); + return; } - long mInitialValue = mEntity.getEUVar(); - long mReturnValue = chargeItemsEx(mEntity, mItems, mPlayer); - return ((mReturnValue < mInitialValue) ? mReturnValue : mInitialValue); + chargeItemsEx(mEntity, mItems); } - public long chargeItemsEx(GregtechMetaWirelessCharger mEntity, ItemStack[] mItems, EntityPlayer mPlayer) { - - // Bad Entity - if (mEntity == null) { - return -100; - } + private void chargeItemsEx(@Nonnull GregtechMetaWirelessCharger mEntity, ItemStack[] mItems) { // Bad Inventory if (mItems == null || mItems.length == 0) { - return mEntity.getEUVar(); + return; } // 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++; - if (mTemp != null) { - Logger.WARNING("Slot " + mItemSlot + " contains " + mTemp.getDisplayName()); - } // Is item Electrical if (isItemValid(mTemp)) { - Logger.WARNING("1"); - // 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) { - Logger.WARNING("2"); double mItemMaxCharge = ((IElectricItem) mTemp.getItem()).getMaxCharge(mTemp); double mitemCurrentCharge = ElectricItem.manager.getCharge(mTemp); @@ -317,8 +237,7 @@ public class ChargingHelper { continue; } - // Try get charge direct from NBT for GT and IC2 stacks - Logger.WARNING("3"); + // Try to get charge direct from NBT for GT and IC2 stacks if (mTemp.getItem() instanceof GT_MetaGenerated_Tool_01 || mTemp.getItem() instanceof GT_MetaGenerated_Item_01 || mTemp.getItem() instanceof GT_MetaGenerated_Item_02 @@ -349,8 +268,6 @@ public class ChargingHelper { mVoltageIncrease = mItemEuTLimit; } - Logger.WARNING("4"); - int mMulti; if ((mitemCurrentCharge + (mVoltageIncrease * 20)) <= (mItemMaxCharge - (mVoltageIncrease * 20))) { mMulti = 20; @@ -364,44 +281,19 @@ public class ChargingHelper { } else { mMulti = 1; } - Logger.WARNING("5"); int mMultiVoltage = (int) (mMulti * mVoltageIncrease); if ((mitemCurrentCharge + mMultiVoltage) <= mItemMaxCharge) { - Logger.WARNING("6"); - int g = 0; - if ((g = GT_ModHandler.chargeElectricItem(mTemp, mMultiVoltage, Integer.MAX_VALUE, true, false)) + if (GT_ModHandler.chargeElectricItem(mTemp, mMultiVoltage, Integer.MAX_VALUE, true, false) > 0) { - Logger.WARNING("6.5 - " + g + " - " + mMulti); for (int i = 0; i < mMulti; i++) { - if (ElectricItem.manager - .charge(mTemp, mVoltageIncrease, Integer.MAX_VALUE, false, false) > 0) { - continue; - } + ElectricItem.manager.charge(mTemp, mVoltageIncrease, Integer.MAX_VALUE, false, false); } } if (ElectricItem.manager.getCharge(mTemp) > mitemCurrentCharge) { - Logger.WARNING("7"); mEntity.setEUVar(mEuStored - (mVoltage * mMulti)); mEuStored = mEntity.getEUVar(); - Logger.WARNING( - "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++; } } @@ -409,31 +301,10 @@ public class ChargingHelper { mitemCurrentCharge = ElectricItem.manager.getCharge(mTemp); if (mitemCurrentCharge < mItemMaxCharge && mitemCurrentCharge >= (mItemMaxCharge - mVoltage)) { int xDif = (int) (mItemMaxCharge - mitemCurrentCharge); - Logger.WARNING("8 - " + xDif); - int g = 0; - if ((g = GT_ModHandler.chargeElectricItem(mTemp, xDif, Integer.MAX_VALUE, true, false)) >= 0) { - Logger.WARNING("8.5 - " + g); + if (GT_ModHandler.chargeElectricItem(mTemp, xDif, Integer.MAX_VALUE, true, false) >= 0) { if (ElectricItem.manager.getCharge(mTemp) >= mItemMaxCharge) { - Logger.WARNING("9"); mEntity.setEUVar(mEntity.getEUVar() - (xDif)); mEuStored = mEntity.getEUVar(); - Logger.WARNING( - "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++; } } } @@ -441,33 +312,23 @@ public class ChargingHelper { } else if (isItemValidRF(mTemp)) { try { IEnergyContainerItem rfItem = (IEnergyContainerItem) mTemp.getItem(); - long chargedPower = Math.min( - rfItem.getMaxEnergyStored(mTemp) - rfItem.getEnergyStored(mTemp), - mEntity.getEUVar() * mEUtoRF / 100L); - chargedPower = rfItem.receiveEnergy( - mTemp, - chargedPower > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) chargedPower, - false); - chargedPower = chargedPower * 100L / mEUtoRF; - mEntity.setEUVar(Math.max(mEntity.getEUVar() - chargedPower, 0)); - mChargedItems++; - mEuStored = mEntity.getEUVar(); - } catch (Exception e) { - Logger.WARNING("Failed charging of RF-Tool"); - } - } else { - if (mTemp != null) { - Logger.WARNING("Found Non-Valid item. " + mTemp.getDisplayName()); + if (rfItem != null) { + long chargedPower = Math.min( + rfItem.getMaxEnergyStored(mTemp) - rfItem.getEnergyStored(mTemp), + mEntity.getEUVar() * mEUtoRF / 100L); + chargedPower = rfItem.receiveEnergy( + mTemp, + chargedPower > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) chargedPower, + false); + chargedPower = chargedPower * 100L / mEUtoRF; + mEntity.setEUVar(Math.max(mEntity.getEUVar() - chargedPower, 0)); + mEuStored = mEntity.getEUVar(); + } + } catch (Exception ignored) { + } } } - - // Return Values - if (mChargedItems < 1) { - return mEuStoredOriginal; - } - - return mEntity.getEUVar(); } public static boolean isItemValid(final ItemStack itemstack) { @@ -477,23 +338,10 @@ public class ChargingHelper { if (GT_ModHandler.isElectricItem(itemstack)) { return true; } - if ((accepts(itemstack)) || (itemstack.getItem() instanceof IElectricItem)) { - return true; - } - return false; + return itemstack.getItem() instanceof IElectricItem; } - public static boolean isItemValidRF(final ItemStack itemStack) { + private static boolean isItemValidRF(final ItemStack itemStack) { return itemStack != null && COFHCore.isModLoaded() && itemStack.getItem() instanceof IEnergyContainerItem; } - - public static boolean accepts(final ItemStack stack) { - if (stack == null) { - return false; - } else { - return false; - } - // return (Info.itemEnergy.getEnergyValue(stack) > 0.0D) || (ElectricItem.manager.discharge(stack, (1.0D / - // 0.0D), 4, true, true, true) > 0.0D); - } } |