From cc518e371ff8557877d3e3f33aac91c0881c6d7b Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 8 Nov 2020 08:51:17 +0000 Subject: Fixes tesla covers Looks like GT5 covers are behaviors and not discrete objects, go figure! This is a horrible fix, but it works. --- .../mechanics/tesla/TeslaCoverConnection.java | 50 ++++++++++++++++++++++ .../tectech/thing/cover/GT_Cover_TM_TeslaCoil.java | 46 ++------------------ .../cover/GT_Cover_TM_TeslaCoil_Ultimate.java | 3 +- 3 files changed, 55 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java (limited to 'src') diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java new file mode 100644 index 0000000000..99e0d75c1c --- /dev/null +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java @@ -0,0 +1,50 @@ +package com.github.technus.tectech.mechanics.tesla; + +import com.github.technus.tectech.util.Vec3Impl; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class TeslaCoverConnection implements ITeslaConnectableSimple { + private final IGregTechTileEntity IGT; + private final byte teslaReceptionCapability; + + public TeslaCoverConnection(IGregTechTileEntity IGT, byte teslaReceptionCapability) { + this.IGT = IGT; + this.teslaReceptionCapability = teslaReceptionCapability; + } + + @Override + public byte getTeslaReceptionCapability() { + return teslaReceptionCapability; + } + + @Override + public float getTeslaReceptionCoefficient() { + return 1; + } + + @Override + public boolean isTeslaReadyToReceive() { + return true; + } + + @Override + public long getTeslaStoredEnergy() { + return IGT.getStoredEU(); + } + + @Override + public Vec3Impl getTeslaPosition() { + return new Vec3Impl(IGT); + } + + @Override + public Integer getTeslaDimension() { + return IGT.getWorld().provider.dimensionId; + } + + @Override + public boolean teslaInjectEnergy(long teslaVoltageInjected) { + //Same as in the microwave transmitters, this does not account for amp limits + return IGT.injectEnergyUnits((byte) 1, teslaVoltageInjected, 1L) > 0L; + } +} diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java index 2efe2f3cbc..d3d9ead6d2 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java @@ -1,9 +1,9 @@ package com.github.technus.tectech.thing.cover; import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple; +import com.github.technus.tectech.mechanics.tesla.TeslaCoverConnection; import com.github.technus.tectech.util.Vec3Impl; import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; import net.minecraft.entity.player.EntityPlayer; @@ -11,9 +11,7 @@ import net.minecraft.entity.player.EntityPlayer; import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.*; import static ic2.api.info.Info.DMG_ELECTRIC; -public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior implements ITeslaConnectableSimple { - private IGregTechTileEntity IGT; - +public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior { public GT_Cover_TM_TeslaCoil() { } @@ -21,14 +19,10 @@ public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior implements ITeslaCon public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) { //Only do stuff if we're on top and have power if (aSide == 1 || aTileEntity.getEUCapacity() > 0) { - //Pull IGT onto the outside, should only execute first tick - if (IGT == null) { - IGT = aTileEntity.getIGregTechTileEntityOffset(0, 0, 0); - } //Makes sure we're on the list - teslaNodeSet.add(this); + teslaNodeSet.add(new TeslaCoverConnection(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), + getTeslaReceptionCapability())); } - return super.doCoverThings(aSide, aInputRedstone, aCoverID, aCoverVariable, aTileEntity, aTimer); } @@ -57,39 +51,7 @@ public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior implements ITeslaCon return 200; } - @Override public byte getTeslaReceptionCapability() { return 2; } - - @Override - public float getTeslaReceptionCoefficient() { - return 1; - } - - @Override - public boolean isTeslaReadyToReceive() { - return true; - } - - @Override - public long getTeslaStoredEnergy() { - return IGT.getStoredEU(); - } - - @Override - public Vec3Impl getTeslaPosition() { - return new Vec3Impl(IGT); - } - - @Override - public Integer getTeslaDimension() { - return IGT.getWorld().provider.dimensionId; - } - - @Override - public boolean teslaInjectEnergy(long teslaVoltageInjected) { - //Same as in the microwave transmitters, this does not account for amp limits - return IGT.injectEnergyUnits((byte) 1, teslaVoltageInjected, 1L) > 0L; - } } diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java index 028ac3a4d6..3417d7ae20 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java @@ -31,8 +31,7 @@ public class GT_Cover_TM_TeslaCoil_Ultimate extends GT_Cover_TM_TeslaCoil { public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { return true; } - - @Override + public byte getTeslaReceptionCapability() { return 1; } -- cgit From 70b7ebbfc1014ed3f1bd571c31d8b6a550a82abe Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 8 Nov 2020 09:06:04 +0000 Subject: Fixed Tesla hysteresis function --- .../com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java index e397c1dc5f..291acf393d 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java @@ -83,6 +83,10 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { } ITeslaConnectableSimple target = Rx.getKey(); + + //Continue if the target can't receive + if(!target.isTeslaReadyToReceive()) continue; + int distance = Rx.getValue(); //Calculate the voltage output -- cgit From 8dd64d25caf626c538dcb628408a239ee724fc5e Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 15 Nov 2020 15:29:30 +0000 Subject: Tesla Speedup -Switched from sorted HashMap to ArrayListMultiMap -Fixed issue where interface lacked proper methods --- .../tectech/mechanics/tesla/ITeslaConnectable.java | 23 +++--- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 18 ++++ .../single/GT_MetaTileEntity_TeslaCoil.java | 96 +++++++++++++--------- 3 files changed, 87 insertions(+), 50 deletions(-) (limited to 'src') diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java index 291acf393d..d505ca8e09 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java @@ -1,19 +1,20 @@ package com.github.technus.tectech.mechanics.tesla; import com.github.technus.tectech.mechanics.spark.ThaumSpark; +import com.google.common.collect.Multimap; -import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Objects; -import static com.github.technus.tectech.util.Util.entriesSortedByValues; import static java.lang.Math.sqrt; public interface ITeslaConnectable extends ITeslaConnectableSimple { //Map with all Teslas in the same dimension and the distance to them //TODO Range - HashMap teslaNodeMap = new HashMap<>(); + Multimap getTeslaNodeMap(); + //ThaumCraft lighting coordinate pairs, so we can send them in bursts and save on lag - HashSet sparkList = new HashSet<>(); + HashSet getSparkList(); //-128 to -1 disables capability //0 means any source or target @@ -36,7 +37,7 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { public static final HashSet teslaNodeSet = new HashSet<>();//Targets for power transmission public static void generateTeslaNodeMap(ITeslaConnectable origin) { - origin.teslaNodeMap.clear(); + origin.getTeslaNodeMap().clear(); for (ITeslaConnectableSimple target : teslaNodeSet) { //Sanity checks if (target == null) { @@ -59,13 +60,13 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { //Skip if the range is too vast continue; } - origin.teslaNodeMap.put(target, distance); + origin.getTeslaNodeMap().put(distance, target); } } public static void cleanTeslaNodeMap(ITeslaConnectable origin) { //Wipes all null objects, in practice this is unloaded or improperly removed tesla objects - origin.teslaNodeMap.keySet().removeIf(Objects::isNull); + origin.getTeslaNodeMap().keySet().removeIf(Objects::isNull); } public static long powerTeslaNodeMap(ITeslaConnectable origin) { @@ -76,18 +77,18 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { long remainingAmperes = origin.getTeslaOutputCurrent(); while (remainingAmperes > 0) { long startingAmperes = remainingAmperes; - for (HashMap.Entry Rx : entriesSortedByValues(teslaNodeMap)) { + for (Map.Entry Rx : origin.getTeslaNodeMap().entries()) { if (origin.getTeslaStoredEnergy() < (origin.isOverdriveEnabled() ? origin.getTeslaOutputVoltage() * 2 : origin.getTeslaOutputVoltage())) { //Return and end the tick if we're out of energy to send return origin.getTeslaOutputCurrent() - remainingAmperes; } - ITeslaConnectableSimple target = Rx.getKey(); + ITeslaConnectableSimple target = Rx.getValue(); //Continue if the target can't receive if(!target.isTeslaReadyToReceive()) continue; - int distance = Rx.getValue(); + int distance = Rx.getKey(); //Calculate the voltage output long outputVoltageInjectable; @@ -109,7 +110,7 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { if (target.teslaInjectEnergy(outputVoltageInjectable)) { origin.teslaDrainEnergy(outputVoltageConsumption); - sparkList.add(new ThaumSpark(origin.getTeslaPosition(), target.getTeslaPosition(), origin.getTeslaDimension())); + origin.getSparkList().add(new ThaumSpark(origin.getTeslaPosition(), target.getTeslaPosition(), origin.getTeslaDimension())); remainingAmperes--; } if (remainingAmperes == 0) { 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 93f6e50c5a..5f6e0fffaa 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 @@ -8,6 +8,7 @@ import com.github.technus.tectech.mechanics.spark.ThaumSpark; import com.github.technus.tectech.mechanics.structure.Structure; import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder; import com.github.technus.tectech.mechanics.tesla.ITeslaConnectable; +import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Capacitor; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; @@ -19,6 +20,8 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.util.Vec3Impl; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Materials; @@ -35,6 +38,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; +import java.util.HashSet; import static com.github.technus.tectech.mechanics.structure.Structure.adders; import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.*; @@ -47,6 +51,10 @@ import static java.lang.Math.*; import static net.minecraft.util.StatCollector.translateToLocal; public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable, ITeslaConnectable { + //Interface fields + Multimap teslaNodeMap = ArrayListMultimap.create(); + HashSet sparkList = new HashSet<>(); + //region variables private static final int transferRadiusTowerFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TOWER;//Default is 32 private static final int transferRadiusTransceiverFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TRANSCEIVER;//Default is 16 @@ -701,6 +709,16 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock return 0; } + @Override + public Multimap getTeslaNodeMap() { + return teslaNodeMap; + } + + @Override + public HashSet getSparkList() { + return sparkList; + } + @Override public byte getTeslaTransmissionCapability() { return 1; 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 388a253b27..cc42929806 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,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.single; import com.github.technus.tectech.mechanics.tesla.ITeslaConnectable; +import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple; import com.github.technus.tectech.util.CommonValues; import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; @@ -9,6 +10,8 @@ import com.github.technus.tectech.mechanics.spark.ThaumSpark; import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil; import com.github.technus.tectech.util.Util; import com.github.technus.tectech.util.Vec3Impl; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; import eu.usrv.yamcore.auxiliary.PlayerChatHelper; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -23,6 +26,7 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.reflect.FieldUtils; import java.util.Arrays; +import java.util.HashSet; import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.*; import static com.github.technus.tectech.util.CommonValues.V; @@ -32,6 +36,10 @@ import static net.minecraft.util.StatCollector.translateToLocal; import static net.minecraft.util.StatCollector.translateToLocalFormatted; public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer implements ITeslaConnectable { + //Interface fields + Multimap teslaNodeMap = ArrayListMultimap.create(); + HashSet sparkList = new HashSet<>(); + private final static int transferRadiusMax = TecTech.configTecTech.TESLA_SINGLE_RANGE;//Default is 20 private final static int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK;//Default is 1 private final static float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE;//Default is 0.25F @@ -179,45 +187,45 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB return new GT_MetaTileEntity_TeslaCoil(mName, mTier, mDescription, mTextures, mInventory.length); } - private void thaumLightning(IGregTechTileEntity mte, IGregTechTileEntity node) { - int x = mte.getXCoord(); - int y = mte.getYCoord(); - int z = mte.getZCoord(); - - byte xR; - byte yR; - byte zR; - - IMetaTileEntity nodeInside = node.getMetaTileEntity(); - if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil) { - GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; - xR = (byte) (nodeTesla.posTop.get0() - x); - yR = (byte) (nodeTesla.posTop.get1() - y); - zR = (byte) (nodeTesla.posTop.get2() - z); - } else { - xR = (byte) (node.getXCoord() - x); - yR = (byte) (node.getYCoord() - y); - zR = (byte) (node.getZCoord() - z); - } - - int wID = mte.getWorld().provider.dimensionId; - - sparkList.add(new ThaumSpark(x, y, z, xR, yR, zR, wID)); - } - - private long[] getOutputVoltage(long outputVoltage, int distance, boolean overDriveToggle) { - long outputVoltageInjectable; - long outputVoltageConsumption; - - if (overDriveToggle) { - outputVoltageInjectable = outputVoltage; - outputVoltageConsumption = outputVoltage + (distance * perBlockLoss) + (long) Math.round(overDriveLoss * outputVoltage); - } else { - outputVoltageInjectable = outputVoltage - (distance * perBlockLoss); - outputVoltageConsumption = outputVoltage; - } - return new long[]{outputVoltageInjectable, outputVoltageConsumption}; - } +// private void thaumLightning(IGregTechTileEntity mte, IGregTechTileEntity node) { +// int x = mte.getXCoord(); +// int y = mte.getYCoord(); +// int z = mte.getZCoord(); +// +// byte xR; +// byte yR; +// byte zR; +// +// IMetaTileEntity nodeInside = node.getMetaTileEntity(); +// if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil) { +// GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; +// xR = (byte) (nodeTesla.posTop.get0() - x); +// yR = (byte) (nodeTesla.posTop.get1() - y); +// zR = (byte) (nodeTesla.posTop.get2() - z); +// } else { +// xR = (byte) (node.getXCoord() - x); +// yR = (byte) (node.getYCoord() - y); +// zR = (byte) (node.getZCoord() - z); +// } +// +// int wID = mte.getWorld().provider.dimensionId; +// +// sparkList.add(new ThaumSpark(x, y, z, xR, yR, zR, wID)); +// } +// +// private long[] getOutputVoltage(long outputVoltage, int distance, boolean overDriveToggle) { +// long outputVoltageInjectable; +// long outputVoltageConsumption; +// +// if (overDriveToggle) { +// outputVoltageInjectable = outputVoltage; +// outputVoltageConsumption = outputVoltage + (distance * perBlockLoss) + (long) Math.round(overDriveLoss * outputVoltage); +// } else { +// outputVoltageInjectable = outputVoltage - (distance * perBlockLoss); +// outputVoltageConsumption = outputVoltage; +// } +// return new long[]{outputVoltageInjectable, outputVoltageConsumption}; +// } @Override public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { @@ -308,6 +316,16 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB return 1; } + @Override + public Multimap getTeslaNodeMap() { + return teslaNodeMap; + } + + @Override + public HashSet getSparkList() { + return sparkList; + } + @Override public byte getTeslaTransmissionCapability() { return 2; -- cgit From 548e3eb74288448704ec790b4be6bdd16d3f7549 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 15 Nov 2020 17:07:46 +0000 Subject: Further Optimisation -Tesla Maps are fully written to only one -Subsequent modifications are done to remove or add new Teslas -Lots more encapsulation --- .../tectech/mechanics/tesla/ITeslaConnectable.java | 76 ++++++++++++++-------- .../tectech/thing/cover/GT_Cover_TM_TeslaCoil.java | 4 +- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 9 +-- .../single/GT_MetaTileEntity_TeslaCoil.java | 8 +-- 4 files changed, 55 insertions(+), 42 deletions(-) (limited to 'src') diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java index d505ca8e09..07059c82b2 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java @@ -34,39 +34,59 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { boolean teslaDrainEnergy(long teslaVoltageDrained); class TeslaUtil { - public static final HashSet teslaNodeSet = new HashSet<>();//Targets for power transmission + private static final HashSet teslaSimpleNodeSet = new HashSet<>();//Targets for power transmission + private static final HashSet teslaNodeSet = new HashSet<>();//Sources of power transmission - public static void generateTeslaNodeMap(ITeslaConnectable origin) { - origin.getTeslaNodeMap().clear(); - for (ITeslaConnectableSimple target : teslaNodeSet) { - //Sanity checks - if (target == null) { - //The Tesla Covers do not remove themselves from the list and this is the code that does - teslaNodeSet.remove(null); - continue; - } else if (origin.equals(target) || !origin.getTeslaDimension().equals(target.getTeslaDimension())) { - //Skip if looking at myself and skip if not in the same dimension - //TODO, INTERDIM? - continue; - } else if (origin.getTeslaTransmissionCapability() != 0 && origin.getTeslaReceptionCapability() != 0 && - origin.getTeslaTransmissionCapability() != origin.getTeslaReceptionCapability()) { - //Skip if incompatible - continue; - } + public static void teslaSimpleNodeSetAdd(ITeslaConnectableSimple target){ + teslaSimpleNodeSet.add(target); + teslaNodeSet.forEach(origin -> addTargetToTeslaOrigin(target, origin)); + } - //Range calc - int distance = (int) sqrt(origin.getTeslaPosition().distanceSq(target.getTeslaPosition())); - if (distance > origin.getTeslaTransmissionRange() * target.getTeslaReceptionCoefficient()) { - //Skip if the range is too vast - continue; - } - origin.getTeslaNodeMap().put(distance, target); + public static void teslaSimpleNodeSetRemove(ITeslaConnectableSimple target){ + teslaSimpleNodeSet.remove(target); + if (target instanceof ITeslaConnectable)teslaNodeSet.remove(target); + teslaNodeSet.forEach(origin -> removeTargetFromTeslaOrigin(target, origin)); + } + + private static void addTargetToTeslaOrigin(ITeslaConnectableSimple target, ITeslaConnectable origin){ + if (origin.equals(target) || !origin.getTeslaDimension().equals(target.getTeslaDimension())) { + //Skip if looking at myself and skip if not in the same dimension + //TODO, INTERDIM? + return; + } else if (origin.getTeslaTransmissionCapability() != 0 && origin.getTeslaReceptionCapability() != 0 && + origin.getTeslaTransmissionCapability() != origin.getTeslaReceptionCapability()) { + //Skip if incompatible + return; + } + //Range calc + int distance = (int) sqrt(origin.getTeslaPosition().distanceSq(target.getTeslaPosition())); + if (distance > origin.getTeslaTransmissionRange() * target.getTeslaReceptionCoefficient()) { + //Skip if the range is too vast + return; } + origin.getTeslaNodeMap().put(distance, target); } - public static void cleanTeslaNodeMap(ITeslaConnectable origin) { - //Wipes all null objects, in practice this is unloaded or improperly removed tesla objects - origin.getTeslaNodeMap().keySet().removeIf(Objects::isNull); + private static void removeTargetFromTeslaOrigin(ITeslaConnectableSimple target, ITeslaConnectable origin){ + //Range calc TODO Remove duplicate? + int distance = (int) sqrt(origin.getTeslaPosition().distanceSq(target.getTeslaPosition())); + origin.getTeslaNodeMap().remove(distance, target); + } + + public static void generateTeslaNodeMap(ITeslaConnectable origin) { + if(!teslaNodeSet.contains(origin)) { + origin.getTeslaNodeMap().clear(); + for (ITeslaConnectableSimple target : teslaSimpleNodeSet) { + //Sanity checks + if (target == null) { + //The Tesla Covers do not remove themselves from the list and this is the code that does + teslaSimpleNodeSet.remove(null); + continue; + } + addTargetToTeslaOrigin(target, origin); + } + } + teslaNodeSet.add(origin); } public static long powerTeslaNodeMap(ITeslaConnectable origin) { diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java index d3d9ead6d2..a573ed740b 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java @@ -1,8 +1,6 @@ package com.github.technus.tectech.thing.cover; -import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple; import com.github.technus.tectech.mechanics.tesla.TeslaCoverConnection; -import com.github.technus.tectech.util.Vec3Impl; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; @@ -20,7 +18,7 @@ public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior { //Only do stuff if we're on top and have power if (aSide == 1 || aTileEntity.getEUCapacity() > 0) { //Makes sure we're on the list - teslaNodeSet.add(new TeslaCoverConnection(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), + teslaSimpleNodeSetAdd(new TeslaCoverConnection(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), getTeslaReceptionCapability())); } return super.doCoverThings(aSide, aInputRedstone, aCoverID, aCoverVariable, aTileEntity, aTimer); 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 5f6e0fffaa..22f1d003e6 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 @@ -462,7 +462,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock if (this.getBaseMetaTileEntity().isClientSide()) { return; } - teslaNodeSet.remove(this); + teslaSimpleNodeSetRemove(this); for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) { cap.getBaseMetaTileEntity().setActive(false); @@ -536,7 +536,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); energyCapacity = aNBT.getLong("eEnergyCapacity"); - teslaNodeSet.add(this); + teslaSimpleNodeSetAdd(this); } @Override @@ -556,7 +556,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { super.onFirstTick_EM(aBaseMetaTileEntity); if (!aBaseMetaTileEntity.isClientSide()) { - teslaNodeSet.add(this); + teslaSimpleNodeSetAdd(this); } } @@ -606,9 +606,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock transferRadiusTransceiverDisplay.set(transferRadiusTower * 2); transferRadiusCoverUltimateDisplay.set(transferRadiusTower); - //Clean the teslaNodeMap - cleanTeslaNodeMap(this); - //Power transfer outputCurrentDisplay.set(powerTeslaNodeMap(this)); 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 cc42929806..c7ebb76e09 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 @@ -7,14 +7,12 @@ import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher; import com.github.technus.tectech.mechanics.spark.RendererMessage; import com.github.technus.tectech.mechanics.spark.ThaumSpark; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil; import com.github.technus.tectech.util.Util; import com.github.technus.tectech.util.Vec3Impl; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; 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; @@ -231,7 +229,7 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { super.onFirstTick(aBaseMetaTileEntity); if (!aBaseMetaTileEntity.isClientSide()) { - teslaNodeSet.add(this); + teslaSimpleNodeSetAdd(this); } } @@ -239,14 +237,14 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB public void onRemoval() { super.onRemoval(); if (!this.getBaseMetaTileEntity().isClientSide()) { - teslaNodeSet.remove(this); + teslaSimpleNodeSetRemove(this); } } @Override public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); - teslaNodeSet.add(this); + teslaSimpleNodeSetAdd(this); } @Override -- cgit From ab706fea9e4192b611788981930a575f6d4205fe Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 15 Nov 2020 17:57:49 +0000 Subject: Thaum Lightning fixes -Less spammy lightning bolts -Still has duplicate code and stuff --- .../tectech/mechanics/tesla/ITeslaConnectable.java | 19 +++-- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 55 +++++++-------- .../single/GT_MetaTileEntity_TeslaCoil.java | 82 +++++----------------- 3 files changed, 49 insertions(+), 107 deletions(-) (limited to 'src') diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java index 07059c82b2..74aa4b8463 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java @@ -5,7 +5,6 @@ import com.google.common.collect.Multimap; import java.util.HashSet; import java.util.Map; -import java.util.Objects; import static java.lang.Math.sqrt; @@ -74,17 +73,15 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { } public static void generateTeslaNodeMap(ITeslaConnectable origin) { - if(!teslaNodeSet.contains(origin)) { - origin.getTeslaNodeMap().clear(); - for (ITeslaConnectableSimple target : teslaSimpleNodeSet) { - //Sanity checks - if (target == null) { - //The Tesla Covers do not remove themselves from the list and this is the code that does - teslaSimpleNodeSet.remove(null); - continue; - } - addTargetToTeslaOrigin(target, origin); + origin.getTeslaNodeMap().clear(); + for (ITeslaConnectableSimple target : teslaSimpleNodeSet) { + //Sanity checks + if (target == null) { + //The Tesla Covers do not remove themselves from the list and this is the code that does + teslaSimpleNodeSet.remove(null); + continue; } + addTargetToTeslaOrigin(target, origin); } teslaNodeSet.add(origin); } 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 22f1d003e6..d1d645acc2 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 @@ -52,8 +52,9 @@ import static net.minecraft.util.StatCollector.translateToLocal; public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable, ITeslaConnectable { //Interface fields - Multimap teslaNodeMap = ArrayListMultimap.create(); - HashSet sparkList = new HashSet<>(); + private final Multimap teslaNodeMap = ArrayListMultimap.create(); + private final HashSet sparkList = new HashSet<>(); + private int sparkCount = 10; //region variables private static final int transferRadiusTowerFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TOWER;//Default is 32 @@ -81,8 +82,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private final ArrayList eCapacitorHatches = new ArrayList<>(); //Capacitor hatches which determine the max voltage tier and count of amps - private int sortTime = 0; //Scan timer used for tesla search intervals - private long energyCapacity = 0; //Total energy storage limited by capacitors private long outputVoltageMax = 0; //Tesla voltage output limited by capacitors private int vTier = -1; //Tesla voltage tier limited by capacitors @@ -459,13 +458,12 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock @Override public void onRemoval() { super.onRemoval(); - if (this.getBaseMetaTileEntity().isClientSide()) { - return; - } - teslaSimpleNodeSetRemove(this); - for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { - if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) { - cap.getBaseMetaTileEntity().setActive(false); + if (!getBaseMetaTileEntity().isClientSide()) { + teslaSimpleNodeSetRemove(this); + for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { + if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) { + cap.getBaseMetaTileEntity().setActive(false); + } } } } @@ -557,13 +555,12 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock super.onFirstTick_EM(aBaseMetaTileEntity); if (!aBaseMetaTileEntity.isClientSide()) { teslaSimpleNodeSetAdd(this); + generateTeslaNodeMap(this); } } @Override public boolean onRunningTick(ItemStack aStack) { - IGregTechTileEntity mte = getBaseMetaTileEntity(); - //Hysteresis based ePowerPass setting float energyFrac = (float) getEUVar() / energyCapacity; @@ -577,15 +574,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock ePowerPass = false; } - //Create the teslaNodeMap - if (sortTime == sortTimeMinSetting.get()) { - sortTime = 0; - sortTimeDisplay.updateStatus(); - generateTeslaNodeMap(this); - } - sortTime++; - sortTimeDisplay.set(sortTime); - //Power Limit Settings if (outputVoltageSetting.get() > 0) { outputVoltage = min(outputVoltageMax, (long) outputVoltageSetting.get()); @@ -609,16 +597,21 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock //Power transfer outputCurrentDisplay.set(powerTeslaNodeMap(this)); - if (!sparkList.isEmpty()) { - NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList), - mte.getWorld().provider.dimensionId, - posTop.get0(), - posTop.get1(), - posTop.get2(), - 256); + //Randomly send all the sparks out once every 3 to 5 seconds + sparkCount--; + if (sparkCount == 0){ + IGregTechTileEntity mte = getBaseMetaTileEntity(); + sparkCount = 60 + mte.getWorld().rand.nextInt(41); + if(!sparkList.isEmpty()){ + NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList), + mte.getWorld().provider.dimensionId, + mte.getXCoord(), + mte.getYCoord(), + mte.getZCoord(), + 256); + sparkList.clear(); + } } - sparkList.clear(); - return true; } 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 c7ebb76e09..292d363ad9 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 @@ -35,15 +35,13 @@ import static net.minecraft.util.StatCollector.translateToLocalFormatted; public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer implements ITeslaConnectable { //Interface fields - Multimap teslaNodeMap = ArrayListMultimap.create(); - HashSet sparkList = new HashSet<>(); + private final Multimap teslaNodeMap = ArrayListMultimap.create(); + private final HashSet sparkList = new HashSet<>(); + private int sparkCount = 10; private final static int transferRadiusMax = TecTech.configTecTech.TESLA_SINGLE_RANGE;//Default is 20 private final static int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK;//Default is 1 private final static float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE;//Default is 0.25F - - private byte sparkCount = 0; - private final static int transferRadiusMin = 4;//Minimum user configurable private int transferRadius = transferRadiusMax;//Default transferRadius setting @@ -61,9 +59,6 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB private String clientLocale = "en_US"; - private int sortTime = 0;//Sorting tick counter - private final static int sortTimeMax = 100;//Sorting tick counter limit, so we only sort once every 5 seconds - public GT_MetaTileEntity_TeslaCoil(int aID, String aName, String aNameRegional, int aTier, int aSlotCount) { super(aID, aName, aNameRegional, aTier, "", aSlotCount); Util.setTier(aTier, this); @@ -185,51 +180,12 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB return new GT_MetaTileEntity_TeslaCoil(mName, mTier, mDescription, mTextures, mInventory.length); } -// private void thaumLightning(IGregTechTileEntity mte, IGregTechTileEntity node) { -// int x = mte.getXCoord(); -// int y = mte.getYCoord(); -// int z = mte.getZCoord(); -// -// byte xR; -// byte yR; -// byte zR; -// -// IMetaTileEntity nodeInside = node.getMetaTileEntity(); -// if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil) { -// GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside; -// xR = (byte) (nodeTesla.posTop.get0() - x); -// yR = (byte) (nodeTesla.posTop.get1() - y); -// zR = (byte) (nodeTesla.posTop.get2() - z); -// } else { -// xR = (byte) (node.getXCoord() - x); -// yR = (byte) (node.getYCoord() - y); -// zR = (byte) (node.getZCoord() - z); -// } -// -// int wID = mte.getWorld().provider.dimensionId; -// -// sparkList.add(new ThaumSpark(x, y, z, xR, yR, zR, wID)); -// } -// -// private long[] getOutputVoltage(long outputVoltage, int distance, boolean overDriveToggle) { -// long outputVoltageInjectable; -// long outputVoltageConsumption; -// -// if (overDriveToggle) { -// outputVoltageInjectable = outputVoltage; -// outputVoltageConsumption = outputVoltage + (distance * perBlockLoss) + (long) Math.round(overDriveLoss * outputVoltage); -// } else { -// outputVoltageInjectable = outputVoltage - (distance * perBlockLoss); -// outputVoltageConsumption = outputVoltage; -// } -// return new long[]{outputVoltageInjectable, outputVoltageConsumption}; -// } - @Override public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { super.onFirstTick(aBaseMetaTileEntity); if (!aBaseMetaTileEntity.isClientSide()) { teslaSimpleNodeSetAdd(this); + generateTeslaNodeMap(this); } } @@ -266,27 +222,23 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB powerPassToggle = false; } - //Create the teslaNodeMap - if (sortTime == sortTimeMax) { - sortTime = 0; - generateTeslaNodeMap(this); - } - sortTime++; - //Send Power powerTeslaNodeMap(this); - sparkCount++; - if (sparkCount == 60 && !sparkList.isEmpty()) { - sparkCount = 0; - NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); + //Randomly send all the sparks out once every 3 to 5 seconds + sparkCount--; + if (sparkCount == 0){ + sparkCount = 60 + aBaseMetaTileEntity.getWorld().rand.nextInt(41); + if(!sparkList.isEmpty()){ + NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList), + aBaseMetaTileEntity.getWorld().provider.dimensionId, + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + 256); + sparkList.clear(); + } } - sparkList.clear(); } @Override -- cgit From 7fc2f07281062f043aa958fe66efed42c48150a7 Mon Sep 17 00:00:00 2001 From: basdxz Date: Mon, 16 Nov 2020 02:05:51 +0000 Subject: Optimised Tesla Energy Injection -Small refactor in RendererMessage -Updated GT5u --- .../tectech/mechanics/spark/RendererMessage.java | 4 +- .../tectech/mechanics/tesla/ITeslaConnectable.java | 69 +++++++++++----------- 2 files changed, 37 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java b/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java index 58caed7951..4004a8d826 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java +++ b/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java @@ -31,7 +31,7 @@ public class RendererMessage implements IMessage { ObjectInputStream ois = new ObjectInputStream(is); Object data = ois.readObject(); sparkList = (HashSet) data; - } catch (IOException | ClassNotFoundException ex) { + } catch (IOException | ClassNotFoundException ignored) { } } @@ -44,7 +44,7 @@ public class RendererMessage implements IMessage { oos.flush(); InputStream is = new ByteArrayInputStream(baos.toByteArray()); pBuffer.writeBytes(is, baos.toByteArray().length); - } catch (IOException ex) { + } catch (IOException ignore) { } } diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java index 74aa4b8463..d5f215053f 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java @@ -87,56 +87,57 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { } public static long powerTeslaNodeMap(ITeslaConnectable origin) { - //Teslas can only send OR receive - if (origin.isTeslaReadyToReceive()) { - return 0L;//TODO Negative values to indicate charging? - } long remainingAmperes = origin.getTeslaOutputCurrent(); - while (remainingAmperes > 0) { - long startingAmperes = remainingAmperes; - for (Map.Entry Rx : origin.getTeslaNodeMap().entries()) { - if (origin.getTeslaStoredEnergy() < (origin.isOverdriveEnabled() ? origin.getTeslaOutputVoltage() * 2 : origin.getTeslaOutputVoltage())) { - //Return and end the tick if we're out of energy to send - return origin.getTeslaOutputCurrent() - remainingAmperes; - } + boolean canSendPower = !origin.isTeslaReadyToReceive() && remainingAmperes > 0; + if (canSendPower) { + for (Map.Entry Rx : origin.getTeslaNodeMap().entries()) { + //Do we still have power left to send kind of check + if (origin.getTeslaStoredEnergy() < (origin.isOverdriveEnabled() ? origin.getTeslaOutputVoltage() * + 2 : origin.getTeslaOutputVoltage())) break; + //Explicit words for the important fields ITeslaConnectableSimple target = Rx.getValue(); - - //Continue if the target can't receive - if(!target.isTeslaReadyToReceive()) continue; - int distance = Rx.getKey(); + //Can our target receive energy? + if(!target.isTeslaReadyToReceive()) continue; //Calculate the voltage output long outputVoltageInjectable; long outputVoltageConsumption; - if (origin.isOverdriveEnabled()) { outputVoltageInjectable = origin.getTeslaOutputVoltage(); - outputVoltageConsumption = origin.getTeslaOutputVoltage() + (distance * origin.getTeslaEnergyLossPerBlock()) + - (long) Math.round(origin.getTeslaOutputVoltage() * origin.getTeslaOverdriveLossCoefficient()); + outputVoltageConsumption = origin.getTeslaOutputVoltage() + + (distance * origin.getTeslaEnergyLossPerBlock()) + + (long) Math.round(origin.getTeslaOutputVoltage() * + origin.getTeslaOverdriveLossCoefficient()); } else { - outputVoltageInjectable = origin.getTeslaOutputVoltage() - (distance * origin.getTeslaEnergyLossPerBlock()); + outputVoltageInjectable = origin.getTeslaOutputVoltage() - (distance * + origin.getTeslaEnergyLossPerBlock()); outputVoltageConsumption = origin.getTeslaOutputVoltage(); } - //Skip the target if the cost is too high - if (origin.getTeslaStoredEnergy() < outputVoltageConsumption) { - continue; + //Break out of the loop if the cost is too high + //Since the next target will have an even higher cost, just quit now. + if (origin.getTeslaStoredEnergy() < outputVoltageConsumption) break; + + //Now shove in as many packets as will fit~ + while(canSendPower){ + if (target.teslaInjectEnergy(outputVoltageInjectable)) { + origin.teslaDrainEnergy(outputVoltageConsumption); + origin.getSparkList().add(new ThaumSpark(origin.getTeslaPosition(), + target.getTeslaPosition(), origin.getTeslaDimension())); + remainingAmperes--; + //Update the can send power flag each time we send power + canSendPower = (origin.getTeslaStoredEnergy() < outputVoltageConsumption || + remainingAmperes == 0); + } else { + //Breaks out when I can't send anymore power + break; + } } - if (target.teslaInjectEnergy(outputVoltageInjectable)) { - origin.teslaDrainEnergy(outputVoltageConsumption); - origin.getSparkList().add(new ThaumSpark(origin.getTeslaPosition(), target.getTeslaPosition(), origin.getTeslaDimension())); - remainingAmperes--; - } - if (remainingAmperes == 0) { - return origin.getTeslaOutputCurrent(); - } - } - //End the tick after one iteration with no transmissions - if (remainingAmperes == startingAmperes) { - return origin.getTeslaOutputCurrent() - remainingAmperes; + //Break out if we can't send power anymore + if (canSendPower)break; } } return origin.getTeslaOutputCurrent() - remainingAmperes; -- cgit From 0304d1464f38ac75cf338ac470f1cc7228cd6d5c Mon Sep 17 00:00:00 2001 From: Tec Date: Wed, 25 Nov 2020 17:25:05 +0100 Subject: Implement anti-laser target hatches! https://www.livescience.com/anti-laser-wireless-charging.html --- .../multi/base/GT_MetaTileEntity_MultiblockBase_EM.java | 4 ++-- src/main/resources/assets/tectech/lang/en_US.lang | 2 +- src/main/resources/assets/tectech/lang/zh_CN.lang | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java index 9af6d40df7..8abb027d3f 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java @@ -1440,7 +1440,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { euVar = tHatch.maxEUOutput(); if (tHatch.getBaseMetaTileEntity().getStoredEU() <= tHatch.maxEUStore() - euVar && - aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar >> 7, 1), false)) { + aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, 1), false)) { tHatch.setEUVar(tHatch.getBaseMetaTileEntity().getStoredEU() + euVar); } } @@ -1449,7 +1449,7 @@ public abstract class GT_MetaTileEntity_MultiblockBase_EM extends GT_MetaTileEnt if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(tHatch)) { euVar = tHatch.maxEUOutput() * tHatch.Amperes; if (tHatch.getBaseMetaTileEntity().getStoredEU() <= tHatch.maxEUStore() - euVar && - aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar >> 7, tHatch.Amperes), false)) { + aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, tHatch.Amperes), false)) { tHatch.setEUVar(tHatch.getBaseMetaTileEntity().getStoredEU() + euVar); } } diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index dc4af9970b..b81b865b22 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -538,7 +538,7 @@ gt.blockmachines.multimachine.em.transformer.name=Active Transformer gt.blockmachines.multimachine.em.transformer.hint=1 - Energy IO Hatches or High Power Casing gt.blockmachines.multimachine.em.transformer.desc.0=Power substation gt.blockmachines.multimachine.em.transformer.desc.1=All the transformation! -gt.blockmachines.multimachine.em.transformer.desc.2=Only 0.78125% power loss, HAYO! +gt.blockmachines.multimachine.em.transformer.desc.2=Only 0.004% power loss, HAYO! gt.blockmachines.multimachine.tm.microwave.name=Microwave Grinder gt.blockmachines.multimachine.tm.microwave.hint.0=1 - Classic Hatches or Clean Stainless Steel Casing diff --git a/src/main/resources/assets/tectech/lang/zh_CN.lang b/src/main/resources/assets/tectech/lang/zh_CN.lang index 6aae89bb1b..cfa23fb88d 100644 --- a/src/main/resources/assets/tectech/lang/zh_CN.lang +++ b/src/main/resources/assets/tectech/lang/zh_CN.lang @@ -535,7 +535,7 @@ gt.blockmachines.multimachine.em.transformer.name=有源变压器 gt.blockmachines.multimachine.em.transformer.hint=1 - 能源仓、动力仓或超能机械方块 gt.blockmachines.multimachine.em.transformer.desc.0=变电站 gt.blockmachines.multimachine.em.transformer.desc.1=任意电压间的相互转换! -gt.blockmachines.multimachine.em.transformer.desc.2=只有0.78125%的能量损失, HAYO! +gt.blockmachines.multimachine.em.transformer.desc.2=只有0.004%的能量损失, HAYO! gt.blockmachines.multimachine.tm.microwave.name=微波发生仪 gt.blockmachines.multimachine.tm.microwave.hint.0=1 - 基础仓室或洁净不锈钢机械方块 -- cgit From 08e3d560737749ed9e8b9848c5f98303e2a9d190 Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 29 Nov 2020 17:27:45 +0000 Subject: Changed lightning Now a constant once every half second --- .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 2 +- .../single/GT_MetaTileEntity_TeslaCoil.java | 19 +++++++++---------- 2 files changed, 10 insertions(+), 11 deletions(-) (limited to 'src') 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 d1d645acc2..a1912bff32 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 @@ -601,7 +601,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock sparkCount--; if (sparkCount == 0){ IGregTechTileEntity mte = getBaseMetaTileEntity(); - sparkCount = 60 + mte.getWorld().rand.nextInt(41); + sparkCount = 10; if(!sparkList.isEmpty()){ NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList), mte.getWorld().provider.dimensionId, 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 292d363ad9..28668b7634 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 @@ -228,7 +228,7 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB //Randomly send all the sparks out once every 3 to 5 seconds sparkCount--; if (sparkCount == 0){ - sparkCount = 60 + aBaseMetaTileEntity.getWorld().rand.nextInt(41); + sparkCount = 10; if(!sparkList.isEmpty()){ NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList), aBaseMetaTileEntity.getWorld().provider.dimensionId, @@ -243,16 +243,15 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB @Override public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; + if (aBaseMetaTileEntity.isServerSide()) { + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + aBaseMetaTileEntity.openGUI(aPlayer); } - aBaseMetaTileEntity.openGUI(aPlayer); return true; } -- cgit From bd9322e8352b50f5d816bb65d92bfaeea7bd072c Mon Sep 17 00:00:00 2001 From: basdxz Date: Sun, 29 Nov 2020 17:28:00 +0000 Subject: More robust Tesla covers --- .../tectech/mechanics/tesla/TeslaCoverConnection.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java index 99e0d75c1c..385ad8d74e 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java @@ -3,12 +3,17 @@ package com.github.technus.tectech.mechanics.tesla; import com.github.technus.tectech.util.Vec3Impl; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetAdd; +import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetRemove; + public class TeslaCoverConnection implements ITeslaConnectableSimple { private final IGregTechTileEntity IGT; + private final Vec3Impl pos; private final byte teslaReceptionCapabil