aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorHarry <harryyunull@gmail.com>2023-07-30 07:11:16 -0400
committerGitHub <noreply@github.com>2023-07-30 13:11:16 +0200
commit9812da7aabe91ce96d9ece08f792912aa7d1882c (patch)
tree8490e5dfd9757953dc099fb9d2ed73aa8cbc4822 /src/main/java
parentad631de4be903353b8e64d8811c705d4aea58569 (diff)
downloadGT5-Unofficial-9812da7aabe91ce96d9ece08f792912aa7d1882c.tar.gz
GT5-Unofficial-9812da7aabe91ce96d9ece08f792912aa7d1882c.tar.bz2
GT5-Unofficial-9812da7aabe91ce96d9ece08f792912aa7d1882c.zip
Fix wireless energy voiding (#2192)
* Fix wireless energy voiding * avoid bigint
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java49
1 files changed, 24 insertions, 25 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java
index 9a4f8d6b56..d156079e88 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java
@@ -2,6 +2,7 @@ package gregtech.api.metatileentity.implementations;
import static gregtech.api.enums.GT_Values.AuthorColen;
import static gregtech.api.enums.GT_Values.V;
+import static java.lang.Long.min;
import java.math.BigInteger;
@@ -125,44 +126,42 @@ public class GT_MetaTileEntity_Wireless_Hatch extends GT_MetaTileEntity_Hatch_En
}
@Override
- public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
-
- super.onPreTick(aBaseMetaTileEntity, aTick);
+ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {
+ super.onFirstTick(aBaseMetaTileEntity);
- if (aBaseMetaTileEntity.isServerSide()) {
+ // UUID and username of the owner.
+ owner_uuid = aBaseMetaTileEntity.getOwnerUuid()
+ .toString();
+ owner_name = aBaseMetaTileEntity.getOwnerName();
- // On first tick find the player name and attempt to add them to the map.
- if (aTick == 1) {
+ strongCheckOrAddUser(owner_uuid, owner_name);
- // UUID and username of the owner.
- owner_uuid = aBaseMetaTileEntity.getOwnerUuid()
- .toString();
- owner_name = aBaseMetaTileEntity.getOwnerName();
+ tryFetchingEnergy();
+ }
- strongCheckOrAddUser(owner_uuid, owner_name);
+ @Override
+ public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
- if (addEUToGlobalEnergyMap(owner_uuid, eu_transferred_per_operation.negate()))
- setEUVar(eu_transferred_per_operation_long);
- }
+ super.onPreTick(aBaseMetaTileEntity, aTick);
+ if (aBaseMetaTileEntity.isServerSide()) {
// This is set up in a way to be as optimised as possible. If a user has a relatively plentiful energy
// network
// it should make no difference to them. Minimising the number of operations on BigInteger is essential.
// Every ticks_between_energy_addition add eu_transferred_per_operation to internal EU storage from network.
if (aTick % ticks_between_energy_addition == 0L) {
- long total_eu = getBaseMetaTileEntity().getStoredEU();
-
- // Can the machine store the EU being added?
- long new_eu_storage = total_eu + eu_transferred_per_operation_long;
- if (new_eu_storage <= maxEUStore()) {
-
- // Attempt to remove energy from the network and add it to the internal buffer of the machine.
- if (addEUToGlobalEnergyMap(owner_uuid, eu_transferred_per_operation.negate())) {
- setEUVar(new_eu_storage);
- }
- }
+ tryFetchingEnergy();
}
}
}
+
+ private void tryFetchingEnergy() {
+ long currentEU = getBaseMetaTileEntity().getStoredEU();
+ long maxEU = maxEUStore();
+ long euToTransfer = min(maxEU - currentEU, eu_transferred_per_operation_long);
+ if (euToTransfer <= 0) return; // nothing to transfer
+ if (!addEUToGlobalEnergyMap(owner_uuid, -euToTransfer)) return;
+ setEUVar(currentEU + euToTransfer);
+ }
}