@@ -84,91 +84,101 @@ public IMessage onMessage(final CpacketMEMonitorableAction message, final Messag
8484 source = new PlayerSource (player , cbt .getPart ());
8585 } else return null ;
8686
87- boolean drain = false ;
8887 final var h = player .inventory .getItemStack ();
8988 if (!h .isEmpty ()) {
9089 final ItemStack ch = h .copy ();
9190 ch .setCount (1 );
9291 if (message .type == FLUID ) {
93- final IFluidHandlerItem fh = FluidUtil .getFluidHandler (ch );
94- if (fh == null ) return null ;
95- final var allFluid = fh .drain (Integer .MAX_VALUE , false );
96- FluidStack fluid = null ;
97- if (!message .obj .isEmpty ()) {
98- fluid = FluidStack .loadFluidStackFromNBT (message .obj );
99- if (fluid != null ) {
100- if (allFluid != null && allFluid .amount > 0 ) {
101- if (!allFluid .isFluidEqual (fluid )) drain = true ;
102- }
103- } else drain = true ;
104- } else drain = true ;
105- final var fluidStorage = grid .getInventory (Util .getFluidChannel ());
106- final AEFluidStack allAEFluid ;
107- if (drain ) {
108- allAEFluid = AEFluidStack .fromFluidStack (allFluid );
109- if (allAEFluid == null ) return null ;
110- final var a = fluidStorage .injectItems (allAEFluid , Actionable .SIMULATE , source );
111- final var size = allAEFluid .getStackSize () - (a == null ? 0 : a .getStackSize ());
112- fluidStorage .injectItems (allAEFluid .setStackSize (size ), Actionable .MODULATE , source );
113- fh .drain ((int ) size , true );
114- } else {
115- allAEFluid = AEFluidStack .fromFluidStack (fluid );
116- final var a = fluidStorage .extractItems (allAEFluid , Actionable .SIMULATE , source );
117- if (a == null ) return null ;
118- final var size = fh .fill (a .getFluidStack (), false );
119- fluidStorage .extractItems (allAEFluid .setStackSize (size ), Actionable .MODULATE , source );
120- fh .fill (a .getFluidStack (), true );
121- }
122- if (h .getCount () > 1 ) {
123- h .shrink (1 );
124- final var cc = fh .getContainer ();
125- cc .setCount (1 );
126- player .inventory .placeItemBackInInventory (player .world , cc );
127- } else player .inventory .setItemStack (fh .getContainer ());
128- updateHeld (player );
92+ player .server .addScheduledTask (() -> fluidWork (message , ch , grid , source , h , player ));
12993 } else if (ModAndClassUtil .GAS && message .type == GAS && h .getItem () instanceof final IGasItem ig ) {
130- mek$Work (message , ig , ch , grid , source , h , player );
131- }
132- } else if (message .type == FLUID_OPERATE ) {
133- if (bucket == null ) {
134- bucket = AEItemStack .fromItemStack (new ItemStack (Items .BUCKET ));
94+ player .server .addScheduledTask (() -> gasWork (message , ig , ch , grid , source , h , player ));
13595 }
136- final FluidStack fluid ;
137- if (!message .obj .isEmpty ()) {
138- final var i = new ItemStack (message .obj );
139- fluid = FakeItemRegister .getStack (i );
140- if (fluid == null ) return null ;
141- fluid .amount = 1000 ;
142- } else return null ;
143- final boolean shift = message .obj .getBoolean ("shift" );
144- final var itemStorage = grid .getInventory (Util .getItemChannel ());
145- final var fluidStorage = grid .getInventory (Util .getFluidChannel ());
146- final var b = itemStorage .extractItems (bucket , Actionable .SIMULATE , source );
147- if (b == null ) return null ;
148- final var aeFluid = fluidStorage .extractItems (AEFluidStack .fromFluidStack (fluid ), Actionable .SIMULATE , source );
149- if (aeFluid == null || aeFluid .getStackSize () < 1000 ) return null ;
150- final IFluidHandlerItem fh = FluidUtil .getFluidHandler (b .createItemStack ());
151- if (fh == null ) return null ;
152- final var s = fh .fill (aeFluid .getFluidStack (), true );
153- if (s != 1000 ) return null ;
154- final var out = fh .getContainer ();
155- if (shift ) {
156- final var slot = player .inventory .getFirstEmptyStack ();
157- if (slot == -1 ) return null ;
158- player .inventory .setInventorySlotContents (slot , out );
159- } else {
160- player .inventory .setItemStack (out );
161- updateHeld (player );
96+ } else {
97+ if (message .type == FLUID_OPERATE ) {
98+ player .server .addScheduledTask (() -> fluidOperateWork (message , grid , source , player ));
16299 }
163- itemStorage .extractItems (bucket , Actionable .MODULATE , source );
164- fluidStorage .extractItems (aeFluid , Actionable .MODULATE , source );
165100 }
166101 return null ;
167102 }
168103
104+ private static void fluidOperateWork (final CpacketMEMonitorableAction message , final IStorageGrid grid , final IActionSource source , final EntityPlayerMP player ) {
105+ if (bucket == null ) {
106+ bucket = AEItemStack .fromItemStack (new ItemStack (Items .BUCKET ));
107+ }
108+ final FluidStack fluid ;
109+ if (!message .obj .isEmpty ()) {
110+ final var i = new ItemStack (message .obj );
111+ fluid = FakeItemRegister .getStack (i );
112+ if (fluid == null ) return ;
113+ fluid .amount = 1000 ;
114+ } else return ;
115+ final boolean shift = message .obj .getBoolean ("shift" );
116+ final var itemStorage = grid .getInventory (Util .getItemChannel ());
117+ final var fluidStorage = grid .getInventory (Util .getFluidChannel ());
118+ final var b = itemStorage .extractItems (bucket , Actionable .SIMULATE , source );
119+ if (b == null ) return ;
120+ final var aeFluid = fluidStorage .extractItems (AEFluidStack .fromFluidStack (fluid ), Actionable .SIMULATE , source );
121+ if (aeFluid == null || aeFluid .getStackSize () < 1000 ) return ;
122+ final IFluidHandlerItem fh = FluidUtil .getFluidHandler (b .createItemStack ());
123+ if (fh == null ) return ;
124+ final var s = fh .fill (aeFluid .getFluidStack (), true );
125+ if (s != 1000 ) return ;
126+ final var out = fh .getContainer ();
127+ if (shift ) {
128+ final var slot = player .inventory .getFirstEmptyStack ();
129+ if (slot == -1 ) return ;
130+ player .inventory .setInventorySlotContents (slot , out );
131+ } else {
132+ player .inventory .setItemStack (out );
133+ updateHeld (player );
134+ }
135+ itemStorage .extractItems (bucket , Actionable .MODULATE , source );
136+ fluidStorage .extractItems (aeFluid , Actionable .MODULATE , source );
137+ }
138+
139+ private static void fluidWork (final CpacketMEMonitorableAction message , final ItemStack ch , final IStorageGrid grid , final IActionSource source , final ItemStack h , final EntityPlayerMP player ) {
140+ boolean drain = false ;
141+ final IFluidHandlerItem fh = FluidUtil .getFluidHandler (ch );
142+ if (fh == null ) return ;
143+ final var allFluid = fh .drain (Integer .MAX_VALUE , false );
144+ FluidStack fluid = null ;
145+ if (!message .obj .isEmpty ()) {
146+ fluid = FluidStack .loadFluidStackFromNBT (message .obj );
147+ if (fluid != null ) {
148+ if (allFluid != null && allFluid .amount > 0 ) {
149+ if (!allFluid .isFluidEqual (fluid )) drain = true ;
150+ }
151+ } else drain = true ;
152+ } else drain = true ;
153+ final var fluidStorage = grid .getInventory (Util .getFluidChannel ());
154+ final AEFluidStack allAEFluid ;
155+ if (drain ) {
156+ allAEFluid = AEFluidStack .fromFluidStack (allFluid );
157+ if (allAEFluid == null ) return ;
158+ final var a = fluidStorage .injectItems (allAEFluid , Actionable .SIMULATE , source );
159+ final var size = allAEFluid .getStackSize () - (a == null ? 0 : a .getStackSize ());
160+ fluidStorage .injectItems (allAEFluid .setStackSize (size ), Actionable .MODULATE , source );
161+ fh .drain ((int ) size , true );
162+ } else {
163+ allAEFluid = AEFluidStack .fromFluidStack (fluid );
164+ final var a = fluidStorage .extractItems (allAEFluid , Actionable .SIMULATE , source );
165+ if (a == null ) return ;
166+ final var size = fh .fill (a .getFluidStack (), false );
167+ fluidStorage .extractItems (allAEFluid .setStackSize (size ), Actionable .MODULATE , source );
168+ fh .fill (a .getFluidStack (), true );
169+ }
170+ if (h .getCount () > 1 ) {
171+ h .shrink (1 );
172+ final var cc = fh .getContainer ();
173+ cc .setCount (1 );
174+ player .inventory .placeItemBackInInventory (player .world , cc );
175+ } else player .inventory .setItemStack (fh .getContainer ());
176+ updateHeld (player );
177+ }
178+
169179 @ Unique
170180 @ Optional .Method (modid = "mekeng" )
171- private void mek$Work (final CpacketMEMonitorableAction message , final IGasItem ig , final ItemStack ch , final IStorageGrid grid , final IActionSource source , final ItemStack h , final EntityPlayerMP player ) {
181+ private static void gasWork (final CpacketMEMonitorableAction message , final IGasItem ig , final ItemStack ch , final IStorageGrid grid , final IActionSource source , final ItemStack h , final EntityPlayerMP player ) {
172182 boolean drain = false ;
173183 final var allGas = ig .getGas (ch );
174184 final var allAmount = allGas == null ? 0 : allGas .amount ;
@@ -208,7 +218,7 @@ public IMessage onMessage(final CpacketMEMonitorableAction message, final Messag
208218 updateHeld (player );
209219 }
210220
211- private void updateHeld (final EntityPlayerMP p ) {
221+ private static void updateHeld (final EntityPlayerMP p ) {
212222 if (Platform .isServer ()) {
213223 try {
214224 NetworkHandler .instance ().sendTo (new PacketInventoryAction (InventoryAction .UPDATE_HAND , 0 , AEItemStack .fromItemStack (p .inventory .getItemStack ())), p );
0 commit comments