Skip to content

Commit d447486

Browse files
authored
Merge pull request #720 from zyxkad/bridges-feature
implement item&fluid handlers on bridges
2 parents 31f58ff + 8870539 commit d447486

6 files changed

Lines changed: 110 additions & 33 deletions

File tree

gradle.properties

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
org.gradle.jvmargs=-Xmx4G
21
org.gradle.daemon=false
2+
org.gradle.jvmargs=-Xmx4G
33
org.gradle.logging.level=info
44

55
# Minecraft related
@@ -10,53 +10,57 @@ mod_id=advancedperipherals
1010
mod_version=0.8r
1111
minecraft_version=1.19.2
1212
mod_artifact_suffix=
13+
1314
forge_version=43.4.0
1415
loader_version=43
16+
1517
release_type=release
18+
1619
mappings_channel=parchment
1720
mappings_version=2022.11.20-1.19.2
18-
jb_annotations=21.0.1
1921

2022
# Test dependencies
21-
junit_version=5.7.2
2223
hamcrest_version=2.2
24+
jb_annotations=21.0.1
25+
junit_version=5.7.2
2326
kotlin_version=1.8.0
2427
kotlinx_coroutines_version=1.7.3
2528
ttoolkit_version=0.1.3
2629

2730
# Mod dependencies
2831
cc_version=1.101.3
29-
curios_version=1.19.2-5.1.4.1
30-
minecolonies_version=1.19.2-1.1.473-BETA
31-
appliedenergistics_version=12.9.9
32-
patchouli_version=1.19.2-77
33-
refinedstorage_version=1.11.7
32+
33+
ae2additions_version=4646599
34+
ae2things_version=4367610
35+
appliedenergistics_version=12.9.12
36+
appliedmekanistics_version=4734608
3437
botania_version=1.19.2-440-FORGE
38+
clockwork_version=5171528
3539
create_version=0.5.1.f-46
3640
createca_version=5099757
41+
curios_version=1.19.2-5.1.4.1
42+
dimstorage_version=3927875
43+
eureka_ships_version=5321628
44+
kotlinforforge_version=3.12.0
3745
mekanism_version=1.19.2-10.3.9.13
38-
ae2things_version=4367610
46+
minecolonies_version=1.19.2-1.1.473-BETA
47+
patchouli_version=1.19.2-77
3948
powah_version=4183078
40-
ae2additions_version=4646599
41-
kotlinforforge_version=3.12.0
42-
appliedmekanistics_version=4734608
43-
dimstorage_version=3927875
49+
refinedstorage_version=1.11.7
4450
valkyrien_skies_version=4994898
45-
eureka_ships_version=5321628
46-
clockwork_version=5171528
4751
vs2_version=2.1.2-beta.1+a04911c932
4852
vs_core_version=1.1.0+2a62e6a823
4953

5054
# Mod dependencies which are needed for other mods
5155
# For minecolonies
52-
structurize_version=1.19.2-1.0.649-BETA
53-
multipiston_version=1.19.2-1.2.21-ALPHA
5456
blockui_version=1.19.2-0.0.102-ALPHA
5557
domumornamentum_version=1.19-1.0.141-BETA
58+
multipiston_version=1.19.2-1.2.21-ALPHA
59+
structurize_version=1.19.2-1.0.649-BETA
5660

5761
# For DimStorage
5862
edivadlib_version=3927847
5963

60-
# Mod dependencies for testing stuff(Only used in the dev environment)
64+
# Mod dependencies for testing stuff (Only used in the dev environment)
65+
jade_version=4914105
6166
jei_version=1.19.2-forge:11.6.0.1016
62-
jade_version=4914105

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

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
import de.srendi.advancedperipherals.common.util.inventory.ItemFilter;
3434
import de.srendi.advancedperipherals.lib.peripherals.BasePeripheral;
3535
import net.minecraft.core.Direction;
36+
import net.minecraftforge.common.capabilities.Capability;
37+
import net.minecraftforge.common.capabilities.ForgeCapabilities;
38+
import net.minecraftforge.common.capabilities.ICapabilityProvider;
39+
import net.minecraftforge.common.util.LazyOptional;
3640
import net.minecraftforge.fluids.capability.IFluidHandler;
3741
import net.minecraftforge.items.IItemHandler;
3842
import org.jetbrains.annotations.NotNull;
@@ -50,6 +54,7 @@ public class MeBridgePeripheral extends BasePeripheral<BlockEntityPeripheralOwne
5054
public static final String PERIPHERAL_TYPE = "me_bridge";
5155

