Skip to content

Commit f26d90a

Browse files
committed
Remove capturing lambdas from inventory frequency eject handling
1 parent 763f8a1 commit f26d90a

File tree

1 file changed

+82
-32
lines changed

1 file changed

+82
-32
lines changed

src/main/java/mekanism/common/content/entangloporter/InventoryFrequency.java

Lines changed: 82 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -301,51 +301,101 @@ private static <TYPE> void accept(Consumer<TYPE> consumer, TileEntityQuantumEnta
301301
private void addEnergyTransferHandler(Map<TransmissionType, Consumer<?>> typesToEject, List<Runnable> transferHandlers, int expected) {
302302
FloatingLong toSend = storedEnergy.extract(storedEnergy.getMaxEnergy(), Action.SIMULATE, AutomationType.INTERNAL);
303303
if (!toSend.isZero()) {
304-
EnergyAcceptorTarget target = new EnergyAcceptorTarget(expected);
305-
Consumer<IStrictEnergyHandler> capabilityHandler = target::addHandler;
306-
typesToEject.put(TransmissionType.ENERGY, capabilityHandler);
307-
transferHandlers.add(() -> {
308-
if (target.getHandlerCount() > 0) {
309-
storedEnergy.extract(EmitUtils.sendToAcceptors(target, toSend), Action.EXECUTE, AutomationType.INTERNAL);
310-
}
311-
});
304+
SendingEnergyAcceptorTarget target = new SendingEnergyAcceptorTarget(expected, storedEnergy, toSend);
305+
typesToEject.put(TransmissionType.ENERGY, target);
306+
transferHandlers.add(target);
312307
}
313308
}
314309

315310
private void addFluidTransferHandler(Map<TransmissionType, Consumer<?>> typesToEject, List<Runnable> transferHandlers, int expected) {
316311
FluidStack fluidToSend = storedFluid.extract(storedFluid.getCapacity(), Action.SIMULATE, AutomationType.INTERNAL);
317312
if (!fluidToSend.isEmpty()) {
318-
FluidHandlerTarget target = new FluidHandlerTarget(fluidToSend, expected);
319-
Consumer<IFluidHandler> capabilityHandler = handler -> {
320-
if (FluidUtils.canFill(handler, fluidToSend)) {
321-
target.addHandler(handler);
322-
}
323-
};
324-
typesToEject.put(TransmissionType.FLUID, capabilityHandler);
325-
transferHandlers.add(() -> {
326-
if (target.getHandlerCount() > 0) {
327-
storedFluid.extract(EmitUtils.sendToAcceptors(target, fluidToSend.getAmount(), fluidToSend), Action.EXECUTE, AutomationType.INTERNAL);
328-
}
329-
});
313+
SendingFluidHandlerTarget target = new SendingFluidHandlerTarget(fluidToSend, expected, storedFluid);
314+
typesToEject.put(TransmissionType.FLUID, target);
315+
transferHandlers.add(target);
330316
}
331317
}
332318

333319
private <CHEMICAL extends Chemical<CHEMICAL>, STACK extends ChemicalStack<CHEMICAL>> void addChemicalTransferHandler(TransmissionType chemicalType,
334320
IChemicalTank<CHEMICAL, STACK> tank, Map<TransmissionType, Consumer<?>> typesToEject, List<Runnable> transferHandlers, int expected) {
335321
STACK toSend = tank.extract(tank.getCapacity(), Action.SIMULATE, AutomationType.INTERNAL);
336322
if (!toSend.isEmpty()) {
337-
ChemicalHandlerTarget<CHEMICAL, STACK, IChemicalHandler<CHEMICAL, STACK>> target = new ChemicalHandlerTarget<>(toSend, expected);
338-
Consumer<IChemicalHandler<CHEMICAL, STACK>> capabilityHandler = handler -> {
339-
if (ChemicalUtil.canInsert(handler, toSend)) {
340-
target.addHandler(handler);
341-
}
342-
};
343-
typesToEject.put(chemicalType, capabilityHandler);
344-
transferHandlers.add(() -> {
345-
if (target.getHandlerCount() > 0) {
346-
tank.extract(EmitUtils.sendToAcceptors(target, toSend.getAmount(), toSend), Action.EXECUTE, AutomationType.INTERNAL);
347-
}
348-
});
323+
SendingChemicalHandlerTarget<?, ?, ?> target = new SendingChemicalHandlerTarget<>(toSend, expected, tank);
324+
typesToEject.put(chemicalType, target);
325+
transferHandlers.add(target);
326+
}
327+
}
328+
329+
private static class SendingEnergyAcceptorTarget extends EnergyAcceptorTarget implements Runnable, Consumer<IStrictEnergyHandler> {
330+
331+
private final IEnergyContainer storedEnergy;
332+
private final FloatingLong toSend;
333+
334+
public SendingEnergyAcceptorTarget(int expectedSize, IEnergyContainer storedEnergy, FloatingLong toSend) {
335+
super(expectedSize);
336+
this.storedEnergy = storedEnergy;
337+
this.toSend = toSend;
338+
}
339+
340+
@Override
341+
public void run() {
342+
if (getHandlerCount() > 0) {
343+
storedEnergy.extract(EmitUtils.sendToAcceptors(this, toSend), Action.EXECUTE, AutomationType.INTERNAL);
344+
}
345+
}
346+
347+
@Override
348+
public void accept(IStrictEnergyHandler handler) {
349+
addHandler(handler);
350+
}
351+
}
352+
353+
private static class SendingFluidHandlerTarget extends FluidHandlerTarget implements Runnable, Consumer<IFluidHandler> {
354+
355+
private final IExtendedFluidTank storedFluid;
356+
357+
public SendingFluidHandlerTarget(@NotNull FluidStack toSend, int expectedSize, IExtendedFluidTank storedFluid) {
358+
super(toSend, expectedSize);
359+
this.storedFluid = storedFluid;
360+
}
361+
362+
@Override
363+
public void run() {
364+
if (getHandlerCount() > 0) {
365+
storedFluid.extract(EmitUtils.sendToAcceptors(this, extra.getAmount(), extra), Action.EXECUTE, AutomationType.INTERNAL);
366+
}
367+
}
368+
369+
@Override
370+
public void accept(IFluidHandler handler) {
371+
if (FluidUtils.canFill(handler, extra)) {
372+
addHandler(handler);
373+
}
374+
}
375+
}
376+
377+
private static class SendingChemicalHandlerTarget<CHEMICAL extends Chemical<CHEMICAL>, STACK extends ChemicalStack<CHEMICAL>, HANDLER extends IChemicalHandler<CHEMICAL, STACK>>
378+
extends ChemicalHandlerTarget<CHEMICAL, STACK, HANDLER> implements Runnable, Consumer<HANDLER> {
379+
380+
private final IChemicalTank<CHEMICAL, STACK> storedChemical;
381+
382+
public SendingChemicalHandlerTarget(@NotNull STACK toSend, int expectedSize, IChemicalTank<CHEMICAL, STACK> storedChemical) {
383+
super(toSend, expectedSize);
384+
this.storedChemical = storedChemical;
385+
}
386+
387+
@Override
388+
public void run() {
389+
if (getHandlerCount() > 0) {
390+
storedChemical.extract(EmitUtils.sendToAcceptors(this, extra.getAmount(), extra), Action.EXECUTE, AutomationType.INTERNAL);
391+
}
392+
}
393+
394+
@Override
395+
public void accept(HANDLER handler) {
396+
if (ChemicalUtil.canInsert(handler, extra)) {
397+
addHandler(handler);
398+
}
349399
}
350400
}
351401
}

0 commit comments

Comments
 (0)