diff options
| author | Alkalus <draknyte1@hotmail.com> | 2017-11-16 11:52:20 +1000 | 
|---|---|---|
| committer | Alkalus <draknyte1@hotmail.com> | 2017-11-16 11:52:20 +1000 | 
| commit | 30cb683d7cf0d7d83e07ecb0d3d7cb3a6ecdbe16 (patch) | |
| tree | 2269f1aced15422368bd9f48868423c42d3c17a7 /src/Java | |
| parent | a914dfd170c03a97de1181e2f7ad39ab09380cb1 (diff) | |
| download | GT5-Unofficial-30cb683d7cf0d7d83e07ecb0d3d7cb3a6ecdbe16.tar.gz GT5-Unofficial-30cb683d7cf0d7d83e07ecb0d3d7cb3a6ecdbe16.tar.bz2 GT5-Unofficial-30cb683d7cf0d7d83e07ecb0d3d7cb3a6ecdbe16.zip | |
+ Created the base framework for wireless charging.
Diffstat (limited to 'src/Java')
4 files changed, 297 insertions, 7 deletions
| diff --git a/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java b/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java index 5dfb9ebd2b..b95ab04024 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java @@ -4,6 +4,7 @@ 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; @@ -15,6 +16,7 @@ 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.*; 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<BlockPos, GregtechMetaWirelessCharger> mChargerMap = new HashMap<BlockPos, GregtechMetaWirelessCharger>(); +	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<EntityPlayer, Pair<GregtechMetaWirelessCharger, Byte>> mValidPlayers = new HashMap<EntityPlayer, Pair<GregtechMetaWirelessCharger, Byte>>(); + +	public static boolean addValidPlayer(EntityPlayer mPlayer, GregtechMetaWirelessCharger mEntity){ +		if (!mValidPlayers.containsKey(mPlayer)){ +			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 { +				return false; +			} +		} +		else { +			return false; +		} +	} +	 +	public static boolean removeValidPlayer(EntityPlayer mPlayer, GregtechMetaWirelessCharger mEntity){ +		if (mValidPlayers.containsKey(mPlayer)){ +			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 { +				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<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, 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) { + +	} + +} 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 7d71ae9b54..9b84916459 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 @@ -17,6 +17,7 @@ import gtPlusPlus.core.util.entity.EntityUtils;  import gtPlusPlus.core.util.player.PlayerUtils;  import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMetaTileEntity;  import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.helpers.ChargingHelper;  import net.minecraft.entity.Entity;  import net.minecraft.entity.player.EntityPlayer;  import net.minecraft.entity.player.EntityPlayerMP; @@ -25,6 +26,8 @@ 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);  	} @@ -44,6 +47,22 @@ 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; +	}  	@Override  	public ITexture[][][] getTextureSet(final ITexture[] aTextures) { @@ -335,8 +354,11 @@ public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity {  		super.onPostTick(aBaseMetaTileEntity, aTick);  		if (this.getBaseMetaTileEntity().isServerSide()) { +			if (!mHasBeenMapped && ChargingHelper.addEntry(getTileEntityPosition(), this)){ +				mHasBeenMapped = true; +			} -			if (aTick % 20 == 0){ +			if (aTick % 20 == 0 && mHasBeenMapped){  				if (!aBaseMetaTileEntity.getWorld().playerEntities.isEmpty()){  					for (Object mTempPlayer : aBaseMetaTileEntity.getWorld().playerEntities){  						if (mTempPlayer instanceof EntityPlayer || mTempPlayer instanceof EntityPlayerMP){ @@ -347,13 +369,15 @@ public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity {  								if (getDistanceBetweenTwoPositions(getTileEntityPosition(), getPositionOfEntity(mTemp)) < tempRange){  									if (!mLocalChargingMap.containsKey(mTemp.getPersistentID())){  										mLocalChargingMap.put(mTemp.getPersistentID(), mTemp); +										ChargingHelper.addValidPlayer(mTemp, this);  										PlayerUtils.messagePlayer(mTemp, "You have entered charging range. ["+tempRange+"m].");  									}  								}  								else {  									if (mLocalChargingMap.containsKey(mTemp.getPersistentID())){  										if (mLocalChargingMap.remove(mTemp.getPersistentID()) != null){ -											PlayerUtils.messagePlayer(mTemp, "You have left charging range. ["+tempRange+"m].");	 +											PlayerUtils.messagePlayer(mTemp, "You have left charging range. ["+tempRange+"m]."); +											ChargingHelper.removeValidPlayer(mTemp, this);	  										}  									}  								} @@ -364,12 +388,14 @@ public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity {  									if (!mWirelessChargingMap.containsKey(mTemp)){  										mWirelessChargingMap.put(mTemp, mTemp.getPersistentID());  										PlayerUtils.messagePlayer(mTemp, "You have entered charging range. ["+tempRange+"m]."); +										ChargingHelper.addValidPlayer(mTemp, this);  									}  								}  								else {  									if (mWirelessChargingMap.containsKey(mTemp)){  										if (mWirelessChargingMap.remove(mTemp) != null){ -											PlayerUtils.messagePlayer(mTemp, "You have left charging range. ["+tempRange+"m].");	 +											PlayerUtils.messagePlayer(mTemp, "You have left charging range. ["+tempRange+"m]."); +											ChargingHelper.removeValidPlayer(mTemp, this);		  										}  									}  								} @@ -384,18 +410,18 @@ public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity {  		}		  	} -	private BlockPos getTileEntityPosition(){ +	public BlockPos getTileEntityPosition(){  		return new BlockPos(this.getBaseMetaTileEntity().getXCoord(), this.getBaseMetaTileEntity().getYCoord(), this.getBaseMetaTileEntity().getZCoord());  	} -	private BlockPos getPositionOfEntity(Entity mEntity){ +	public BlockPos getPositionOfEntity(Entity mEntity){  		if (mEntity == null){  			return null;  		}  		return EntityUtils.findBlockPosUnderEntity(mEntity);  	} -	private double getDistanceBetweenTwoPositions(BlockPos objectA, BlockPos objectB){ +	public double getDistanceBetweenTwoPositions(BlockPos objectA, BlockPos objectB){  		int[] objectArray1 = new int[]{objectA.xPos, objectA.yPos, objectA.zPos};  		int[] objectArray2 = new int[]{objectB.xPos, objectB.yPos, objectB.zPos};  		if (objectA == null || objectB == null){ @@ -411,6 +437,9 @@ public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity {  	@Override  	public void onRemoval() {  		mWirelessChargingMap.clear(); +		mLocalChargingMap.clear(); +		ChargingHelper.removeEntry(getTileEntityPosition(), this); +		  		super.onRemoval();  	} @@ -445,6 +474,10 @@ public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity {  	@Override  	public void onServerStart() {  		mWirelessChargingMap.clear(); +		mLocalChargingMap.clear(); +		if (!mHasBeenMapped && ChargingHelper.addEntry(getTileEntityPosition(), this)){ +			mHasBeenMapped = true; +		}  		super.onServerStart();  	} diff --git a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java index 538112d365..bd5f1abc54 100644 --- a/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java +++ b/src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java @@ -1,10 +1,12 @@  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; @@ -15,7 +17,9 @@ public class GregtechWirelessChargers {  		long bitsd = GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE  				| GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED; -		int mID = 890; +		int mID = 890;		 + +		FMLCommonHandler.instance().bus().register(ChargingHelper.class);  		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)); | 
