Skip to content

Commit 91f452b

Browse files
FE Support (GregTechCEu#1601)
Co-authored-by: screret <[email protected]>
1 parent 33b4779 commit 91f452b

File tree

8 files changed

+87
-19
lines changed

8 files changed

+87
-19
lines changed

src/main/java/com/gregtechceu/gtceu/api/item/component/ElectricStats.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import com.gregtechceu.gtceu.api.capability.GTCapability;
55
import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper;
66
import com.gregtechceu.gtceu.api.capability.IElectricItem;
7+
import com.gregtechceu.gtceu.api.capability.compat.FeCompat;
78
import com.gregtechceu.gtceu.api.item.capability.ElectricItem;
89
import com.gregtechceu.gtceu.api.item.component.forge.IComponentCapability;
10+
import com.gregtechceu.gtceu.config.ConfigHolder;
911
import com.gregtechceu.gtceu.utils.FormattingUtil;
1012

1113
import com.lowdragmc.lowdraglib.utils.LocalizationUtils;
@@ -24,6 +26,7 @@
2426
import net.minecraft.world.level.Level;
2527
import net.minecraftforge.common.capabilities.Capability;
2628
import net.minecraftforge.common.util.LazyOptional;
29+
import net.minecraftforge.energy.IEnergyStorage;
2730

2831
import org.jetbrains.annotations.NotNull;
2932
import org.jetbrains.annotations.Nullable;
@@ -106,6 +109,16 @@ public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotI
106109
transferLimit -= chargedAmount;
107110
if (transferLimit == 0L) break;
108111
}
112+
} else if (ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative) {
113+
var feEnergyItem = GTCapabilityHelper.getForgeEnergyItem(itemInSlot);
114+
if (feEnergyItem != null && feEnergyItem.canReceive() &&
115+
feEnergyItem.getEnergyStored() < feEnergyItem.getMaxEnergyStored()) {
116+
long chargedAmount = chargeForgeEnergyItem(transferLimit, electricItem, feEnergyItem);
117+
if (chargedAmount > 0L) {
118+
transferLimit -= chargedAmount;
119+
if (transferLimit == 0L) break;
120+
}
121+
}
109122
}
110123
}
111124
}
@@ -122,6 +135,16 @@ private static long chargeElectricItem(long maxDischargeAmount, IElectricItem so
122135
return 0L;
123136
}
124137

138+
private static long chargeForgeEnergyItem(long maxDischargeAmount, IElectricItem source, IEnergyStorage target) {
139+
long maxDischarged = source.discharge(maxDischargeAmount, source.getTier(), false, true, true);
140+
long received = FeCompat.insertEu(target, maxDischarged, false);
141+
if (received > 0L) {
142+
source.discharge(received, source.getTier(), false, true, false);
143+
return received;
144+
}
145+
return 0L;
146+
}
147+
125148
private static void setInDischargeMode(ItemStack itemStack, boolean isDischargeMode) {
126149
var tagCompound = itemStack.getOrCreateTag();
127150
if (isDischargeMode) {

src/main/java/com/gregtechceu/gtceu/api/machine/SimpleTieredMachine.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ public ManagedFieldHolder getFieldHolder() {
127127
protected ItemStackTransfer createChargerItemHandler(Object... args) {
128128
var transfer = new ItemStackTransfer();
129129
transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null ||
130-
GTCapabilityHelper.getForgeEnergyItem(item) != null);
130+
(ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative &&
131+
GTCapabilityHelper.getForgeEnergyItem(item) != null));
131132
return transfer;
132133
}
133134

src/main/java/com/gregtechceu/gtceu/common/machine/electric/BatteryBufferMachine.java

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper;
55
import com.gregtechceu.gtceu.api.capability.IControllable;
66
import com.gregtechceu.gtceu.api.capability.IElectricItem;
7+
import com.gregtechceu.gtceu.api.capability.compat.FeCompat;
78
import com.gregtechceu.gtceu.api.gui.GuiTextures;
89
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
910
import com.gregtechceu.gtceu.api.machine.MetaMachine;
1011
import com.gregtechceu.gtceu.api.machine.TieredEnergyMachine;
1112
import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine;
1213
import com.gregtechceu.gtceu.api.machine.feature.IMachineModifyDrops;
1314
import com.gregtechceu.gtceu.api.machine.trait.NotifiableEnergyContainer;
15+
import com.gregtechceu.gtceu.config.ConfigHolder;
1416
import com.gregtechceu.gtceu.utils.GTUtil;
1517

1618
import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup;
@@ -26,6 +28,7 @@
2628
import net.minecraft.core.Direction;
2729
import net.minecraft.world.entity.player.Player;
2830
import net.minecraft.world.item.ItemStack;
31+
import net.minecraftforge.energy.IEnergyStorage;
2932

3033
import lombok.Getter;
3134
import lombok.Setter;
@@ -90,7 +93,9 @@ public int getSlotLimit(int slot) {
9093
return 1;
9194
}
9295
};
93-
itemTransfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null);
96+
itemTransfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null ||
97+
(ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative &&
98+
GTCapabilityHelper.getForgeEnergyItem(item) != null));
9499
return itemTransfer;
95100
}
96101

