Skip to content

Commit 09a1874

Browse files
committed
Fixed pattern listing. AE2 does not offer a way to get all patterns of the system. To solve this, we probe over all connected nodes in the system and check if they have patterns. This is adapted from the PatternAccessTerminal which does the same
1 parent 4005a48 commit 09a1874

File tree

5 files changed

+129
-62
lines changed

5 files changed

+129
-62
lines changed

src/main/java/de/srendi/advancedperipherals/common/addons/appliedenergistics/AppEngApi.java

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@
22

33
import appeng.api.crafting.IPatternDetails;
44
import appeng.api.inventories.InternalInventory;
5+
import appeng.api.networking.IGrid;
56
import appeng.api.networking.IGridNode;
67
import appeng.api.networking.crafting.CraftingJobStatus;
78
import appeng.api.networking.crafting.ICraftingCPU;
8-
import appeng.api.networking.crafting.ICraftingProvider;
99
import appeng.api.networking.crafting.ICraftingService;
1010
import appeng.api.networking.storage.IStorageService;
1111
import appeng.api.stacks.*;
1212
import appeng.api.storage.AEKeyFilter;
1313
import appeng.api.storage.IStorageProvider;
1414
import appeng.api.storage.MEStorage;
1515
import appeng.blockentity.storage.DriveBlockEntity;
16+
import appeng.crafting.pattern.EncodedPatternItem;
17+
import appeng.helpers.iface.PatternContainer;
1618
import appeng.items.storage.BasicStorageCell;
1719
import appeng.parts.storagebus.StorageBusPart;
1820
import com.the9grounds.aeadditions.item.storage.SuperStorageCell;
@@ -31,14 +33,14 @@
3133
import net.minecraft.core.BlockPos;
3234
import net.minecraft.nbt.CompoundTag;
3335
import net.minecraft.world.item.ItemStack;
36+
import net.minecraft.world.level.Level;
3437
import net.minecraft.world.level.block.entity.BlockEntity;
3538
import net.minecraftforge.common.capabilities.ForgeCapabilities;
3639
import net.minecraftforge.common.util.LazyOptional;
3740
import net.minecraftforge.fluids.FluidStack;
3841
import net.minecraftforge.fluids.capability.IFluidHandler;
3942
import net.minecraftforge.items.IItemHandler;
4043
import net.minecraftforge.registries.ForgeRegistries;
41-
import org.apache.logging.log4j.Level;
4244
import org.jetbrains.annotations.Nullable;
4345

4446
import 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

Comments
 (0)