aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java39
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java115
2 files changed, 129 insertions, 25 deletions
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java
index d60fc0bfbe..605f958177 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java
@@ -40,7 +40,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
private final ArrayList<GT_MetaTileEntity_Hatch_Capacitor> eCaps = new ArrayList<>();
private int tier = 0;
private int orientation = 0;
-// private boolean ePowerPass = false; //TODO Make sure this only in the small tesla
private int scanTime = 0; //Sets scan time to Z E R O :epic:
private int scanTimeMin = 100; //Min scan time in ticks
@@ -52,13 +51,18 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
private float histLow = 0.25F; //Power pass is disabled if power is under this fraction
private float histHigh = 0.75F; //Power pass is enabled if power is over this fraction
+ private float histLowLimit = 0.05F; //How low can you configure it?
+ private float histHighLimit = 0.95F; //How high can you configure it?
+
private int scanRadius = 64; //Radius for small to tower transfers
private int scanRadiusTower = scanRadius * 2; //Radius for tower to tower transfers
- private long outputVoltage = 512L; //Tesla Voltage Output
+ private long outputVoltage = 512; //Tesla Voltage Output
private long outputCurrent = 1; //Tesla Current Output
private long outputEuT = outputVoltage * outputCurrent; //Tesla Power Output
+ public boolean powerPassToggle = false; //Power Pass for public viewing
+
private boolean parametrized = false; //Assumes no parametrizer on initialisation
//Default parametrized variables
private long histLowParam = 0;
@@ -303,11 +307,21 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
float energyFrac = (float)energyStored/energyMax;
-
+ //Hysteresis Parameters sanity check
if (parametrized && histScaleParam > 0 && histLowParam > 0 && histScaleParam <= histHighParam && histLowParam < histHighParam) {
- //TODO Ugly Math because someone I am bad at datatypes :(
- histLow = (float)histLowParam/histScaleParam;
- histHigh = (float)histHighParam/histScaleParam;
+ float histLowt = (float)histLowParam/histScaleParam;
+ if (histLowt >= histLowLimit){
+ histLow = histLowt;
+ } else {
+ histLow = histLowLimit;
+ }
+
+ float histHight = (float)histHighParam/histScaleParam;
+ if (histHight <= histHighLimit){
+ histHigh = histHight;
+ } else {
+ histHigh = histHighLimit;
+ }
}
//ePowerPass hist toggle
@@ -316,10 +330,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
} else if (ePowerPass && energyFrac < histLow) {
ePowerPass = false;
}
+ powerPassToggle = ePowerPass;
////Scanning for active teslas
-
if (parametrized && scanTimeMinParam > scanTimeMin) {
scanTimeTill = scanTimeMinParam;
}
@@ -341,12 +355,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
if (xPosOffset == 0 && yPosOffset == 0 && zPosOffset == 0){
continue;
}
-
IGregTechTileEntity node = mte.getIGregTechTileEntityOffset(xPosOffset, yPosOffset, zPosOffset);
if (node == null) {
continue;
}
-
IMetaTileEntity nodeInside = node.getMetaTileEntity();
if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil){
eTeslaList.add((GT_MetaTileEntity_TeslaCoil) nodeInside);
@@ -368,12 +380,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
if (xPosOffset == 0 && yPosOffset == 0 && zPosOffset == 0){
continue;
}
-
IGregTechTileEntity node = mte.getIGregTechTileEntityOffset(xPosOffset, yPosOffset, zPosOffset);
if (node == null) {
continue;
}
-
IMetaTileEntity nodeInside = node.getMetaTileEntity();
if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive()){
eTeslaTowerList.add((GT_MetaTileEntity_TM_teslaCoil) nodeInside);
@@ -384,7 +394,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
}
//Stuff to do if ePowerPass
- if (ePowerPass) {
+ if (powerPassToggle) {
outputVoltage = 512;//TODO Generate depending on kind of capacitors
outputCurrent = 1;//TODO Generate depending on count of capacitors
@@ -418,18 +428,17 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
//Try to send EU to the smol teslas
for (GT_MetaTileEntity_TeslaCoil Rx : eTeslaList) {
- if (!Rx.ePowerPass) {
+ if (!Rx.powerPassToggle) {
long euTran = outputVoltage;
if (Rx.getBaseMetaTileEntity().injectEnergyUnits((byte)6, euTran, 1L) > 0L) {
setEUVar(getEUVar() - euTran);
}
- } else {
}
}
//Try to send EU to big teslas
for (GT_MetaTileEntity_TM_teslaCoil Rx : eTeslaTowerList) {
- if (!Rx.ePowerPass) {
+ if (!Rx.powerPassToggle) {
long euTran = outputVoltage;
if (Rx.getEUVar() + euTran <= (Rx.maxEUStore()/2)) {
setEUVar(getEUVar() - euTran);
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java
index a0868ea5da..c623ba7448 100644
--- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java
+++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java
@@ -1,27 +1,41 @@
package com.github.technus.tectech.thing.metaTileEntity.single;
-import com.github.technus.tectech.Reference;
import com.github.technus.tectech.Util;
+import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil;
+import eu.usrv.yamcore.auxiliary.PlayerChatHelper;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer;
import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
-
import java.util.ArrayList;
-import static com.github.technus.tectech.CommonValues.V;
public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer {
- public boolean ePowerPass = false;
- public boolean teslaCompatible = true;
+ public boolean powerPassToggle = false; //Power Pass for public viewing
+
+ private int scanTime = 0; //Sets scan time to Z E R O :epic:
+ private int scanTimeMin = 100; //Min scan time in ticks
+ private int scanTimeTill = scanTimeMin; //Set default scan time
+
+ private ArrayList<GT_MetaTileEntity_TM_teslaCoil> eTeslaTowerList = new ArrayList<>(); //Makes a list for BIGG Teslas
+
+ private float histLow = 0.25F; //Power pass is disabled if power is under this fraction
+ private float histHigh = 0.75F; //Power pass is enabled if power is over this fraction
+
+ private float histLowLimit = 0.25F; //How low can you configure it?
+ private float histHighLimit = 0.75F; //How high can you configure it?
+
+ private int scanRadiusTower = 64; //Radius for tower to tower transfers
+
+ private long outputVoltage = 512; //Tesla Voltage Output
+ private long outputCurrent = 1; //Tesla Current Output
+ private long outputEuT = outputVoltage * outputCurrent; //Tesla Power Output
- private int scanTime = 0;
- private int scanRadius = 64;//TODO Generate depending on power stored
- private long euTOutMax = V[9] / 8;//TODO Generate depending on count and kind of capacitors
- private ArrayList<GT_MetaTileEntity_TeslaCoil> eTeslaList = new ArrayList<>();
public GT_MetaTileEntity_TeslaCoil(int aID, String aName, String aNameRegional, int aTier, int aSlotCount) {
super(aID, aName, aNameRegional, aTier, "Tesla Coil Transceiver", aSlotCount);
@@ -32,6 +46,15 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB
super(aName, aTier, aDescription, aTextures, aSlotCount);
}
+ //TODO Redo the string formatting to be actually sane-ish
+ public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (aPlayer.isSneaking()) {
+ PlayerChatHelper.SendInfo(aPlayer, String.join("", String.format("Hysteresis High Changed to %d ", histHigh*100), "%"));
+ } else {
+ PlayerChatHelper.SendInfo(aPlayer, String.join("", String.format("Hysteresis Low Changed to %d ", histLow*100), "%"));
+ }
+ }
+
@Override
public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) {
return new GT_MetaTileEntity_TeslaCoil(mName, mTier, mDescription, mTextures, mInventory.length);
@@ -40,6 +63,7 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB
@Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
if (aBaseMetaTileEntity.isServerSide()) {
+ IGregTechTileEntity mte = getBaseMetaTileEntity();
this.mCharge = aBaseMetaTileEntity.getStoredEU() / 2L > aBaseMetaTileEntity.getEUCapacity() / 3L;
this.mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3L;
this.mBatteryCount = 0;
@@ -56,7 +80,78 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB
++this.mChargeableCount;
}
}
- //This is where most things happen~~
+
+ ////Hysteresis based ePowerPass Config
+ long energyMax = getStoredEnergy()[1];
+ long energyStored = getStoredEnergy()[0];
+
+ float energyFrac = (float)energyStored/energyMax;
+ System.err.println(energyFrac);
+
+ //ePowerPass hist toggle
+ if (!powerPassToggle && energyFrac > histHigh) {
+ powerPassToggle = true;
+ } else if (powerPassToggle && energyFrac < histLow) {
+ powerPassToggle = false;
+ }
+
+ ////Scanning for active teslas
+ scanTime++;
+ if (scanTime >= scanTimeTill) {
+ scanTime = 0;
+
+ scanRadiusTower = 64; //TODO Generate depending on power stored
+ eTeslaTowerList.clear();
+
+ for (int xPosOffset = -scanRadiusTower; xPosOffset <= scanRadiusTower; xPosOffset++) {
+ for (int yPosOffset = -scanRadiusTower; yPosOffset <= scanRadiusTower; yPosOffset++) {
+ for (int zPosOffset = -scanRadiusTower; zPosOffset <= scanRadiusTower; zPosOffset++) {
+ if (xPosOffset == 0 && yPosOffset == 0 && zPosOffset == 0){
+ continue;
+ }
+ IGregTechTileEntity node = mte.getIGregTechTileEntityOffset(xPosOffset, yPosOffset, zPosOffset);
+ if (node == null) {
+ continue;
+ }
+ IMetaTileEntity nodeInside = node.getMetaTileEntity();
+ if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive()){
+ eTeslaTowerList.add((GT_MetaTileEntity_TM_teslaCoil) nodeInside);
+ }
+ }
+ }
+ }
+ }
+
+ //Stuff to do if ePowerPass
+ if (powerPassToggle) {
+ outputVoltage = 512;//TODO Set Depending On Tier
+ outputCurrent = 1;//TODO Generate depending on count of batteries
+
+ outputEuT = outputVoltage * outputCurrent;
+
+ long requestedSumEU = 0;
+
+ //Clean the large tesla list
+ for (GT_MetaTileEntity_TM_teslaCoil Rx : eTeslaTowerList.toArray(new GT_MetaTileEntity_TM_teslaCoil[eTeslaTowerList.size()])) {
+ try {
+ requestedSumEU += Rx.maxEUStore() - Rx.getEUVar();
+ } catch (Exception e) {
+ eTeslaTowerList.remove(Rx);
+ }
+ }
+
+ //Try to send EU to big teslas
+ for (GT_MetaTileEntity_TM_teslaCoil Rx : eTeslaTowerList) {
+ if (!Rx.powerPassToggle) {
+ long euTran = outputVoltage;
+ if (Rx.getEUVar() + euTran <= (Rx.maxEUStore()/2)) {
+ setEUVar(getEUVar() - euTran);
+ Rx.getBaseMetaTileEntity().increaseStoredEnergyUnits(euTran, true);
+ System.err.println("Energy Sent!");
+ }
+ }
+ }
+ }
}
}
}