Skip to content

Commit ea9161d

Browse files
committed
chore: abstract away summary fetching from packager handlers
# Conflicts: # abstractions/src/main/java/ru/zznty/create_factory_abstractions/api/generic/AbstractionsCapabilities.java # abstractions/src/main/java/ru/zznty/create_factory_abstractions/api/generic/capability/PackagerAttachedHandler.java # abstractions/src/main/java/ru/zznty/create_factory_abstractions/generic/impl/BuiltInPackagerAttachedHandler.java # abstractions/src/main/java/ru/zznty/create_factory_abstractions/generic/key/item/ItemKeyProvider.java # abstractions/src/main/java/ru/zznty/create_factory_abstractions/generic/key/item/NetworkItemHandler.java # forge/src/main/java/ru/zznty/create_factory_logistics/FactoryNetworkLinkCapabilities.java # forge/src/main/java/ru/zznty/create_factory_logistics/logistics/generic/FluidGenericExtension.java # forge/src/main/java/ru/zznty/create_factory_logistics/logistics/generic/NetworkFluidHandler.java # forge/src/main/java/ru/zznty/create_factory_logistics/logistics/jarPackager/JarPackagerAttachedHandler.java # forge/src/main/java/ru/zznty/create_factory_logistics/logistics/networkLink/NetworkLinkBlockEntity.java # forge/src/main/java/ru/zznty/create_factory_logistics/logistics/networkLink/NetworkLinkCapabilityFactory.java # forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/packager/GenericPackagerBlockEntityMixin.java
1 parent 55f896e commit ea9161d

25 files changed

+348
-222
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
package ru.zznty.create_factory_abstractions.api.generic;
22

3+
import net.minecraft.core.Direction;
34
import net.minecraft.resources.ResourceLocation;
45
import net.neoforged.neoforge.capabilities.BlockCapability;
56
import ru.zznty.create_factory_abstractions.CreateFactoryAbstractions;
7+
import ru.zznty.create_factory_abstractions.api.generic.capability.GenericInventory;
68
import ru.zznty.create_factory_abstractions.api.generic.capability.PackagerAttachedHandler;
79

