Skip to content

Commit 5bab2e9

Browse files
committed
Start to implement more of the RS Bridge and ME Bridge IStorageSystemPeripheral functions. Also started adding better pattern support for both. WIP commit, commited due to device change
1 parent ea09ab1 commit 5bab2e9

File tree

14 files changed

+174
-71
lines changed

14 files changed

+174
-71
lines changed

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

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package de.srendi.advancedperipherals.common.addons.appliedenergistics;
22

3+
import appeng.api.crafting.IPatternDetails;
34
import appeng.api.inventories.InternalInventory;
45
import appeng.api.networking.IGridNode;
56
import appeng.api.networking.crafting.CraftingJobStatus;
67
import appeng.api.networking.crafting.ICraftingCPU;
8+
import appeng.api.networking.crafting.ICraftingProvider;
79
import appeng.api.networking.crafting.ICraftingService;
810
import appeng.api.networking.storage.IStorageService;
911
import appeng.api.stacks.*;
@@ -39,6 +41,7 @@
3941
import org.jetbrains.annotations.Nullable;
4042

4143
import java.util.*;
44+
import java.util.stream.Collectors;
4245

4346
public class AppEngApi {
4447

@@ -119,7 +122,7 @@ public static List<Object> listFluids(MEStorage monitor, ICraftingService servic
119122
return items;
120123
}
121124

122-
public static List<Object> listGases(MEStorage monitor, ICraftingService service, int flag) {
125+
public static List<Object> listGases(MEStorage monitor, ICraftingService service) {
123126
List<Object> items = new ArrayList<>();
124127
for (Object2LongMap.Entry<AEKey> aeKey : monitor.getAvailableStacks()) {
125128
if (APAddons.appMekLoaded && aeKey.getKey() instanceof MekanismKey itemKey) {
@@ -129,6 +132,10 @@ public static List<Object> listGases(MEStorage monitor, ICraftingService service
129132
return items;
130133
}
131134

135+
public static List<Object> listPatterns(ICraftingProvider manager) {
136+
return manager.getAvailablePatterns().stream().map(AppEngApi::getObjectFromPattern).collect(Collectors.toList());
137+
}
138+
132139
public static <T extends AEKey> Map<String, Object> getObjectFromStack(Pair<Long, T> stack, @Nullable ICraftingService service) {
133140
if (stack.getRight() == null)
134141
return Collections.emptyMap();
@@ -182,6 +189,26 @@ private static Map<String, Object> getObjectFromGasStack(Pair<Long, MekanismKey>
182189
return map;
183190
}
184191

192+
public static Map<String, Object> getObjectFromPattern(IPatternDetails pattern) {
193+
Map<String, Object> map = new HashMap<>();
194+
195+
map.put("inputs", Arrays.stream(pattern.getInputs()).map(AppEngApi::getObjectFromPatternInput));
196+
map.put("outputs", Arrays.stream(pattern.getOutputs()).map(AppEngApi::getObjectFromGenericStack));
197+
map.put("primaryOutput", getObjectFromGenericStack(pattern.getPrimaryOutput()));
198+
return map;
199+
}
200+
201+
public static Map<String, Object> getObjectFromPatternInput(IPatternDetails.IInput patternInput) {
202+
Map<String, Object> map = new HashMap<>();
203+
map.put("primaryInput", getObjectFromGenericStack(patternInput.getPossibleInputs()[0]));
204+
map.put("possibleInputs",
205+
Arrays.stream(Arrays.copyOfRange(patternInput.getPossibleInputs(), 1, patternInput.getPossibleInputs().length))
206+
.map(AppEngApi::getObjectFromGenericStack));
207+
map.put("multiplier", patternInput.getMultiplier());
208+
map.put("remaining", patternInput.getRemainingKey(patternInput.getPossibleInputs()[0].what()));
209+
return map;
210+
}
211+
185212
public static Map<String, Object> getObjectFromCPU(ICraftingCPU cpu) {
186213
Map<String, Object> map = new HashMap<>();
187214
long storage = cpu.getAvailableStorage();
@@ -500,7 +527,7 @@ public static long getUsedFluidStorage(IGridNode node) {
500527
KeyCounter keyCounter = bus.getInternalHandler().getAvailableStacks();
501528

502529
for (Object2LongMap.Entry<AEKey> aeKey : keyCounter) {
503-
if (aeKey.getKey() instanceof AEFluidKey fluidKey) {
530+
if (aeKey.getKey() instanceof AEFluidKey) {
504531
used += aeKey.getLongValue();
505532
}
506533
}

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/ColonyPeripheral.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ public final Object getRequests() throws LuaException {
272272
map.put("state", request.getState().toString());
273273
map.put("count", deliverableRequest.getCount());
274274
map.put("minCount", deliverableRequest.getMinimumCount());
275-
map.put("items", request.getDisplayStacks().stream().map(LuaConverter::stackToObject).collect(Collectors.toList()));
275+
map.put("items", request.getDisplayStacks().stream().map(LuaConverter::itemStackToObject).collect(Collectors.toList()));
276276
map.put("target", request.getRequester().getRequesterDisplayName(requestManager, request).getString());
277277
result.add(map);
278278
});

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/InventoryManagerPeripheral.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
import net.minecraftforge.items.wrapper.PlayerOffhandInvWrapper;
2626
import org.jetbrains.annotations.NotNull;
2727

28-
import java.util.*;
28+
import java.util.ArrayList;
29+
import java.util.List;
30+
import java.util.Map;
2931

3032
public class InventoryManagerPeripheral extends BasePeripheral<BlockEntityPeripheralOwner<InventoryManagerEntity>> {
3133

@@ -185,12 +187,12 @@ public final int getFreeSlot() throws LuaException {
185187

186188
@LuaFunction(mainThread = true)
187189
public final Map<String, Object> getItemInHand() throws LuaException {
188-
return LuaConverter.stackToObject(getOwnerPlayer().getMainHandItem());
190+
return LuaConverter.itemStackToObject(getOwnerPlayer().getMainHandItem());
189191
}
190192

191193
@LuaFunction(mainThread = true)
192194
public final Map<String, Object> getItemInOffHand() throws LuaException {
193-
return LuaConverter.stackToObject(getOwnerPlayer().getOffhandItem());
195+
return LuaConverter.itemStackToObject(getOwnerPlayer().getOffhandItem());
194196
}
195197

196198
private Player getOwnerPlayer() throws LuaException {

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/MeBridgePeripheral.java

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import appeng.api.networking.IGridNode;
44
import appeng.api.networking.IManagedGridNode;
55
import appeng.api.networking.crafting.ICraftingCPU;
6+
import appeng.api.networking.crafting.ICraftingProvider;
67
import appeng.api.networking.crafting.ICraftingService;
78
import appeng.api.stacks.AEFluidKey;
89
import appeng.api.stacks.AEItemKey;
@@ -30,10 +31,7 @@
3031
import org.jetbrains.annotations.NotNull;
3132
import org.jetbrains.annotations.Nullable;
3233

33-
import java.util.ArrayList;
34-
import java.util.Iterator;
35-
import java.util.List;
36-
import java.util.Locale;
34+
import java.util.*;
3735

3836
public class MeBridgePeripheral extends BasePeripheral<BlockEntityPeripheralOwner<MeBridgeEntity>> implements IStorageSystemPeripheral {
3937

@@ -181,7 +179,18 @@ public final MethodResult getItem(IArguments arguments) throws LuaException {
181179

182180
@Override
183181
public MethodResult getFluid(IArguments arguments) throws LuaException {
184-
return null;
182+
if (!isAvailable())
183+
return notConnected();
184+
185+
Pair<FluidFilter, String> filter = FluidFilter.parse(arguments.getTable(0));
186+
if (filter.rightPresent())
187+
return MethodResult.of(null, filter.getRight());
188+
189+
FluidFilter parsedFilter = filter.getLeft();
190+
if (parsedFilter.isEmpty())
191+
return MethodResult.of(null, "EMPTY_FILTER");
192+
193+
return MethodResult.of(AppEngApi.findAEFluidFromFilter(AppEngApi.getMonitor(node), getCraftingService(), parsedFilter));
185194
}
186195

187196
@Override
@@ -258,14 +267,44 @@ public final MethodResult exportItem(IComputerAccess computer, @NotNull IArgumen
258267
return exportToChest(arguments, inventory);
259268
}
260269

270+
//TODO: How do we want to filter? By inputs or outputs, or maybe both? What if there are multiple patterns with the same output/input
261271
@Override
262-
public MethodResult getPattern(IArguments arguments) throws LuaException {
272+
public MethodResult getFilteredPatterns(IArguments arguments) throws LuaException {
273+
if (!isAvailable())
274+
return notConnected();
275+
276+
Map<?, ?> filterTable;
277+
try {
278+
Optional<Map<?, ?>> optionalTable = arguments.optTable(0);
279+
if (optionalTable.isEmpty())
280+
return MethodResult.of(null, "EMPTY_INPUT");
281+
// Expected input is a table with either an input table, an output table or both to filter for both
282+
filterTable = optionalTable.get();
283+
} catch (LuaException e) {
284+
return MethodResult.of(null, "NO_TABLE");
285+
}
286+
287+
boolean hasInputFilter = filterTable.containsKey("input");
288+
boolean hasOutputFilter = filterTable.containsKey("output");
289+
290+
291+
if (hasInputFilter)
292+
return null;
293+
263294
return null;
264295
}
265296

266297
@Override
267298
public MethodResult getPatterns() {
268-
return null;
299+
if (!isAvailable())
300+
return notConnected();
301+
302+
ICraftingProvider provider = node.getService(ICraftingProvider.class);
303+
304+
if (provider == null)
305+
return MethodResult.of(null, "NO_CRAFTING_PROVIDER");
306+
307+
return MethodResult.of(AppEngApi.listPatterns(provider));
269308
}
270309

271310
@Override
@@ -455,7 +494,7 @@ public final MethodResult isItemCraftable(IArguments arguments) throws LuaExcept
455494
return MethodResult.of(getCraftingService().isCraftable(item));
456495
}
457496

458-
@LuaFunction(mainThread = true)
497+
@Override
459498
public final MethodResult isFluidCrafting(IArguments arguments) throws LuaException {
460499
if (!isAvailable())
461500
return notConnected();
@@ -476,7 +515,7 @@ public final MethodResult isFluidCrafting(IArguments arguments) throws LuaExcept
476515
return MethodResult.of(AppEngApi.isFluidCrafting(monitor, grid, parsedFilter, craftingCPU));
477516
}
478517

479-
@LuaFunction(mainThread = true)
518+
@Override
480519
public final MethodResult isFluidCraftable(IArguments arguments) throws LuaException {
481520
if (!isAvailable())
482521
return notConnected();

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/RsBridgePeripheral.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ public final MethodResult getStoredEnergy() {
210210
}
211211

212212
@Override
213-
public final MethodResult getPattern(IArguments arguments) throws LuaException {
213+
public final MethodResult getFilteredPatterns(IArguments arguments) throws LuaException {
214214
if (!isAvailable())
215215
return notConnected();
216216

src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/plugins/AutomataItemSuckPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public final MethodResult scanItems() {
8484
int index = 1;
8585
for (ItemEntity item : items) {
8686
ItemStack stack = item.getItem();
87-
Map<String, Object> itemData = LuaConverter.stackToObject(stack);
87+
Map<String, Object> itemData = LuaConverter.itemStackToObject(stack);
8888
itemData.put("entityID", item.getId());
8989
data.put(index, itemData);
9090
index++;

src/main/java/de/srendi/advancedperipherals/common/addons/create/BasinIntegration.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,13 @@
66
import de.srendi.advancedperipherals.lib.peripherals.BlockEntityIntegrationPeripheral;
77
import net.minecraft.world.level.block.entity.BlockEntity;
88
import net.minecraftforge.common.capabilities.ForgeCapabilities;
9-
import net.minecraftforge.items.IItemHandler;
10-
import net.minecraftforge.registries.ForgeRegistries;
119
import net.minecraftforge.fluids.FluidStack;
1210
import net.minecraftforge.fluids.capability.IFluidHandler;
11+
import net.minecraftforge.items.IItemHandler;
12+
import net.minecraftforge.registries.ForgeRegistries;
1313
import org.jetbrains.annotations.NotNull;
1414

15-
import java.util.ArrayList;
16-
import java.util.HashMap;
17-
import java.util.List;
18-
import java.util.Map;
19-
import java.util.Optional;
15+
import java.util.*;
2016

2117
public class BasinIntegration extends BlockEntityIntegrationPeripheral<BasinBlockEntity> {
2218

@@ -68,7 +64,7 @@ public final List<Object> getOutputFluids() {
6864

6965
@LuaFunction(mainThread = true)
7066
public final Map<String, Object> getFilter() {
71-
return LuaConverter.stackToObject(blockEntity.getFilter().getFilter());
67+
return LuaConverter.itemStackToObject(blockEntity.getFilter().getFilter());
7268
}
7369

7470
@LuaFunction(mainThread = true)
@@ -78,7 +74,7 @@ public final List<Object> getInventory() {
7874
IItemHandler handler = handlerOptional.get();
7975
List<Object> items = new ArrayList<>();
8076
for (int slot = 0; slot < handler.getSlots(); slot++) {
81-
items.add(LuaConverter.stackToObject(handler.getStackInSlot(slot)));
77+
items.add(LuaConverter.itemStackToObject(handler.getStackInSlot(slot)));
8278
}
8379
return items;
8480
}

src/main/java/de/srendi/advancedperipherals/common/addons/minecolonies/MineColonies.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public static Object visitorToObject(IVisitorData visitor) {
106106
map.put("saturation", visitor.getSaturation());
107107
map.put("happiness", visitor.getCitizenHappinessHandler().getHappiness(visitor.getColony(), visitor));
108108
map.put("skills", skillsToObject(visitor.getCitizenSkillHandler().getSkills()));
109-
map.put("recruitCost", LuaConverter.stackToObject(visitor.getRecruitCost()));
109+
map.put("recruitCost", LuaConverter.itemStackToObject(visitor.getRecruitCost()));
110110

111111
return map;
112112
}
@@ -276,7 +276,7 @@ public static List<Object> getResearch(ResourceLocation branch, List<ResourceLoc
276276

277277
List<Map<String, Object>> cost = new ArrayList<>();
278278
for (ItemStorage item : research.getCostList())
279-
cost.add(LuaConverter.stackToObject(item.getItemStack(), item.getAmount()));
279+
cost.add(LuaConverter.itemStackToObject(item.getItemStack(), item.getAmount()));
280280

281281
List<Map<String, Object>> requirements = new ArrayList<>();
282282
for (IResearchRequirement requirement : research.getResearchRequirement()) {
@@ -338,7 +338,7 @@ public static Object builderResourcesToObject(IColony colony, BlockPos pos) {
338338
Map<String, Object> map = new HashMap<>();
339339
ItemStack stack = resource.getItemStack().copy();
340340

341-
map.put("item", LuaConverter.stackToObject(stack));
341+
map.put("item", LuaConverter.itemStackToObject(stack));
342342
map.put("displayName", resource.getName());
343343
map.put("available", resource.getAvailable());
344344
map.put("delivering", resource.getAmountInDelivery());

0 commit comments

Comments
 (0)