22
33import java .util .function .Consumer ;
44
5+ import net .minecraft .network .protocol .game .ClientboundSetCarriedItemPacket ;
56import net .minecraft .server .level .ServerPlayer ;
67import net .minecraft .world .entity .player .Player ;
78import net .minecraft .world .item .ItemStack ;
89
10+ import de .mari_023 .ae2wtlib .networking .ClientNetworkManager ;
911import de .mari_023 .ae2wtlib .networking .ServerNetworkManager ;
12+ import de .mari_023 .ae2wtlib .networking .c2s .PickBlockPacket ;
1013import de .mari_023 .ae2wtlib .networking .s2c .UpdateRestockPacket ;
1114import de .mari_023 .ae2wtlib .terminal .ItemWT ;
1215import de .mari_023 .ae2wtlib .wct .CraftingTerminalHandler ;
1316import de .mari_023 .ae2wtlib .wct .magnet_card .MagnetHandler ;
1417import de .mari_023 .ae2wtlib .wct .magnet_card .MagnetHost ;
15- import de .mari_023 .ae2wtlib .wct .magnet_card .MagnetMode ;
1618
1719import appeng .api .config .Actionable ;
1820import appeng .api .stacks .AEItemKey ;
@@ -33,7 +35,7 @@ public static void restock(ServerPlayer player, ItemStack item, int count, Consu
3335 if (item .isEmpty ())
3436 return ;
3537 CraftingTerminalHandler cTHandler = CraftingTerminalHandler .getCraftingTerminalHandler (player );
36- if (!cTHandler .inRange () || !ItemWT .getBoolean (cTHandler .getCraftingTerminal (), "restock" )
38+ if (!cTHandler .inRange () || !ItemWT .getBoolean (cTHandler .getCraftingTerminal (), AE2wtlibTags . RESTOCK )
3739 || cTHandler .getTargetGrid () == null || cTHandler .getTargetGrid ().getStorageService () == null )
3840 return ;
3941 int toAdd = Math .max (item .getMaxStackSize () / 2 , 1 ) - count ;
@@ -70,7 +72,7 @@ public static boolean insertStackInME(ItemStack stack, Player player) {
7072 CraftingTerminalHandler cTHandler = CraftingTerminalHandler .getCraftingTerminalHandler (player );
7173 ItemStack terminal = cTHandler .getCraftingTerminal ();
7274
73- if (!(MagnetHandler .getMagnetSettings (terminal ).magnetMode == MagnetMode . PICKUP_ME ))
75+ if (!(MagnetHandler .getMagnetMode (terminal ).pickupToME () ))
7476 return false ;
7577 if (!cTHandler .inRange ())
7678 return false ;
@@ -93,4 +95,53 @@ public static boolean insertStackInME(ItemStack stack, Player player) {
9395 stack .setCount (leftover );
9496 return leftover == 0 ;
9597 }
98+
99+ public static void pickBlock (ItemStack stack ) {
100+ ClientNetworkManager .sendToServer (new PickBlockPacket (stack ));
101+ }
102+
103+ public static void pickBlock (ServerPlayer player , ItemStack stack ) {
104+ var cTHandler = CraftingTerminalHandler .getCraftingTerminalHandler (player );
105+ ItemStack terminal = cTHandler .getCraftingTerminal ();
106+ if (!ItemWT .getBoolean (terminal , AE2wtlibTags .PICK_BLOCK ))
107+ return ;
108+
109+ if (cTHandler .getTargetGrid () == null )
110+ return ;
111+ if (cTHandler .getTargetGrid ().getStorageService () == null )
112+ return ;
113+ var networkInventory = cTHandler .getTargetGrid ().getStorageService ().getInventory ();
114+ var playerSource = new PlayerSource (player , null );
115+
116+ var inventory = player .getInventory ();
117+ int targetSlot = inventory .getSuitableHotbarSlot ();
118+ var toReplace = inventory .getItem (targetSlot );
119+
120+ var insert = networkInventory .insert (AEItemKey .of (toReplace ), toReplace .getCount (), Actionable .SIMULATE ,
121+ playerSource );
122+ if (insert < toReplace .getCount ())
123+ return ;
124+ int targetAmount = Math .max (1 , stack .getMaxStackSize () / 2 );
125+ var extracted = networkInventory .extract (AEItemKey .of (stack ), targetAmount , Actionable .SIMULATE , playerSource );
126+ if (extracted == 0 )
127+ return ;
128+
129+ insert = networkInventory .insert (AEItemKey .of (toReplace ), toReplace .getCount (), Actionable .MODULATE ,
130+ playerSource );
131+ if (insert < toReplace .getCount ()) {
132+ toReplace .setCount (toReplace .getCount () - (int ) insert );
133+ inventory .setItem (targetSlot , toReplace );
134+ return ;
135+ }
136+
137+ extracted = networkInventory .extract (AEItemKey .of (stack ), targetAmount , Actionable .MODULATE , playerSource );
138+ if (extracted == 0 ) {
139+ inventory .setItem (targetSlot , ItemStack .EMPTY );
140+ return ;
141+ }
142+ stack .setCount ((int ) extracted );
143+ inventory .setItem (targetSlot , stack );
144+ inventory .selected = targetSlot ;
145+ player .connection .send (new ClientboundSetCarriedItemPacket (player .getInventory ().selected ));
146+ }
96147}
0 commit comments