diff options
author | Alkalus <draknyte1@hotmail.com> | 2017-11-16 12:55:51 +1000 |
---|---|---|
committer | Alkalus <draknyte1@hotmail.com> | 2017-11-16 12:55:51 +1000 |
commit | 161828da23fa09495fb1c2b16411e30c3c4fed01 (patch) | |
tree | 960808549f730b3e74938febea7ce37435c973ae /src | |
parent | 30cb683d7cf0d7d83e07ecb0d3d7cb3a6ecdbe16 (diff) | |
download | GT5-Unofficial-161828da23fa09495fb1c2b16411e30c3c4fed01.tar.gz GT5-Unofficial-161828da23fa09495fb1c2b16411e30c3c4fed01.tar.bz2 GT5-Unofficial-161828da23fa09495fb1c2b16411e30c3c4fed01.zip |
$ Redid the LivingEntityUpdate event, fix it not working as intended.
$ Fixed persistent player mappings to null Wireless Chargers.
Diffstat (limited to 'src')
4 files changed, 180 insertions, 150 deletions
diff --git a/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java b/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java index b95ab04024..8251387aff 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java @@ -1,27 +1,19 @@ package gtPlusPlus.xmod.gregtech; -import java.io.File; import java.util.ArrayList; import java.util.List; -import cpw.mods.fml.common.FMLCommonHandler; -import gregtech.api.GregTech_API; import gregtech.api.util.GT_Config; -import gregtech.api.util.MultiblockRecipeMapHandler; -import gregtech.api.world.GT_Worldgen; import gtPlusPlus.core.handler.COMPAT_HANDLER; import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.recipe.RECIPES_LaserEngraver; import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; import gtPlusPlus.xmod.gregtech.api.util.GTPP_Config; import gtPlusPlus.xmod.gregtech.api.world.GTPP_Worldgen; import gtPlusPlus.xmod.gregtech.common.blocks.fluid.GregtechFluidHandler; -import gtPlusPlus.xmod.gregtech.common.helpers.ChargingHelper; import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechItems; import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools; import gtPlusPlus.xmod.gregtech.loaders.*; import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechConduits; -import net.minecraftforge.common.config.Configuration; public class HANDLER_GT { @@ -30,7 +22,6 @@ public class HANDLER_GT { public static GTPP_Config sCustomWorldgenFile = null; public static final List<GTPP_Worldgen> sCustomWorldgenList = new ArrayList<GTPP_Worldgen>(); - @SuppressWarnings("unused") public static void preInit(){ new MetaGeneratedGregtechItems(); @@ -40,7 +31,6 @@ public class HANDLER_GT { GregtechFluidHandler.run(); } - @SuppressWarnings("unused") public static void init(){ //Load General Blocks and set up some Basic Meta Tile Entitie states 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<EntityPlayer, Pair<GregtechMetaWirelessCharger, Byte>> mValidPlayers = new HashMap<EntityPlayer, Pair<GregtechMetaWirelessCharger, Byte>>(); protected static Map<BlockPos, GregtechMetaWirelessCharger> mChargerMap = new HashMap<BlockPos, GregtechMetaWirelessCharger>(); 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<EntityPlayer, UUID> LR = mEntityTemp.getLongRangeMap(); + Map<UUID, EntityPlayer> 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<EntityPlayer, Pair<GregtechMetaWirelessCharger, Byte>> mValidPlayers = new HashMap<EntityPlayer, Pair<GregtechMetaWirelessCharger, Byte>>(); - 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<GregtechMetaWirelessCharger, Byte> mEntry = new Pair<GregtechMetaWirelessCharger, Byte>(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<GregtechMetaWirelessCharger, Byte> mEntry = new Pair<GregtechMetaWirelessCharger, Byte>(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<EntityPlayer, UUID> LR = mEntityTemp.getLongRangeMap(); - Map<UUID, EntityPlayer> 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) { - - } - } diff --git a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaWirelessCharger.java b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaWirelessCharger.java index 9b84916459..1ceb4c6a7b 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaWirelessCharger.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaWirelessCharger.java @@ -27,7 +27,7 @@ import net.minecraft.nbt.NBTTagCompound; public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity { private boolean mHasBeenMapped = false; - + public GregtechMetaWirelessCharger(final int aID, final String aName, final String aNameRegional, final int aTier, final String aDescription, final int aSlotCount) { super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); } @@ -47,19 +47,19 @@ public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity { "gets half the distances each singular mode gets.", CORE.GT_Tooltip}; } - + public int getTier(){ return this.mTier; } - + public int getMode(){ return this.mMode; } - + public Map<UUID, EntityPlayer> getLocalMap(){ return this.mLocalChargingMap; } - + public Map<EntityPlayer, UUID> getLongRangeMap(){ return this.mWirelessChargingMap; } @@ -139,6 +139,18 @@ public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity { @Override public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { + mWirelessChargingMap.clear(); + mLocalChargingMap.clear(); + + if (!this.getBaseMetaTileEntity().getWorld().playerEntities.isEmpty()){ + for (Object mTempPlayer : this.getBaseMetaTileEntity().getWorld().playerEntities){ + if (mTempPlayer instanceof EntityPlayer || mTempPlayer instanceof EntityPlayerMP){ + EntityPlayer mTemp = (EntityPlayer) mTempPlayer; + ChargingHelper.removeValidPlayer(mTemp, this); + } + } + } + if (this.mMode >= 2){ this.mMode = 0; } @@ -438,8 +450,17 @@ public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity { public void onRemoval() { mWirelessChargingMap.clear(); mLocalChargingMap.clear(); + if (!this.getBaseMetaTileEntity().getWorld().playerEntities.isEmpty()){ + for (Object mTempPlayer : this.getBaseMetaTileEntity().getWorld().playerEntities){ + if (mTempPlayer instanceof EntityPlayer || mTempPlayer instanceof EntityPlayerMP){ + EntityPlayer mTemp = (EntityPlayer) mTempPlayer; + ChargingHelper.removeValidPlayer(mTemp, this); + } + } + } + ChargingHelper.removeEntry(getTileEntityPosition(), this); - + super.onRemoval(); } diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java index bd5f1abc54..688b522c2b 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java @@ -1,14 +1,11 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import cpw.mods.fml.common.FMLCommonHandler; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; import gregtech.api.util.GT_ModHandler; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; import gtPlusPlus.xmod.gregtech.common.helpers.ChargingHelper; import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaWirelessCharger; -import net.minecraft.item.ItemStack; +import net.minecraftforge.common.MinecraftForge; public class GregtechWirelessChargers { @@ -19,7 +16,8 @@ public class GregtechWirelessChargers { | GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED; int mID = 890; - FMLCommonHandler.instance().bus().register(ChargingHelper.class); + FMLCommonHandler.instance().bus().register(new ChargingHelper()); + MinecraftForge.EVENT_BUS.register(new ChargingHelper()); GregtechItemList.Charger_LV.set(new GregtechMetaWirelessCharger(mID++, "wificharger.01.tier.single", "Wireless Charger MK I", 1, "Hopefully won't give you cancer.", 0).getStackForm(1L)); |