810
public class AbstractionsCapabilities {
911
public static final BlockCapability<PackagerAttachedHandler, Void> PACKAGER_ATTACHED =
1012
BlockCapability.create(
1113
ResourceLocation.fromNamespaceAndPath(CreateFactoryAbstractions.ID, "packager_attached"),
1214
PackagerAttachedHandler.class, Void.class);
15+
public static final BlockCapability<GenericInventory, Direction> GENERIC_INVENTORY =
16+
BlockCapability.create(
17+
ResourceLocation.fromNamespaceAndPath(CreateFactoryAbstractions.ID, "generic_inventory"),
18+
GenericInventory.class, Direction.class);
1319
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package ru.zznty.create_factory_abstractions.api.generic.capability;
2+
3+
import net.minecraft.core.BlockPos;
4+
import net.minecraft.world.level.Level;
5+
import org.jetbrains.annotations.Nullable;
6+
import ru.zznty.create_factory_abstractions.api.generic.AbstractionsCapabilities;
7+
import ru.zznty.create_factory_abstractions.api.generic.key.GenericCapabilityWrapperProvider;
8+
import ru.zznty.create_factory_abstractions.api.generic.key.GenericKeyRegistration;
9+
10+
public interface GenericInventory {
11+
@Nullable GenericInventorySummaryProvider get(GenericKeyRegistration registration);
12+
13+
// maybe in the future
14+
// GenericStack insert(GenericStack stack);
15+
16+
static GenericInventory of(Level world, BlockPos pos) {
17+
GenericInventory capability = world.getCapability(AbstractionsCapabilities.GENERIC_INVENTORY, pos, null);
18+
if (capability != null) return capability;
19+
20+
return registration -> {
21+
@Nullable GenericCapabilityWrapperProvider<Object> provider = registration.provider().capabilityWrapperProvider();
22+
if (provider == null) return null;
23+
Object cap = world.getCapability(provider.capability(), pos, null);
24+
if (cap == null) return null;
25+
return provider.unwrap(cap);
26+
};
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package ru.zznty.create_factory_abstractions.api.generic.capability;
2+
3+
import ru.zznty.create_factory_abstractions.generic.support.GenericInventorySummary;
4+
5+
@FunctionalInterface
6+
public interface GenericInventorySummaryProvider {
7+
void apply(GenericInventorySummary summary);
8+
}

abstractions/src/main/java/ru/zznty/create_factory_abstractions/api/generic/capability/PackagerAttachedHandler.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
import org.jetbrains.annotations.Nullable;
1313
import ru.zznty.create_factory_abstractions.CreateFactoryAbstractions;
1414
import ru.zznty.create_factory_abstractions.api.generic.AbstractionsCapabilities;
15+
import ru.zznty.create_factory_abstractions.api.generic.key.GenericKeyRegistration;
1516
import ru.zznty.create_factory_abstractions.api.generic.stack.GenericStack;
1617
import ru.zznty.create_factory_abstractions.generic.impl.BuiltInPackagerAttachedHandler;
17-
import ru.zznty.create_factory_abstractions.generic.support.GenericInventorySummary;
1818

1919
public interface PackagerAttachedHandler {
2020
int slotCount();
@@ -26,9 +26,7 @@ boolean unwrap(Level level, BlockPos pos, BlockState state, Direction side,
2626

2727
PackageBuilder newPackage();
2828

29-
boolean hasChanges();
30-
31-
void collectAvailable(GenericInventorySummary summary);
29+
GenericKeyRegistration supportedKey();
3230

3331
Block supportedGauge();
3432

abstractions/src/main/java/ru/zznty/create_factory_abstractions/api/generic/extensibility/CommonRegistrationBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import java.util.function.Supplier;
77

88
public interface CommonRegistrationBuilder<Key extends GenericKey> {
9-
<Value, RegistryValue> CommonRegistrationBuilder<Key> provider(
10-
Supplier<GenericKeyProviderExtension<Key, Value, RegistryValue>> provider);
9+
<Value, RegistryValue, Capability> CommonRegistrationBuilder<Key> provider(
10+
Supplier<GenericKeyProviderExtension<Key, Value, RegistryValue, Capability>> provider);
1111

1212
CommonRegistrationBuilder<Key> serializer(Supplier<GenericKeySerializer<Key>> provider);
1313
}

abstractions/src/main/java/ru/zznty/create_factory_abstractions/api/generic/extensibility/GenericKeyProviderExtension.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package ru.zznty.create_factory_abstractions.api.generic.extensibility;
22

33
import net.minecraft.resources.ResourceKey;
4+
import ru.zznty.create_factory_abstractions.api.generic.key.GenericCapabilityWrapperProvider;
45
import ru.zznty.create_factory_abstractions.api.generic.key.GenericKey;
56

67
import java.util.Comparator;
78
import java.util.Optional;
89

9-
public interface GenericKeyProviderExtension<Key extends GenericKey, Value, RegistryValue> extends Comparator<Key> {
10+
public interface GenericKeyProviderExtension<Key extends GenericKey, Value, RegistryValue, Capability> extends Comparator<Key> {
1011
Key defaultKey();
1112

1213
Key wrap(Value value);
@@ -18,4 +19,6 @@ public interface GenericKeyProviderExtension<Key extends GenericKey, Value, Regi
1819
String ingredientTypeUid();
1920

2021
Optional<ResourceKey<RegistryValue>> resourceKey(Key key);
22+
23+
GenericCapabilityWrapperProvider<Capability> capabilityWrapperProvider();
2124
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package ru.zznty.create_factory_abstractions.api.generic.key;
2+
3+
import net.minecraft.core.Direction;
4+
import net.neoforged.neoforge.capabilities.BlockCapability;
5+
import ru.zznty.create_factory_abstractions.api.generic.capability.GenericInventorySummaryProvider;
6+
7+
public interface GenericCapabilityWrapperProvider<Cap> {
8+
BlockCapability<Cap, Direction> capability();
9+
10+
Cap wrap(GenericInventorySummaryProvider summaryProvider);
11+
12+
GenericInventorySummaryProvider unwrap(Cap capability);
13+
}

abstractions/src/main/java/ru/zznty/create_factory_abstractions/api/generic/key/GenericKeyProvider.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package ru.zznty.create_factory_abstractions.api.generic.key;
22

33
import net.minecraft.resources.ResourceKey;
4+
import org.jetbrains.annotations.Nullable;
45

56
import java.util.Comparator;
67
import java.util.Optional;
@@ -17,4 +18,8 @@ public interface GenericKeyProvider<Key extends GenericKey> extends Comparator<K
1718
String ingredientTypeUid();
1819

1920
<T> Optional<ResourceKey<T>> resourceKey(Key key);
21+
22+
default <Cap> @Nullable GenericCapabilityWrapperProvider<Cap> capabilityWrapperProvider() {
23+
return null;
24+
}
2025
}

abstractions/src/main/java/ru/zznty/create_factory_abstractions/generic/impl/BuiltInPackagerAttachedHandler.java

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,10 @@
44
import com.simibubi.create.AllDataComponents;
55
import com.simibubi.create.api.packager.InventoryIdentifier;
66
import com.simibubi.create.api.packager.unpacking.UnpackingHandler;
7-
import com.simibubi.create.content.logistics.BigItemStack;
87
import com.simibubi.create.content.logistics.box.PackageItem;
9-
import com.simibubi.create.content.logistics.crate.BottomlessItemHandler;
108
import com.simibubi.create.content.logistics.packager.IdentifiedInventory;
119
import com.simibubi.create.content.logistics.packager.PackagerBlockEntity;
12-
import com.simibubi.create.content.logistics.packager.PackagerItemHandler;
1310
import com.simibubi.create.content.logistics.stockTicker.PackageOrderWithCrafts;
14-
import com.simibubi.create.foundation.blockEntity.behaviour.inventory.VersionedInventoryTrackerBehaviour;
1511
import com.simibubi.create.foundation.item.ItemHelper;
1612
import net.minecraft.core.BlockPos;
1713
import net.minecraft.core.Direction;
@@ -25,8 +21,9 @@
2521
import org.jetbrains.annotations.Nullable;
2622
import ru.zznty.create_factory_abstractions.api.generic.capability.PackageBuilder;
2723
import ru.zznty.create_factory_abstractions.api.generic.capability.PackagerAttachedHandler;
24+
import ru.zznty.create_factory_abstractions.api.generic.key.GenericKeyRegistration;
2825
import ru.zznty.create_factory_abstractions.api.generic.stack.GenericStack;
29-
import ru.zznty.create_factory_abstractions.generic.support.GenericInventorySummary;
26+
import ru.zznty.create_factory_abstractions.generic.key.item.ItemKey;
3027

3128
import java.util.List;
3229

@@ -72,30 +69,8 @@ public PackageBuilder newPackage() {
7269
}
7370

7471
@Override
75-
public boolean hasChanges() {
76-
return !packagerBE.getBehaviour(VersionedInventoryTrackerBehaviour.TYPE).stillWaiting(
77-
packagerBE.targetInventory);
78-
}
79-
80-
@Override
81-
public void collectAvailable(GenericInventorySummary summary) {
82-
if (!packagerBE.targetInventory.hasInventory() || packagerBE.targetInventory.getInventory() instanceof PackagerItemHandler)
83-
return;
84-
85-
IItemHandler targetInv = packagerBE.targetInventory.getInventory();
86-
87-
if (targetInv instanceof BottomlessItemHandler bih) {
88-
summary.add(GenericStack.wrap(bih.getStackInSlot(0)).withAmount(BigItemStack.INF));
89-
return;
90-
}
91-
92-
for (int slot = 0; slot < targetInv.getSlots(); slot++) {
93-
int slotLimit = targetInv.getSlotLimit(slot);
94-
ItemStack stack = targetInv.getStackInSlot(slot);
95-
summary.add(GenericStack.wrap(stack));
96-
}
97-
98-
packagerBE.getBehaviour(VersionedInventoryTrackerBehaviour.TYPE).awaitNewVersion(packagerBE.targetInventory);
72+
public GenericKeyRegistration supportedKey() {
73+
return GenericContentExtender.REGISTRATIONS.get(ItemKey.class);
9974
}
10075

10176
@Override

abstractions/src/main/java/ru/zznty/create_factory_abstractions/generic/impl/CommonRegistrationBuilderImpl.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.jetbrains.annotations.Nullable;
66
import ru.zznty.create_factory_abstractions.api.generic.extensibility.CommonRegistrationBuilder;
77
import ru.zznty.create_factory_abstractions.api.generic.extensibility.GenericKeyProviderExtension;
8+
import ru.zznty.create_factory_abstractions.api.generic.key.GenericCapabilityWrapperProvider;
89
import ru.zznty.create_factory_abstractions.api.generic.key.GenericKey;
910
import ru.zznty.create_factory_abstractions.api.generic.key.GenericKeyProvider;
1011
import ru.zznty.create_factory_abstractions.api.generic.key.GenericKeySerializer;
@@ -24,13 +25,13 @@ public CommonRegistrationBuilderImpl(Class<Key> keyClass) {
2425
}
2526

2627
@Override
27-
public <Value, RegistryValue> CommonRegistrationBuilder<Key> provider(
28-
Supplier<GenericKeyProviderExtension<Key, Value, RegistryValue>> provider) {
28+
public <Value, RegistryValue, Capability> CommonRegistrationBuilder<Key> provider(
29+
Supplier<GenericKeyProviderExtension<Key, Value, RegistryValue, Capability>> provider) {
2930
if (this.provider != null) {
3031
throw new IllegalStateException("Provider already set");
3132
}
3233
this.provider = () -> new GenericKeyProvider<>() {
33-
private final GenericKeyProviderExtension<Key, Value, RegistryValue> extension = provider.get();
34+
private final GenericKeyProviderExtension<Key, Value, RegistryValue, Capability> extension = provider.get();
3435

3536
@Override
3637
public Key defaultKey() {
@@ -76,6 +77,12 @@ public <T> Optional<ResourceKey<T>> resourceKey(Key key) {
7677
public int compare(Key o1, Key o2) {
7778
return extension.compare(o1, o2);
7879
}
80+
81+
@Override
82+
public @Nullable <Cap> GenericCapabilityWrapperProvider<Cap> capabilityWrapperProvider() {
83+
//noinspection unchecked
84+
return (GenericCapabilityWrapperProvider<Cap>) extension.capabilityWrapperProvider();
85+
}
7986
};
8087
return this;
8188
}

0 commit comments

Comments
 (0)