5256
private final MeBridgeEntity bridge;
57+
private final ICapabilityProvider capabilityWrapper = new CapabilityWrapper(this);
5358
private IGridNode node;
5459

5560
public MeBridgePeripheral(MeBridgeEntity tileEntity) {
@@ -62,6 +67,11 @@ public void setNode(IManagedGridNode node) {
6267
this.node = node.getNode();
6368
}
6469

70+
@Override
71+
public Object getTarget() {
72+
return capabilityWrapper;
73+
}
74+
6575
@Override
6676
public boolean isEnabled() {
6777
return APConfig.PERIPHERALS_CONFIG.enableMEBridge.get();
@@ -71,6 +81,14 @@ private ICraftingService getCraftingService() {
7181
return node.getGrid().getCraftingService();
7282
}
7383

84+
protected MeItemHandler getItemHandler() {
85+
return new MeItemHandler(AppEngApi.getMonitor(node), bridge);
86+
}
87+
88+
protected MeFluidHandler getFluidHandler() {
89+
return new MeFluidHandler(AppEngApi.getMonitor(node), bridge);
90+
}
91+
7492
/**
7593
* exports an item out of the system to a valid inventory
7694
*
@@ -79,8 +97,7 @@ private ICraftingService getCraftingService() {
7997
* @return the exportable amount or null with a string if something went wrong
8098
*/
8199
protected MethodResult exportToChest(@NotNull IArguments arguments, @Nullable IItemHandler targetInventory) throws LuaException {
82-
MEStorage monitor = AppEngApi.getMonitor(node);
83-
MeItemHandler itemHandler = new MeItemHandler(monitor, bridge);
100+
MeItemHandler itemHandler = getItemHandler();
84101
Pair<ItemFilter, String> filter = ItemFilter.parse(arguments.getTable(0));
85102

86103
if (filter.rightPresent())
@@ -100,8 +117,7 @@ protected MethodResult exportToChest(@NotNull IArguments arguments, @Nullable II
100117
* @return the exportable amount or null with a string if something went wrong
101118
*/
102119
protected MethodResult exportToTank(@NotNull IArguments arguments, @Nullable IFluidHandler targetTank) throws LuaException {
103-
MEStorage monitor = AppEngApi.getMonitor(node);
104-
MeFluidHandler fluidHandler = new MeFluidHandler(monitor, bridge);
120+
MeFluidHandler fluidHandler = getFluidHandler();
105121
Pair<FluidFilter, String> filter = FluidFilter.parse(arguments.getTable(0));
106122

107123
if (filter.rightPresent())
@@ -121,8 +137,7 @@ protected MethodResult exportToTank(@NotNull IArguments arguments, @Nullable IFl
121137
* @return the imported amount or null with a string if something went wrong
122138
*/
123139
protected MethodResult importToME(@NotNull IArguments arguments, @Nullable IItemHandler targetInventory) throws LuaException {
124-
MEStorage monitor = AppEngApi.getMonitor(node);
125-
MeItemHandler itemHandler = new MeItemHandler(monitor, bridge);
140+
MeItemHandler itemHandler = getItemHandler();
126141
Pair<ItemFilter, String> filter = ItemFilter.parse(arguments.getTable(0));
127142

128143
if (filter.rightPresent())
@@ -142,8 +157,7 @@ protected MethodResult importToME(@NotNull IArguments arguments, @Nullable IItem
142157
* @return the imported amount or null with a string if something went wrong
143158
*/
144159
protected MethodResult importToME(@NotNull IArguments arguments, @Nullable IFluidHandler targetTank) throws LuaException {
145-
MEStorage monitor = AppEngApi.getMonitor(node);
146-
MeFluidHandler fluidHandler = new MeFluidHandler(monitor, bridge);
160+
MeFluidHandler fluidHandler = getFluidHandler();
147161
Pair<FluidFilter, String> filter = FluidFilter.parse(arguments.getTable(0));
148162

149163
if (filter.rightPresent())
@@ -788,4 +802,22 @@ public final MethodResult getCraftingCPUs() throws LuaException {
788802
}
789803
return MethodResult.of(map);
790804
}
805+
806+
private static final class CapabilityWrapper implements ICapabilityProvider {
807+
private final MeBridgePeripheral peripheral;
808+
809+
private CapabilityWrapper(MeBridgePeripheral peripheral) {
810+
this.peripheral = peripheral;
811+
}
812+
813+
@Override
814+
public <T> LazyOptional<T> getCapability(final Capability<T> cap, final Direction side) {
815+
if (cap == ForgeCapabilities.ITEM_HANDLER) {
816+
return LazyOptional.of(this.peripheral::getItemHandler).cast();
817+
} else if (cap == ForgeCapabilities.FLUID_HANDLER) {
818+
return LazyOptional.of(this.peripheral::getFluidHandler).cast();
819+
}
820+
return LazyOptional.empty();
821+
}
822+
}
791823
}

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

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
import de.srendi.advancedperipherals.lib.peripherals.BasePeripheral;
3030
import net.minecraft.core.Direction;
3131
import net.minecraft.world.item.ItemStack;
32+
import net.minecraftforge.common.capabilities.Capability;
33+
import net.minecraftforge.common.capabilities.ForgeCapabilities;
34+
import net.minecraftforge.common.capabilities.ICapabilityProvider;
35+
import net.minecraftforge.common.util.LazyOptional;
3236
import net.minecraftforge.fluids.FluidStack;
3337
import net.minecraftforge.fluids.capability.IFluidHandler;
3438
import net.minecraftforge.items.IItemHandler;
@@ -46,6 +50,7 @@ public class RsBridgePeripheral extends BasePeripheral<BlockEntityPeripheralOwne
4650
public static final String PERIPHERAL_TYPE = "rs_bridge";
4751

4852
private final RsBridgeEntity bridge;
53+
private final ICapabilityProvider capabilityWrapper = new CapabilityWrapper(this);
4954

5055
public RsBridgePeripheral(RsBridgeEntity tileEntity) {
5156
super(PERIPHERAL_TYPE, new BlockEntityPeripheralOwner<>(tileEntity));
@@ -68,11 +73,24 @@ private boolean isAvailable() {
6873
return getNetwork() != null;
6974
}
7075

76+
@Override
77+
public Object getTarget() {
78+
return capabilityWrapper;
79+
}
80+
7181
@Override
7282
public boolean isEnabled() {
7383
return APConfig.PERIPHERALS_CONFIG.enableRSBridge.get();
7484
}
7585

86+
protected RsItemHandler getItemHandler() {
87+
return new RsItemHandler(getNetwork());
88+
}
89+
90+
protected RsFluidHandler getFluidHandler() {
91+
return new RsFluidHandler(getNetwork());
92+
}
93+
7694
@Override
7795
@LuaFunction(mainThread = true)
7896
public final MethodResult isConnected() {
@@ -393,7 +411,7 @@ public final MethodResult getPatterns(IArguments arguments) throws LuaException
393411
}
394412

395413
protected MethodResult exportToChest(@NotNull IArguments arguments, @Nullable IItemHandler targetInventory) throws LuaException {
396-
RsItemHandler itemHandler = new RsItemHandler(getNetwork());
414+
RsItemHandler itemHandler = getItemHandler();
397415
if (targetInventory == null)
398416
return MethodResult.of(0, "INVALID_TARGET");
399417

@@ -405,7 +423,7 @@ protected MethodResult exportToChest(@NotNull IArguments arguments, @Nullable II
405423
}
406424

407425
protected MethodResult importToSystem(@NotNull IArguments arguments, @Nullable IItemHandler targetInventory) throws LuaException {
408-
RsItemHandler itemHandler = new RsItemHandler(getNetwork());
426+
RsItemHandler itemHandler = getItemHandler();
409427
if (targetInventory == null)
410428
return MethodResult.of(0, "INVALID_TARGET");
411429

@@ -417,7 +435,7 @@ protected MethodResult importToSystem(@NotNull IArguments arguments, @Nullable I
417435
}
418436

419437
protected MethodResult exportToTank(@NotNull IArguments arguments, @Nullable IFluidHandler targetInventory) throws LuaException {
420-
RsFluidHandler itemHandler = new RsFluidHandler(getNetwork());
438+
RsFluidHandler itemHandler = getFluidHandler();
421439
if (targetInventory == null)
422440
return MethodResult.of(0, "INVALID_TARGET");
423441

@@ -429,7 +447,7 @@ protected MethodResult exportToTank(@NotNull IArguments arguments, @Nullable IFl
429447
}
430448

431449
protected MethodResult importToSystem(@NotNull IArguments arguments, @Nullable IFluidHandler targetInventory) throws LuaException {
432-
RsFluidHandler itemHandler = new RsFluidHandler(getNetwork());
450+
RsFluidHandler itemHandler = getFluidHandler();
433451
if (targetInventory == null)
434452
return MethodResult.of(0, "INVALID_TARGET");
435453

@@ -714,4 +732,22 @@ public final MethodResult isCraftable(IArguments arguments) throws LuaException
714732

715733
return MethodResult.of(RsApi.findPatternFromFilters(getNetwork(), null, parsedFilter).getLeft() != null);
716734
}
735+
736+
private static final class CapabilityWrapper implements ICapabilityProvider {
737+
private final RsBridgePeripheral peripheral;
738+
739+
private CapabilityWrapper(RsBridgePeripheral peripheral) {
740+
this.peripheral = peripheral;
741+
}
742+
743+
@Override
744+
public <T> LazyOptional<T> getCapability(final Capability<T> cap, final Direction side) {
745+
if (cap == ForgeCapabilities.ITEM_HANDLER) {
746+
return LazyOptional.of(this.peripheral::getItemHandler).cast();
747+
} else if (cap == ForgeCapabilities.FLUID_HANDLER) {
748+
return LazyOptional.of(this.peripheral::getFluidHandler).cast();
749+
}
750+
return LazyOptional.empty();
751+
}
752+
}
717753
}

src/main/java/de/srendi/advancedperipherals/common/util/inventory/FluidFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class FluidFilter extends GenericFilter<FluidStack> {
2727
private TagKey<Fluid> tag = null;
2828
private CompoundTag nbt = null;
2929
private String nbtHash = null;
30-
private int count = 1000;
30+
private int count = Integer.MAX_VALUE;
3131
private String fingerprint = "";
3232

3333
private FluidFilter() {

src/main/java/de/srendi/advancedperipherals/common/util/inventory/InventoryUtil.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ public static int moveItem(IItemHandler inventoryFrom, IItemHandler inventoryTo,
5252

5353
// The logic changes with storage systems since these systems do not have slots
5454
if (inventoryFrom instanceof IStorageSystemItemHandler storageSystemHandler) {
55+
if (inventoryTo instanceof IStorageSystemItemHandler targetSSH) {
56+
ItemStack extracted = storageSystemHandler.extractItem(filter, filter.getCount(), true);
57+
ItemStack remain = targetSSH.insertItem(toSlot, extracted, false);
58+
return storageSystemHandler.extractItem(filter, extracted.getCount() - remain.getCount(), false).getCount();
59+
}
5560
for (int i = toSlot == -1 ? 0 : toSlot; i < (toSlot == -1 ? inventoryTo.getSlots() : toSlot + 1); i++) {
5661
ItemStack extracted = storageSystemHandler.extractItem(filter, filter.getCount(), true);
5762
if (extracted.isEmpty())

src/main/java/de/srendi/advancedperipherals/common/util/inventory/ItemFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class ItemFilter extends GenericFilter<ItemStack> {
2727
private TagKey<Item> tag = null;
2828
private CompoundTag nbt = null;
2929
private String nbtHash = null;
30-
private int count = 64;
30+
private int count = Integer.MAX_VALUE;
3131
private String fingerprint = "";
3232
public int fromSlot = -1;
3333
public int toSlot = -1;

0 commit comments

Comments
 (0)