From 30cb683d7cf0d7d83e07ecb0d3d7cb3a6ecdbe16 Mon Sep 17 00:00:00 2001 From: Alkalus Date: Thu, 16 Nov 2017 11:52:20 +1000 Subject: + Created the base framework for wireless charging. --- .../gregtech/common/helpers/ChargingHelper.java | 251 +++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java (limited to 'src/Java/gtPlusPlus/xmod/gregtech/common/helpers') diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java new file mode 100644 index 0000000000..98d7442429 --- /dev/null +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java @@ -0,0 +1,251 @@ +package gtPlusPlus.xmod.gregtech.common.helpers; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; +import cpw.mods.fml.relauncher.Side; +import gregtech.api.enums.GT_Values; +import gregtech.api.items.GT_MetaGenerated_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.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaWirelessCharger; +import ic2.api.info.Info; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.ItemStack; + +public class ChargingHelper { + + protected static Map mChargerMap = new HashMap(); + private int mTickTimer = 0; + + public static boolean addEntry(BlockPos mPos, GregtechMetaWirelessCharger mEntity){ + if (!mChargerMap.containsKey(mPos)){ + if (mChargerMap.put(mPos, mEntity) == null){ + return true; + } + else { + return false; + } + } + else { + return false; + } + } + + public static boolean removeEntry(BlockPos mPos, GregtechMetaWirelessCharger mEntity){ + if (mChargerMap.containsKey(mPos)){ + if (mChargerMap.remove(mPos, mEntity)){ + return true; + } + else { + return false; + } + } + else { + return false; + } + } + + private static Map> mValidPlayers = new HashMap>(); + + public static boolean addValidPlayer(EntityPlayer mPlayer, GregtechMetaWirelessCharger mEntity){ + if (!mValidPlayers.containsKey(mPlayer)){ + Pair mEntry = new Pair(mEntity, (byte) mEntity.getMode()); + if (mValidPlayers.put(mPlayer, mEntry) == null){ + Utils.LOG_INFO("Added a Player to the Tick Map."); + return true; + } + else { + return false; + } + } + else { + return false; + } + } + + public static boolean removeValidPlayer(EntityPlayer mPlayer, GregtechMetaWirelessCharger mEntity){ + if (mValidPlayers.containsKey(mPlayer)){ + Pair mEntry = new Pair(mEntity, (byte) mEntity.getMode()); + if (mValidPlayers.remove(mPlayer, mEntry)){ + Utils.LOG_INFO("Removed a Player to the Tick Map."); + return true; + } + else { + return false; + } + } + else { + return false; + } + } + + + //Called whenever the player is updated or ticked. + @SubscribeEvent + public void onPlayerTick(TickEvent.PlayerTickEvent event) { + if (event.player != null){ + Utils.LOG_INFO("Found Player."); + if (event.side == Side.SERVER){ + Utils.LOG_INFO("Found Server-Side."); + + mTickTimer++; + + if (mTickTimer % 20 == 0){ + + long mVoltage = 0; + long mEuStored = 0; + + if (!mChargerMap.isEmpty() && mValidPlayers.containsKey(event.player)){ + + for (GregtechMetaWirelessCharger mEntityTemp : mChargerMap.values()){ + mVoltage = mEntityTemp.getInputTier(); + mEuStored = mEntityTemp.getEUVar(); + if (mVoltage > 0 && mEuStored >= mVoltage){ + + InventoryPlayer mPlayerInventory = event.player.inventory; + ItemStack[] mArmourContents = mPlayerInventory.armorInventory; + ItemStack[] mInventoryContents = mPlayerInventory.mainInventory; + + Map LR = mEntityTemp.getLongRangeMap(); + Map LO = mEntityTemp.getLocalMap(); + + long mStartingEu = mEntityTemp.getEUVar(); + long mCurrentEu = mEntityTemp.getEUVar(); + long mEuUsed = 0; + if (mEntityTemp.getMode() == 0){ + + if (!LR.isEmpty() && LR.containsKey(event.player)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, event.player); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, event.player); + } + } + else if (mEntityTemp.getMode() == 1){ + if (!LO.isEmpty() && LO.containsValue(event.player)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, event.player); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, event.player); + } + } + else { + if (!LR.isEmpty() && LR.containsKey(event.player)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, event.player); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, event.player); + } + if (!LO.isEmpty() && LO.containsValue(event.player)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, event.player); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, event.player); + } + } + + if ((mEuUsed = (mStartingEu - mCurrentEu)) <= 0){ + long mMaxDistance; + if (mEntityTemp.getMode() == 0){ + mMaxDistance = (4*GT_Values.V[mEntityTemp.getTier()]); + } + else if (mEntityTemp.getMode() == 1){ + mMaxDistance = (mEntityTemp.getTier()*10); + } + else { + mMaxDistance = (4*GT_Values.V[mEntityTemp.getTier()]/2); + } + double mDistance = calculateDistance(mEntityTemp, event); + 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)); + } + } + + } + + } + else { + Utils.LOG_INFO("Voltage: "+mVoltage+" | Eu Storage: "+mEuStored); + } + } + } + } + } + } + } + + public double calculateDistance(GregtechMetaWirelessCharger mEntityTemp, TickEvent.PlayerTickEvent event){ + return mEntityTemp.getDistanceBetweenTwoPositions(mEntityTemp.getTileEntityPosition(), mEntityTemp.getPositionOfEntity(event.player)); + } + + public long chargeItems(GregtechMetaWirelessCharger mEntity, ItemStack[] mItems, EntityPlayer mPlayer){ + if (mEntity == null || mItems == null || mItems.length == 0){ + return mEntity.getEUVar(); + } + int mChargedItems = 0; + final int mTier = mEntity.getTier(); + final long mVoltage = mEntity.getInputTier(); + long mEuStored = mEntity.getEUVar(); + final long mEuStoredOriginal = mEntity.getEUVar(); + for (ItemStack mTemp : mItems){ + if (isItemValid(mTemp)){ + ElectricItem.manager.charge(mTemp, mVoltage, mTier, false, false); + mEntity.setEUVar(mEuStored-mVoltage); + mEuStored = mEntity.getEUVar(); + mChargedItems++; + Utils.LOG_INFO("Charged "+mTemp.getDisplayName()+" by "+mVoltage+" for "+mPlayer.getCommandSenderName()); + } + } + if (mChargedItems < 1){ + return mEuStoredOriginal; + } + return mEntity.getEUVar(); + } + + public boolean isItemValid(final ItemStack itemstack) { + if ((accepts(itemstack)) || (itemstack.getItem() instanceof GT_MetaGenerated_Tool) || (itemstack.getItem() instanceof IElectricItem)) { + return true; + } + return false; + } + + public boolean accepts(final ItemStack stack) { + if (stack == null) { + return false; + } + return (Info.itemEnergy.getEnergyValue(stack) > 0.0D) + || (ElectricItem.manager.discharge(stack, (1.0D / 0.0D), 4, true, true, true) > 0.0D); + } + + //Called when the client ticks. + @SubscribeEvent + public void onClientTick(TickEvent.ClientTickEvent event) { + + } + + //Called when the server ticks. Usually 20 ticks a second. + @SubscribeEvent + public void onServerTick(TickEvent.ServerTickEvent event) { + + } + + //Called when a new frame is displayed (See fps) + @SubscribeEvent + public void onRenderTick(TickEvent.RenderTickEvent event) { + + } + + //Called when the world ticks + @SubscribeEvent + public void onWorldTick(TickEvent.WorldTickEvent event) { + + } + +} -- cgit From 161828da23fa09495fb1c2b16411e30c3c4fed01 Mon Sep 17 00:00:00 2001 From: Alkalus Date: Thu, 16 Nov 2017 12:55:51 +1000 Subject: $ Redid the LivingEntityUpdate event, fix it not working as intended. $ Fixed persistent player mappings to null Wireless Chargers. --- .../gregtech/common/helpers/ChargingHelper.java | 279 +++++++++++---------- 1 file changed, 150 insertions(+), 129 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/gregtech/common/helpers') diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java index 98d7442429..5bbe6bcb02 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java @@ -4,9 +4,8 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; +import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; -import cpw.mods.fml.relauncher.Side; import gregtech.api.enums.GT_Values; import gregtech.api.items.GT_MetaGenerated_Tool; import gtPlusPlus.core.util.Utils; @@ -20,13 +19,119 @@ import ic2.api.item.IElectricItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; +import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; public class ChargingHelper { + private static Map> mValidPlayers = new HashMap>(); protected static Map mChargerMap = new HashMap(); private int mTickTimer = 0; + //Called whenever the player is updated or ticked. + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onPlayerTick(LivingUpdateEvent event) { + if (event.entity != null && event.entityLiving != null){ + if (event.entityLiving instanceof EntityPlayer){ + EntityPlayer mPlayerMan = (EntityPlayer) event.entityLiving; + + + if (mPlayerMan != null){ + //Utils.LOG_INFO("Found Player."); + + if (Utils.isServer()){ + //Utils.LOG_INFO("Found Server-Side."); + + mTickTimer++; + if (mTickTimer % 20 == 0){ + + long mVoltage = 0; + long mEuStored = 0; + + if (!mChargerMap.isEmpty() && mValidPlayers.containsKey(mPlayerMan)){ + + for (GregtechMetaWirelessCharger mEntityTemp : mChargerMap.values()){ + if (mEntityTemp != null){ + mVoltage = mEntityTemp.getInputTier(); + mEuStored = mEntityTemp.getEUVar(); + if (mVoltage > 0 && mEuStored >= mVoltage){ + + InventoryPlayer mPlayerInventory = mPlayerMan.inventory; + ItemStack[] mArmourContents = mPlayerInventory.armorInventory; + ItemStack[] mInventoryContents = mPlayerInventory.mainInventory; + + Map LR = mEntityTemp.getLongRangeMap(); + Map LO = mEntityTemp.getLocalMap(); + + long mStartingEu = mEntityTemp.getEUVar(); + long mCurrentEu = mEntityTemp.getEUVar(); + long mEuUsed = 0; + if (mEntityTemp.getMode() == 0){ + + if (!LR.isEmpty() && LR.containsKey(mPlayerMan)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); + } + } + else if (mEntityTemp.getMode() == 1){ + if (!LO.isEmpty() && LO.containsValue(mPlayerMan)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); + } + } + else { + if (!LR.isEmpty() && LR.containsKey(mPlayerMan)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); + } + if (!LO.isEmpty() && LO.containsValue(mPlayerMan)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); + } + } + + 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); + } + 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)); + } + } + + } + + } + else { + Utils.LOG_INFO("Voltage: "+mVoltage+" | Eu Storage: "+mEuStored); + } + } + } + } + } + } + } + } + } + } + public static boolean addEntry(BlockPos mPos, GregtechMetaWirelessCharger mEntity){ + if (mEntity == null){ + return false; + } if (!mChargerMap.containsKey(mPos)){ if (mChargerMap.put(mPos, mEntity) == null){ return true; @@ -39,8 +144,11 @@ public class ChargingHelper { return false; } } - + public static boolean removeEntry(BlockPos mPos, GregtechMetaWirelessCharger mEntity){ + if (mEntity == null){ + return false; + } if (mChargerMap.containsKey(mPos)){ if (mChargerMap.remove(mPos, mEntity)){ return true; @@ -54,139 +162,76 @@ public class ChargingHelper { } } - private static Map> mValidPlayers = new HashMap>(); - public static boolean addValidPlayer(EntityPlayer mPlayer, GregtechMetaWirelessCharger mEntity){ - if (!mValidPlayers.containsKey(mPlayer)){ + if (mEntity == null){ + return false; + } + Utils.LOG_INFO("trying to map new player"); + if (mValidPlayers.containsKey(mPlayer)){ + Utils.LOG_INFO("Key contains player already?"); + return false; + } + else { + Utils.LOG_INFO("key not found, adding"); Pair mEntry = new Pair(mEntity, (byte) mEntity.getMode()); if (mValidPlayers.put(mPlayer, mEntry) == null){ Utils.LOG_INFO("Added a Player to the Tick Map."); return true; } else { + Utils.LOG_INFO("Tried to add player but it was already there?"); return false; } } - else { - return false; - } } - + public static boolean removeValidPlayer(EntityPlayer mPlayer, GregtechMetaWirelessCharger mEntity){ + if (mEntity == null){ + return false; + } + Utils.LOG_INFO("trying to remove player from map"); if (mValidPlayers.containsKey(mPlayer)){ + Utils.LOG_INFO("key found, removing"); Pair mEntry = new Pair(mEntity, (byte) mEntity.getMode()); if (mValidPlayers.remove(mPlayer, mEntry)){ Utils.LOG_INFO("Removed a Player to the Tick Map."); return true; } else { + Utils.LOG_INFO("Tried to remove player but it was not there?"); return false; } } else { + Utils.LOG_INFO("Key does not contain player?"); return false; } } - - - //Called whenever the player is updated or ticked. - @SubscribeEvent - public void onPlayerTick(TickEvent.PlayerTickEvent event) { - if (event.player != null){ - Utils.LOG_INFO("Found Player."); - if (event.side == Side.SERVER){ - Utils.LOG_INFO("Found Server-Side."); - - mTickTimer++; - - if (mTickTimer % 20 == 0){ - - long mVoltage = 0; - long mEuStored = 0; - - if (!mChargerMap.isEmpty() && mValidPlayers.containsKey(event.player)){ - - for (GregtechMetaWirelessCharger mEntityTemp : mChargerMap.values()){ - mVoltage = mEntityTemp.getInputTier(); - mEuStored = mEntityTemp.getEUVar(); - if (mVoltage > 0 && mEuStored >= mVoltage){ - - InventoryPlayer mPlayerInventory = event.player.inventory; - ItemStack[] mArmourContents = mPlayerInventory.armorInventory; - ItemStack[] mInventoryContents = mPlayerInventory.mainInventory; - - Map LR = mEntityTemp.getLongRangeMap(); - Map LO = mEntityTemp.getLocalMap(); - - long mStartingEu = mEntityTemp.getEUVar(); - long mCurrentEu = mEntityTemp.getEUVar(); - long mEuUsed = 0; - if (mEntityTemp.getMode() == 0){ - - if (!LR.isEmpty() && LR.containsKey(event.player)){ - mCurrentEu = chargeItems(mEntityTemp, mArmourContents, event.player); - mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, event.player); - } - } - else if (mEntityTemp.getMode() == 1){ - if (!LO.isEmpty() && LO.containsValue(event.player)){ - mCurrentEu = chargeItems(mEntityTemp, mArmourContents, event.player); - mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, event.player); - } - } - else { - if (!LR.isEmpty() && LR.containsKey(event.player)){ - mCurrentEu = chargeItems(mEntityTemp, mArmourContents, event.player); - mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, event.player); - } - if (!LO.isEmpty() && LO.containsValue(event.player)){ - mCurrentEu = chargeItems(mEntityTemp, mArmourContents, event.player); - mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, event.player); - } - } - - if ((mEuUsed = (mStartingEu - mCurrentEu)) <= 0){ - long mMaxDistance; - if (mEntityTemp.getMode() == 0){ - mMaxDistance = (4*GT_Values.V[mEntityTemp.getTier()]); - } - else if (mEntityTemp.getMode() == 1){ - mMaxDistance = (mEntityTemp.getTier()*10); - } - else { - mMaxDistance = (4*GT_Values.V[mEntityTemp.getTier()]/2); - } - double mDistance = calculateDistance(mEntityTemp, event); - 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)); - } - } - - } - - } - else { - Utils.LOG_INFO("Voltage: "+mVoltage+" | Eu Storage: "+mEuStored); - } - } - } - } - } + + public double calculateDistance(GregtechMetaWirelessCharger mEntityTemp, EntityPlayer mPlayerMan){ + if (mEntityTemp == null || mPlayerMan == null){ + return 0; } + return mEntityTemp.getDistanceBetweenTwoPositions(mEntityTemp.getTileEntityPosition(), mEntityTemp.getPositionOfEntity(mPlayerMan)); } - public double calculateDistance(GregtechMetaWirelessCharger mEntityTemp, TickEvent.PlayerTickEvent event){ - return mEntityTemp.getDistanceBetweenTwoPositions(mEntityTemp.getTileEntityPosition(), mEntityTemp.getPositionOfEntity(event.player)); + public long chargeItems(GregtechMetaWirelessCharger mEntity, ItemStack[] mItems, EntityPlayer mPlayer){ + if (mEntity == null){ + return -100; + } + if (mItems == null || mItems.length == 0){ + return mEntity.getEUVar(); + } + long mInitialValue = mEntity.getEUVar(); + long mReturnValue = chargeItemsEx(mEntity, mItems, mPlayer); + return ((mReturnValue < mInitialValue) ? mReturnValue : mInitialValue); } - public long chargeItems(GregtechMetaWirelessCharger mEntity, ItemStack[] mItems, EntityPlayer mPlayer){ - if (mEntity == null || mItems == null || mItems.length == 0){ + public long chargeItemsEx(GregtechMetaWirelessCharger mEntity, ItemStack[] mItems, EntityPlayer mPlayer){ + if (mEntity == null){ + return -100; + } + if (mItems == null || mItems.length == 0){ return mEntity.getEUVar(); } int mChargedItems = 0; @@ -224,28 +269,4 @@ public class ChargingHelper { || (ElectricItem.manager.discharge(stack, (1.0D / 0.0D), 4, true, true, true) > 0.0D); } - //Called when the client ticks. - @SubscribeEvent - public void onClientTick(TickEvent.ClientTickEvent event) { - - } - - //Called when the server ticks. Usually 20 ticks a second. - @SubscribeEvent - public void onServerTick(TickEvent.ServerTickEvent event) { - - } - - //Called when a new frame is displayed (See fps) - @SubscribeEvent - public void onRenderTick(TickEvent.RenderTickEvent event) { - - } - - //Called when the world ticks - @SubscribeEvent - public void onWorldTick(TickEvent.WorldTickEvent event) { - - } - } -- cgit From b5ae94feabc22cbc94e72350f3ae0f12bae781af Mon Sep 17 00:00:00 2001 From: Alkalus Date: Thu, 16 Nov 2017 13:54:21 +1000 Subject: $ Fixed voltage used to charge items. --- .../gregtech/common/helpers/ChargingHelper.java | 43 ++++++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/gregtech/common/helpers') diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java index 5bbe6bcb02..fa11fe9fbd 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java @@ -8,6 +8,7 @@ import cpw.mods.fml.common.eventhandler.EventPriority; 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 gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.array.BlockPos; import gtPlusPlus.core.util.array.Pair; @@ -116,7 +117,7 @@ public class ChargingHelper { } else { - Utils.LOG_INFO("Voltage: "+mVoltage+" | Eu Storage: "+mEuStored); + //Utils.LOG_INFO("Voltage: "+mVoltage+" | Eu Storage: "+mEuStored); } } } @@ -236,16 +237,35 @@ public class ChargingHelper { } int mChargedItems = 0; final int mTier = mEntity.getTier(); - final long mVoltage = mEntity.getInputTier(); + final long mVoltage = mEntity.maxEUInput(); long mEuStored = mEntity.getEUVar(); final long mEuStoredOriginal = mEntity.getEUVar(); for (ItemStack mTemp : mItems){ if (isItemValid(mTemp)){ - ElectricItem.manager.charge(mTemp, mVoltage, mTier, false, false); - mEntity.setEUVar(mEuStored-mVoltage); - mEuStored = mEntity.getEUVar(); - mChargedItems++; - Utils.LOG_INFO("Charged "+mTemp.getDisplayName()+" by "+mVoltage+" for "+mPlayer.getCommandSenderName()); + double mItemTier = ((IElectricItem) mTemp.getItem()).getTransferLimit(mTemp); + if (mEuStored >= mItemTier){ + double mItemMaxCharge = ((IElectricItem) mTemp.getItem()).getMaxCharge(mTemp); + double mitemCurrentCharge = ElectricItem.manager.getCharge(mTemp); + + double mVoltageDecrease; + if (mItemTier >= mVoltage){ + mVoltageDecrease = mVoltage; + } + else if (mItemTier < mVoltage){ + mVoltageDecrease = mItemTier; + } + else { + mVoltageDecrease = mItemTier; + } + + if ((mitemCurrentCharge + mVoltageDecrease) <= (mItemMaxCharge - mVoltageDecrease)){ + ElectricItem.manager.charge(mTemp, mVoltageDecrease, mTier, false, false); + mEntity.setEUVar((long) (mEuStored-mVoltage)); + mEuStored = mEntity.getEUVar(); + mChargedItems++; + Utils.LOG_INFO("Charged "+mTemp.getDisplayName()+" by "+mItemTier+" for "+mPlayer.getCommandSenderName()); + } + } } } if (mChargedItems < 1){ @@ -255,7 +275,10 @@ public class ChargingHelper { } public boolean isItemValid(final ItemStack itemstack) { - if ((accepts(itemstack)) || (itemstack.getItem() instanceof GT_MetaGenerated_Tool) || (itemstack.getItem() instanceof IElectricItem)) { + if (itemstack == null){ + return false; + } + if ((accepts(itemstack)) || (itemstack.getItem() instanceof IElectricItem)) { return true; } return false; @@ -265,6 +288,10 @@ 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); } -- cgit From bb0a717685f78af4a7eca688bfffe02e80c8aeaa Mon Sep 17 00:00:00 2001 From: Alkalus Date: Thu, 16 Nov 2017 15:12:12 +1000 Subject: $ Made Electric Item Checking within player inventories work better. --- .../gregtech/common/helpers/ChargingHelper.java | 119 ++++++++++++++++----- 1 file changed, 94 insertions(+), 25 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/gregtech/common/helpers') 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 LR = mEntityTemp.getLongRangeMap(); Map 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); } -- cgit From c4963cab1c91ef09eb7b5694e8fa59ccb1023184 Mon Sep 17 00:00:00 2001 From: Alkalus Date: Thu, 16 Nov 2017 15:30:01 +1000 Subject: $ Improved handling of fully Charged and non-charged items. --- .../gregtech/common/helpers/ChargingHelper.java | 38 ++++++++++++++++------ 1 file changed, 28 insertions(+), 10 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/gregtech/common/helpers') diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java index 291e3856b8..f4e53bc5dc 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java @@ -256,6 +256,7 @@ public class ChargingHelper { for (ItemStack mTemp : mItems){ mItemSlot++; + Utils.LOG_INFO("Trying to Tick slot "+mItemSlot); //Is item Electrical if (isItemValid(mTemp)){ @@ -267,6 +268,10 @@ public class ChargingHelper { double mItemMaxCharge = ((IElectricItem) mTemp.getItem()).getMaxCharge(mTemp); double mitemCurrentCharge = ElectricItem.manager.getCharge(mTemp); + if (mitemCurrentCharge >= mItemMaxCharge){ + continue; + } + //Try get charge direct from NBT for GT and IC2 stacks try { if (mTemp.getItem() instanceof GT_MetaGenerated_Tool_01 @@ -316,31 +321,44 @@ public class ChargingHelper { else if ((mitemCurrentCharge + (mVoltageIncrease*5)) <= (mItemMaxCharge - (mVoltageIncrease*5))){ mMulti = 5; } - else if ((mitemCurrentCharge + mVoltageIncrease) <= (mItemMaxCharge - mVoltageIncrease)){ - mMulti = 1; - } else { mMulti = 1; } + 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++; + if ((mitemCurrentCharge + mMultiVoltage) <= mItemMaxCharge){ + if (GT_ModHandler.chargeElectricItem(mTemp, mMultiVoltage, mTier, true, false) == 0){ + for (int i=0; i mitemCurrentCharge){ + 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++; + } } } } + else { + if (mTemp != null){ + Utils.LOG_INFO("Found Non-Valid item."+mTemp.getDisplayName()); + } + } } + + //Return Values if (mChargedItems < 1){ return mEuStoredOriginal; } + return mEntity.getEUVar(); } -- cgit From 5144539962acc7d02248ed7075507b850044d877 Mon Sep 17 00:00:00 2001 From: Alkalus Date: Thu, 16 Nov 2017 15:50:56 +1000 Subject: + Added in annoying logging. $ Fixed NPE when tickhandler tries to get null Tile entity. % Tweaked Stored Energy and A/in/t for Wireless Charger. --- .../gregtech/common/helpers/ChargingHelper.java | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/gregtech/common/helpers') diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java index f4e53bc5dc..41ae1a911b 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java @@ -37,6 +37,7 @@ public class ChargingHelper { //Called whenever the player is updated or ticked. @SubscribeEvent(priority = EventPriority.HIGHEST) public void onPlayerTick(LivingUpdateEvent event) { + try { if (event.entity != null && event.entityLiving != null){ if (event.entityLiving instanceof EntityPlayer){ EntityPlayer mPlayerMan = (EntityPlayer) event.entityLiving; @@ -133,6 +134,10 @@ public class ChargingHelper { } } } + } + catch (Throwable t){ + Utils.LOG_INFO("State of Wireless Charger changed in an invalid way, this prevented a crash."); + } } public static boolean addEntry(BlockPos mPos, GregtechMetaWirelessCharger mEntity){ @@ -256,14 +261,18 @@ public class ChargingHelper { for (ItemStack mTemp : mItems){ mItemSlot++; - Utils.LOG_INFO("Trying to Tick slot "+mItemSlot); + if (mTemp != null){ + Utils.LOG_INFO("Slot "+mItemSlot+" contains "+mTemp.getDisplayName()); + } //Is item Electrical if (isItemValid(mTemp)){ + Utils.LOG_INFO("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){ + Utils.LOG_INFO("2"); double mItemMaxCharge = ((IElectricItem) mTemp.getItem()).getMaxCharge(mTemp); double mitemCurrentCharge = ElectricItem.manager.getCharge(mTemp); @@ -273,7 +282,8 @@ public class ChargingHelper { } //Try get charge direct from NBT for GT and IC2 stacks - try { + try { + Utils.LOG_INFO("3"); if (mTemp.getItem() instanceof GT_MetaGenerated_Tool_01 || mTemp.getItem() instanceof GT_MetaGenerated_Item_01 || mTemp.getItem() instanceof GT_MetaGenerated_Item_02 @@ -310,6 +320,8 @@ public class ChargingHelper { else { mVoltageIncrease = mItemEuTLimit; } + + Utils.LOG_INFO("4"); int mMulti; if ((mitemCurrentCharge + (mVoltageIncrease*20)) <= (mItemMaxCharge - (mVoltageIncrease*20))){ @@ -324,12 +336,15 @@ public class ChargingHelper { else { mMulti = 1; } + Utils.LOG_INFO("5"); int mMultiVoltage = (int) (mMulti*mVoltageIncrease); if ((mitemCurrentCharge + mMultiVoltage) <= mItemMaxCharge){ + Utils.LOG_INFO("6"); if (GT_ModHandler.chargeElectricItem(mTemp, mMultiVoltage, mTier, true, false) == 0){ + Utils.LOG_INFO("6.5"); for (int i=0; i mitemCurrentCharge){ + Utils.LOG_INFO("7"); 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)); @@ -349,7 +365,7 @@ public class ChargingHelper { } else { if (mTemp != null){ - Utils.LOG_INFO("Found Non-Valid item."+mTemp.getDisplayName()); + Utils.LOG_INFO("Found Non-Valid item. "+mTemp.getDisplayName()); } } } -- cgit From e76e27e165640bda7363f5c6996ff1a7655bc535 Mon Sep 17 00:00:00 2001 From: Alkalus Date: Thu, 16 Nov 2017 16:29:01 +1000 Subject: $ First fix towards invalid tile entity mapping. --- .../gregtech/common/helpers/ChargingHelper.java | 151 +++++++++++---------- 1 file changed, 78 insertions(+), 73 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/gregtech/common/helpers') diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java index 41ae1a911b..4a59a621f7 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java @@ -7,13 +7,10 @@ import java.util.UUID; import cpw.mods.fml.common.eventhandler.EventPriority; 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; @@ -33,98 +30,95 @@ public class ChargingHelper { private static Map> mValidPlayers = new HashMap>(); protected static Map mChargerMap = new HashMap(); private int mTickTimer = 0; - + private final int mTickMultiplier = 20; + //Called whenever the player is updated or ticked. @SubscribeEvent(priority = EventPriority.HIGHEST) public void onPlayerTick(LivingUpdateEvent event) { try { - if (event.entity != null && event.entityLiving != null){ - if (event.entityLiving instanceof EntityPlayer){ - EntityPlayer mPlayerMan = (EntityPlayer) event.entityLiving; - + if (event.entity != null && event.entityLiving != null){ + if (event.entityLiving instanceof EntityPlayer){ + EntityPlayer mPlayerMan = (EntityPlayer) event.entityLiving; - if (mPlayerMan != null){ - //Utils.LOG_INFO("Found Player."); - if (Utils.isServer()){ - //Utils.LOG_INFO("Found Server-Side."); + if (mPlayerMan != null){ + //Utils.LOG_INFO("Found Player."); - mTickTimer++; - if (mTickTimer % 10 == 0){ + if (Utils.isServer()){ + //Utils.LOG_INFO("Found Server-Side."); - long mVoltage = 0; - long mEuStored = 0; + mTickTimer++; + if (mTickTimer % mTickMultiplier == 0){ - if (!mChargerMap.isEmpty() && mValidPlayers.containsKey(mPlayerMan)){ + long mVoltage = 0; + long mEuStored = 0; - InventoryPlayer mPlayerInventory = mPlayerMan.inventory; - ItemStack[] mArmourContents = mPlayerInventory.armorInventory.clone(); - ItemStack[] mInventoryContents = mPlayerInventory.mainInventory.clone(); + if (!mChargerMap.isEmpty() && mValidPlayers.containsKey(mPlayerMan)){ - for (GregtechMetaWirelessCharger mEntityTemp : mChargerMap.values()){ - if (mEntityTemp != null){ - mVoltage = mEntityTemp.getInputTier(); - mEuStored = mEntityTemp.getEUVar(); - if (mVoltage > 0 && mEuStored >= mVoltage){ + InventoryPlayer mPlayerInventory = mPlayerMan.inventory; + ItemStack[] mArmourContents = mPlayerInventory.armorInventory.clone(); + ItemStack[] mInventoryContents = mPlayerInventory.mainInventory.clone(); - Map LR = mEntityTemp.getLongRangeMap(); - Map LO = mEntityTemp.getLocalMap(); + for (GregtechMetaWirelessCharger mEntityTemp : mChargerMap.values()){ + if (mEntityTemp != null){ + mVoltage = mEntityTemp.maxEUInput(); + mEuStored = mEntityTemp.getEUVar(); + if (mVoltage > 0 && mEuStored >= mVoltage){ - long mStartingEu = mEntityTemp.getEUVar(); - long mCurrentEu = mEntityTemp.getEUVar(); - long mEuUsed = 0; - if (mEntityTemp.getMode() == 0){ + Map LR = mEntityTemp.getLongRangeMap(); + Map LO = mEntityTemp.getLocalMap(); - if (!LR.isEmpty() && LR.containsKey(mPlayerMan)){ - mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); - mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); - } - } - else if (mEntityTemp.getMode() == 1){ - if (!LO.isEmpty() && LO.containsValue(mPlayerMan)){ - mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); - mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); - } - } - else { - if (!LR.isEmpty() && LR.containsKey(mPlayerMan)){ - mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); - mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); - } - if (!LO.isEmpty() && LO.containsValue(mPlayerMan)){ - mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); - mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); - } - } - - if ((mEuUsed = (mStartingEu - mCurrentEu)) <= 0 && mEntityTemp != null){ - long mMaxDistance; + long mStartingEu = mEntityTemp.getEUVar(); + long mCurrentEu = mEntityTemp.getEUVar(); + long mEuUsed = 0; if (mEntityTemp.getMode() == 0){ - mMaxDistance = (4*GT_Values.V[mEntityTemp.getTier()]); + + if (!LR.isEmpty() && LR.containsKey(mPlayerMan)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); + } } else if (mEntityTemp.getMode() == 1){ - mMaxDistance = (mEntityTemp.getTier()*10); + if (!LO.isEmpty() && LO.containsValue(mPlayerMan)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); + } } else { - mMaxDistance = (4*GT_Values.V[mEntityTemp.getTier()]/2); - } - double mDistance = calculateDistance(mEntityTemp, mPlayerMan); - long mVoltageCost = MathUtils.findPercentageOfInt(mMaxDistance, (float) mDistance); + if (!LR.isEmpty() && LR.containsKey(mPlayerMan)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); + } + if (!LO.isEmpty() && LO.containsValue(mPlayerMan)){ + mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); + mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); + } + } - if (mVoltageCost > 0){ - if (mVoltageCost > mEntityTemp.maxEUInput()){ - mEntityTemp.setEUVar((mEntityTemp.getEUVar()-mEntityTemp.maxEUInput())); + 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); } else { - mEntityTemp.setEUVar((mEntityTemp.getEUVar()-mVoltageCost)); + 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)); + } } } - } - - } - else { - //Utils.LOG_INFO("Voltage: "+mVoltage+" | Eu Storage: "+mEuStored); } } } @@ -134,10 +128,21 @@ public class ChargingHelper { } } } - } + catch (Throwable t){ - Utils.LOG_INFO("State of Wireless Charger changed in an invalid way, this prevented a crash."); + //Utils.LOG_INFO("State of Wireless Charger changed in an invalid way, this prevented a crash."); + + if (!mChargerMap.isEmpty()){ + for (GregtechMetaWirelessCharger r : mChargerMap.values()){ + if (r == null){ + mChargerMap.remove(r); + } + } + } + //t.printStackTrace(); } + + } public static boolean addEntry(BlockPos mPos, GregtechMetaWirelessCharger mEntity){ @@ -320,7 +325,7 @@ public class ChargingHelper { else { mVoltageIncrease = mItemEuTLimit; } - + Utils.LOG_INFO("4"); int mMulti; -- cgit From af9369d63b91b26515a45f7a3419c98e4d6f8f05 Mon Sep 17 00:00:00 2001 From: Alkalus Date: Thu, 16 Nov 2017 17:50:23 +1000 Subject: + Added recipes for Wireless Chargers. $ Fixed exploit using Long-Range mode, temporarily disabled. --- .../gregtech/common/helpers/ChargingHelper.java | 56 +++++++++++----------- 1 file changed, 28 insertions(+), 28 deletions(-) (limited to 'src/Java/gtPlusPlus/xmod/gregtech/common/helpers') diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java index 4a59a621f7..6ff0536c85 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java @@ -42,10 +42,10 @@ public class ChargingHelper { if (mPlayerMan != null){ - //Utils.LOG_INFO("Found Player."); + //Utils.LOG_WARNING("Found Player."); if (Utils.isServer()){ - //Utils.LOG_INFO("Found Server-Side."); + //Utils.LOG_WARNING("Found Server-Side."); mTickTimer++; if (mTickTimer % mTickMultiplier == 0){ @@ -73,10 +73,10 @@ public class ChargingHelper { long mEuUsed = 0; if (mEntityTemp.getMode() == 0){ - if (!LR.isEmpty() && LR.containsKey(mPlayerMan)){ + /*if (!LR.isEmpty() && LR.containsKey(mPlayerMan)){ mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); - } + }*/ } else if (mEntityTemp.getMode() == 1){ if (!LO.isEmpty() && LO.containsValue(mPlayerMan)){ @@ -85,10 +85,10 @@ public class ChargingHelper { } } else { - if (!LR.isEmpty() && LR.containsKey(mPlayerMan)){ + /*if (!LR.isEmpty() && LR.containsKey(mPlayerMan)){ mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); - } + }*/ if (!LO.isEmpty() && LO.containsValue(mPlayerMan)){ mCurrentEu = chargeItems(mEntityTemp, mArmourContents, mPlayerMan); mCurrentEu = chargeItems(mEntityTemp, mInventoryContents, mPlayerMan); @@ -130,7 +130,7 @@ public class ChargingHelper { } catch (Throwable t){ - //Utils.LOG_INFO("State of Wireless Charger changed in an invalid way, this prevented a crash."); + //Utils.LOG_WARNING("State of Wireless Charger changed in an invalid way, this prevented a crash."); if (!mChargerMap.isEmpty()){ for (GregtechMetaWirelessCharger r : mChargerMap.values()){ @@ -183,20 +183,20 @@ public class ChargingHelper { if (mEntity == null){ return false; } - Utils.LOG_INFO("trying to map new player"); + Utils.LOG_WARNING("trying to map new player"); if (mValidPlayers.containsKey(mPlayer)){ - Utils.LOG_INFO("Key contains player already?"); + Utils.LOG_WARNING("Key contains player already?"); return false; } else { - Utils.LOG_INFO("key not found, adding"); + Utils.LOG_WARNING("key not found, adding"); Pair mEntry = new Pair(mEntity, (byte) mEntity.getMode()); if (mValidPlayers.put(mPlayer, mEntry) == null){ - Utils.LOG_INFO("Added a Player to the Tick Map."); + Utils.LOG_WARNING("Added a Player to the Tick Map."); return true; } else { - Utils.LOG_INFO("Tried to add player but it was already there?"); + Utils.LOG_WARNING("Tried to add player but it was already there?"); return false; } } @@ -206,21 +206,21 @@ public class ChargingHelper { if (mEntity == null){ return false; } - Utils.LOG_INFO("trying to remove player from map"); + Utils.LOG_WARNING("trying to remove player from map"); if (mValidPlayers.containsKey(mPlayer)){ - Utils.LOG_INFO("key found, removing"); + Utils.LOG_WARNING("key found, removing"); Pair mEntry = new Pair(mEntity, (byte) mEntity.getMode()); if (mValidPlayers.remove(mPlayer, mEntry)){ - Utils.LOG_INFO("Removed a Player to the Tick Map."); + Utils.LOG_WARNING("Removed a Player to the Tick Map."); return true; } else { - Utils.LOG_INFO("Tried to remove player but it was not there?"); + Utils.LOG_WARNING("Tried to remove player but it was not there?"); return false; } } else { - Utils.LOG_INFO("Key does not contain player?"); + Utils.LOG_WARNING("Key does not contain player?"); return false; } } @@ -267,17 +267,17 @@ public class ChargingHelper { for (ItemStack mTemp : mItems){ mItemSlot++; if (mTemp != null){ - Utils.LOG_INFO("Slot "+mItemSlot+" contains "+mTemp.getDisplayName()); + Utils.LOG_WARNING("Slot "+mItemSlot+" contains "+mTemp.getDisplayName()); } //Is item Electrical if (isItemValid(mTemp)){ - Utils.LOG_INFO("1"); + Utils.LOG_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){ - Utils.LOG_INFO("2"); + Utils.LOG_WARNING("2"); double mItemMaxCharge = ((IElectricItem) mTemp.getItem()).getMaxCharge(mTemp); double mitemCurrentCharge = ElectricItem.manager.getCharge(mTemp); @@ -288,7 +288,7 @@ public class ChargingHelper { //Try get charge direct from NBT for GT and IC2 stacks try { - Utils.LOG_INFO("3"); + Utils.LOG_WARNING("3"); if (mTemp.getItem() instanceof GT_MetaGenerated_Tool_01 || mTemp.getItem() instanceof GT_MetaGenerated_Item_01 || mTemp.getItem() instanceof GT_MetaGenerated_Item_02 @@ -326,7 +326,7 @@ public class ChargingHelper { mVoltageIncrease = mItemEuTLimit; } - Utils.LOG_INFO("4"); + Utils.LOG_WARNING("4"); int mMulti; if ((mitemCurrentCharge + (mVoltageIncrease*20)) <= (mItemMaxCharge - (mVoltageIncrease*20))){ @@ -341,15 +341,15 @@ public class ChargingHelper { else { mMulti = 1; } - Utils.LOG_INFO("5"); + Utils.LOG_WARNING("5"); int mMultiVoltage = (int) (mMulti*mVoltageIncrease); if ((mitemCurrentCharge + mMultiVoltage) <= mItemMaxCharge){ - Utils.LOG_INFO("6"); + Utils.LOG_WARNING("6"); if (GT_ModHandler.chargeElectricItem(mTemp, mMultiVoltage, mTier, true, false) == 0){ - Utils.LOG_INFO("6.5"); + Utils.LOG_WARNING("6.5"); for (int i=0; i mitemCurrentCharge){ - Utils.LOG_INFO("7"); + Utils.LOG_WARNING("7"); 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)); + Utils.LOG_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++; } } @@ -370,7 +370,7 @@ public class ChargingHelper { } else { if (mTemp != null){ - Utils.LOG_INFO("Found Non-Valid item. "+mTemp.getDisplayName()); + Utils.LOG_WARNING("Found Non-Valid item. "+mTemp.getDisplayName()); } } } -- cgit