@@ -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