aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/xmod
diff options
context:
space:
mode:
Diffstat (limited to 'src/Java/gtPlusPlus/xmod')
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java2
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java251
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaWirelessCharger.java45
-rw-r--r--src/Java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java6
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));