diff options
author | Harry <harryyunull@gmail.com> | 2023-07-30 07:11:16 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-30 13:11:16 +0200 |
commit | 9812da7aabe91ce96d9ece08f792912aa7d1882c (patch) | |
tree | 8490e5dfd9757953dc099fb9d2ed73aa8cbc4822 /src/main/java | |
parent | ad631de4be903353b8e64d8811c705d4aea58569 (diff) | |
download | GT5-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.java | 49 |
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); + } } |