22
33import appeng .api .crafting .IPatternDetails ;
44import appeng .api .inventories .InternalInventory ;
5+ import appeng .api .networking .IGrid ;
56import appeng .api .networking .IGridNode ;
67import appeng .api .networking .crafting .CraftingJobStatus ;
78import appeng .api .networking .crafting .ICraftingCPU ;
8- import appeng .api .networking .crafting .ICraftingProvider ;
99import appeng .api .networking .crafting .ICraftingService ;
1010import appeng .api .networking .storage .IStorageService ;
1111import appeng .api .stacks .*;
1212import appeng .api .storage .AEKeyFilter ;
1313import appeng .api .storage .IStorageProvider ;
1414import appeng .api .storage .MEStorage ;
1515import appeng .blockentity .storage .DriveBlockEntity ;
16+ import appeng .crafting .pattern .EncodedPatternItem ;
17+ import appeng .helpers .iface .PatternContainer ;
1618import appeng .items .storage .BasicStorageCell ;
1719import appeng .parts .storagebus .StorageBusPart ;
1820import com .the9grounds .aeadditions .item .storage .SuperStorageCell ;
3133import net .minecraft .core .BlockPos ;
3234import net .minecraft .nbt .CompoundTag ;
3335import net .minecraft .world .item .ItemStack ;
36+ import net .minecraft .world .level .Level ;
3437import net .minecraft .world .level .block .entity .BlockEntity ;
3538import net .minecraftforge .common .capabilities .ForgeCapabilities ;
3639import net .minecraftforge .common .util .LazyOptional ;
3740import net .minecraftforge .fluids .FluidStack ;
3841import net .minecraftforge .fluids .capability .IFluidHandler ;
3942import net .minecraftforge .items .IItemHandler ;
4043import net .minecraftforge .registries .ForgeRegistries ;
41- import org .apache .logging .log4j .Level ;
4244import org .jetbrains .annotations .Nullable ;
4345
4446import java .util .*;
@@ -88,8 +90,8 @@ public static Pair<Long, AEFluidKey> findAEFluidFromFilter(MEStorage monitor, @N
8890 return null ;
8991 }
9092
91- public static Pair <IPatternDetails , String > findPatternFromFilters (ICraftingProvider provider , GenericFilter inputFilter , GenericFilter outputFilter ) {
92- for (IPatternDetails pattern : provider . getAvailablePatterns ( )) {
93+ public static Pair <IPatternDetails , String > findPatternFromFilters (IGrid grid , Level level , GenericFilter inputFilter , GenericFilter outputFilter ) {
94+ for (IPatternDetails pattern : getPatterns ( grid , level )) {
9395 if (pattern .getInputs ().length == 0 )
9496 continue ;
9597 if (pattern .getOutputs ().length == 0 )
@@ -98,7 +100,7 @@ public static Pair<IPatternDetails, String> findPatternFromFilters(ICraftingProv
98100 boolean inputMatch = false ;
99101 boolean outputMatch = false ;
100102
101- if (! inputFilter . isEmpty () ) {
103+ if ( inputFilter != null ) {
102104 for (IPatternDetails .IInput input : pattern .getInputs ()) {
103105 if (inputFilter .test (input .getPossibleInputs ()[0 ])) {
104106 inputMatch = true ;
@@ -109,7 +111,7 @@ public static Pair<IPatternDetails, String> findPatternFromFilters(ICraftingProv
109111 inputMatch = true ;
110112 }
111113
112- if (! outputFilter . isEmpty () ) {
114+ if ( outputFilter != null ) {
113115 for (GenericStack output : pattern .getOutputs ()) {
114116 if (outputFilter .test (output )) {
115117 outputMatch = true ;
@@ -172,8 +174,37 @@ public static List<Object> listGases(MEStorage monitor, ICraftingService service
172174 return items ;
173175 }
174176
175- public static List <Object > listPatterns (ICraftingProvider manager ) {
176- return manager .getAvailablePatterns ().stream ().map (AppEngApi ::getObjectFromPattern ).collect (Collectors .toList ());
177+ public static List <IPatternDetails > getPatterns (IGrid grid , Level level ) {
178+ List <IPatternDetails > patterns = new ArrayList <>();
179+ for (var machineClass : grid .getMachineClasses ()) {
180+ var containerClass = tryCastMachineToContainer (machineClass );
181+ if (containerClass == null )
182+ continue ;
183+
184+ for (var container : grid .getActiveMachines (containerClass )) {
185+ for (ItemStack patternItem : container .getTerminalPatternInventory ()) {
186+ if (patternItem .getItem () instanceof EncodedPatternItem item ) {
187+ IPatternDetails patternDetails = item .decode (patternItem , level , false );
188+ if (patternDetails == null )
189+ continue ;
190+
191+ patterns .add (patternDetails );
192+ }
193+ }
194+ }
195+ }
196+ return patterns ;
197+ }
198+
199+ public static List <Object > listPatterns (IGrid grid , Level level ) {
200+ return getPatterns (grid , level ).stream ().map (AppEngApi ::getObjectFromPattern ).collect (Collectors .toList ());
201+ }
202+
203+ private static Class <? extends PatternContainer > tryCastMachineToContainer (Class <?> machineClass ) {
204+ if (PatternContainer .class .isAssignableFrom (machineClass )) {
205+ return machineClass .asSubclass (PatternContainer .class );
206+ }
207+ return null ;
177208 }
178209
179210 public static <T extends AEKey > Map <String , Object > getObjectFromStack (Pair <Long , T > stack , @ Nullable ICraftingService service ) {
@@ -186,7 +217,7 @@ public static <T extends AEKey> Map<String, Object> getObjectFromStack(Pair<Long
186217 if (APAddons .appMekLoaded && (stack .getRight () instanceof MekanismKey gasKey ))
187218 return getObjectFromGasStack (Pair .of (stack .getLeft (), gasKey ), service );
188219
189- AdvancedPeripherals .debug ("Could not create table from unknown stack " + stack .getRight ().getClass () + " - Report this to the maintainer of ap" , Level .ERROR );
220+ AdvancedPeripherals .debug ("Could not create table from unknown stack " + stack .getRight ().getClass () + " - Report this to the maintainer of ap" , org . apache . logging . log4j . Level .ERROR );
190221 return Collections .emptyMap ();
191222 }
192223
0 commit comments