@@ -146,15 +151,22 @@ public Widget createUIWidget() {
146151
// ****** Battery Logic ******//
147152
//////////////////////////////////////
148153

149-
private List<IElectricItem> getNonFullBatteries() {
150-
List<IElectricItem> batteries = new ArrayList<>();
154+
private List<Object> getNonFullBatteries() {
155+
List<Object> batteries = new ArrayList<>();
151156
for (int i = 0; i < batteryInventory.getSlots(); i++) {
152157
var batteryStack = batteryInventory.getStackInSlot(i);
153158
var electricItem = GTCapabilityHelper.getElectricItem(batteryStack);
154159
if (electricItem != null) {
155160
if (electricItem.getCharge() < electricItem.getMaxCharge()) {
156161
batteries.add(electricItem);
157162
}
163+
} else if (ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative) {
164+
IEnergyStorage energyStorage = GTCapabilityHelper.getForgeEnergyItem(batteryStack);
165+
if (energyStorage != null) {
166+
if (energyStorage.getEnergyStored() < energyStorage.getMaxEnergyStored()) {
167+
batteries.add(energyStorage);
168+
}
169+
}
158170
}
159171
}
160172
return batteries;
@@ -174,13 +186,18 @@ private List<IElectricItem> getNonEmptyBatteries() {
174186
return batteries;
175187
}
176188

177-
private List<IElectricItem> getAllBatteries() {
178-
List<IElectricItem> batteries = new ArrayList<>();
189+
private List<Object> getAllBatteries() {
190+
List<Object> batteries = new ArrayList<>();
179191
for (int i = 0; i < batteryInventory.getSlots(); i++) {
180192
var batteryStack = batteryInventory.getStackInSlot(i);
181193
var electricItem = GTCapabilityHelper.getElectricItem(batteryStack);
182194
if (electricItem != null) {
183195
batteries.add(electricItem);
196+
} else if (ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative) {
197+
IEnergyStorage energyStorage = GTCapabilityHelper.getForgeEnergyItem(batteryStack);
198+
if (energyStorage != null) {
199+
batteries.add(energyStorage);
200+
}
184201
}
185202
}
186203
return batteries;
@@ -277,10 +294,16 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long
277294
long distributed = energy / batteries.size();
278295

279296
boolean changed = false;
280-
for (var battery : batteries) {
281-
var charged = battery.charge(
282-
Math.min(distributed, GTValues.V[battery.getTier()] * AMPS_PER_BATTERY), getTier(), true,
283-
false);
297+
for (Object item : batteries) {
298+
long charged = 0;
299+
if (item instanceof IElectricItem electricItem) {
300+
charged = electricItem.charge(
301+
Math.min(distributed, GTValues.V[electricItem.getTier()] * AMPS_PER_BATTERY), getTier(),
302+
true, false);
303+
} else if (item instanceof IEnergyStorage energyStorage) {
304+
charged = FeCompat.insertEu(energyStorage,
305+
Math.min(distributed, GTValues.V[getTier()] * AMPS_PER_BATTERY), false);
306+
}
284307
if (charged > 0) {
285308
changed = true;
286309
}
@@ -302,17 +325,25 @@ public long acceptEnergyFromNetwork(@Nullable Direction side, long voltage, long
302325
@Override
303326
public long getEnergyCapacity() {
304327
long energyCapacity = 0L;
305-
for (IElectricItem battery : getAllBatteries()) {
306-
energyCapacity += battery.getMaxCharge();
328+
for (Object battery : getAllBatteries()) {
329+
if (battery instanceof IElectricItem electricItem) {
330+
energyCapacity += electricItem.getMaxCharge();
331+
} else if (battery instanceof IEnergyStorage energyStorage) {
332+
energyCapacity += FeCompat.toEu(energyStorage.getMaxEnergyStored(), FeCompat.ratio(false));
333+
}
307334
}
308335
return energyCapacity;
309336
}
310337

311338
@Override
312339
public long getEnergyStored() {
313340
long energyStored = 0L;
314-
for (IElectricItem battery : getAllBatteries()) {
315-
energyStored += battery.getCharge();
341+
for (Object battery : getAllBatteries()) {
342+
if (battery instanceof IElectricItem electricItem) {
343+
energyStored += electricItem.getCharge();
344+
} else if (battery instanceof IEnergyStorage energyStorage) {
345+
energyStored += FeCompat.toEu(energyStorage.getEnergyStored(), FeCompat.ratio(false));
346+
}
316347
}
317348
return energyStored;
318349
}

src/main/java/com/gregtechceu/gtceu/common/machine/electric/BlockBreakerMachine.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine;
1717
import com.gregtechceu.gtceu.api.machine.feature.IMachineModifyDrops;
1818
import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler;
19+
import com.gregtechceu.gtceu.config.ConfigHolder;
1920
import com.gregtechceu.gtceu.data.lang.LangHandler;
2021

2122
import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture;
@@ -133,7 +134,9 @@ public ManagedFieldHolder getFieldHolder() {
133134

134135
protected ItemStackTransfer createChargerItemHandler() {
135136
var transfer = new ItemStackTransfer();
136-
transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null);
137+
transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null ||
138+
(ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative &&
139+
GTCapabilityHelper.getForgeEnergyItem(item) != null));
137140
return transfer;
138141
}
139142

src/main/java/com/gregtechceu/gtceu/common/machine/electric/ChargerMachine.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ protected NotifiableEnergyContainer createEnergyContainer(Object... args) {
9797
protected ItemStackTransfer createChargerInventory(Object... args) {
9898
var itemTransfer = new ItemStackTransfer(this.inventorySize);
9999
itemTransfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null ||
100-
GTCapabilityHelper.getForgeEnergyItem(item) != null);
100+
(ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative &&
101+
GTCapabilityHelper.getForgeEnergyItem(item) != null));
101102
return itemTransfer;
102103
}
103104

src/main/java/com/gregtechceu/gtceu/common/machine/electric/FisherMachine.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine;
1717
import com.gregtechceu.gtceu.api.machine.feature.IMachineModifyDrops;
1818
import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler;
19+
import com.gregtechceu.gtceu.config.ConfigHolder;
1920
import com.gregtechceu.gtceu.data.lang.LangHandler;
2021

2122
import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture;
@@ -145,7 +146,9 @@ public FisherMachine(IMachineBlockEntity holder, int tier, Object... ignoredArgs
145146

146147
protected ItemStackTransfer createChargerItemHandler() {
147148
var transfer = new ItemStackTransfer();
148-
transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null);
149+
transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null ||
150+
(ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative &&
151+
GTCapabilityHelper.getForgeEnergyItem(item) != null));
149152
return transfer;
150153
}
151154

src/main/java/com/gregtechceu/gtceu/common/machine/electric/ItemCollectorMachine.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.gregtechceu.gtceu.api.machine.feature.IMachineModifyDrops;
2020
import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler;
2121
import com.gregtechceu.gtceu.common.data.GTItems;
22+
import com.gregtechceu.gtceu.config.ConfigHolder;
2223
import com.gregtechceu.gtceu.data.lang.LangHandler;
2324

2425
import com.lowdragmc.lowdraglib.gui.texture.ResourceTexture;
@@ -149,7 +150,9 @@ public ItemCollectorMachine(IMachineBlockEntity holder, int tier, Object... igno
149150

150151
protected ItemStackTransfer createChargerItemHandler() {
151152
var transfer = new ItemStackTransfer();
152-
transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null);
153+
transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null ||
154+
(ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative &&
155+
GTCapabilityHelper.getForgeEnergyItem(item) != null));
153156
return transfer;
154157
}
155158

src/main/java/com/gregtechceu/gtceu/common/machine/electric/MinerMachine.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.gregtechceu.gtceu.common.data.GTMachines;
2020
import com.gregtechceu.gtceu.common.item.PortableScannerBehavior;
2121
import com.gregtechceu.gtceu.common.machine.trait.miner.MinerLogic;
22+
import com.gregtechceu.gtceu.config.ConfigHolder;
2223
import com.gregtechceu.gtceu.data.lang.LangHandler;
2324

2425
import com.lowdragmc.lowdraglib.gui.widget.ComponentPanelWidget;
@@ -98,7 +99,9 @@ public ManagedFieldHolder getFieldHolder() {
9899

99100
protected ItemStackTransfer createChargerItemHandler(Object... args) {
100101
var transfer = new ItemStackTransfer();
101-
transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null);
102+
transfer.setFilter(item -> GTCapabilityHelper.getElectricItem(item) != null ||
103+
(ConfigHolder.INSTANCE.compat.energy.nativeEUToPlatformNative &&
104+
GTCapabilityHelper.getForgeEnergyItem(item) != null));
102105
return transfer;
103106
}
104107

0 commit comments

Comments
 (0)