Skip to content

Commit eee4e71

Browse files
committed
chore: abstract away summary fetching from packager handlers
1 parent bf56641 commit eee4e71

24 files changed

+342
-209
lines changed

abstractions/src/main/java/ru/zznty/create_factory_abstractions/api/generic/AbstractionsCapabilities.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
import net.minecraftforge.common.capabilities.Capability;
44
import net.minecraftforge.common.capabilities.CapabilityManager;
55
import net.minecraftforge.common.capabilities.CapabilityToken;
6+
import ru.zznty.create_factory_abstractions.api.generic.capability.GenericInventory;
67
import ru.zznty.create_factory_abstractions.api.generic.capability.PackagerAttachedHandler;
78

89
public class AbstractionsCapabilities {
910
public static final Capability<PackagerAttachedHandler> PACKAGER_ATTACHED = CapabilityManager.get(
1011
new CapabilityToken<>() {
1112
});
13+
public static final Capability<GenericInventory> GENERIC_INVENTORY = CapabilityManager.get(
14+
new CapabilityToken<>() {
15+
});
1216
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package ru.zznty.create_factory_abstractions.api.generic.capability;
2+
3+
import net.minecraftforge.common.capabilities.AutoRegisterCapability;
4+
import net.minecraftforge.common.capabilities.ICapabilityProvider;
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+
@AutoRegisterCapability
11+
public interface GenericInventory {
12+
@Nullable GenericInventorySummaryProvider get(GenericKeyRegistration registration);
13+
14+
// maybe in the future
15+
// GenericStack insert(GenericStack stack);
16+
17+
static GenericInventory of(ICapabilityProvider capProvider) {
18+
return capProvider.getCapability(AbstractionsCapabilities.GENERIC_INVENTORY).orElseGet(() -> registration -> {
19+
@Nullable GenericCapabilityWrapperProvider<Object> provider = registration.provider().capabilityWrapperProvider();
20+
if (provider == null) return null;
21+
return capProvider.getCapability(provider.capability()).map(provider::unwrap).orElse(null);
22+
});
23+
}
24+
}
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(boolean scanInputSlots, 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
@@ -14,9 +14,9 @@
1414
import org.jetbrains.annotations.Nullable;
1515
import ru.zznty.create_factory_abstractions.CreateFactoryAbstractions;
1616
import ru.zznty.create_factory_abstractions.api.generic.AbstractionsCapabilities;
17+
import ru.zznty.create_factory_abstractions.api.generic.key.GenericKeyRegistration;
1718
import ru.zznty.create_factory_abstractions.api.generic.stack.GenericStack;
1819
import ru.zznty.create_factory_abstractions.generic.impl.BuiltInPackagerAttachedHandler;
19-
import ru.zznty.create_factory_abstractions.generic.support.GenericInventorySummary;
2020

2121
@AutoRegisterCapability
2222
public interface PackagerAttachedHandler {
@@ -29,9 +29,7 @@ boolean unwrap(Level level, BlockPos pos, BlockState state, Direction side,
2929

3030
PackageBuilder newPackage();
3131

32-
boolean hasChanges();
33-
34-
void collectAvailable(boolean scanInputSlots, GenericInventorySummary summary);
32+
GenericKeyRegistration supportedKey();
3533

3634
Block supportedGauge();
3735

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: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package ru.zznty.create_factory_abstractions.api.generic.key;
2+
3+
import net.minecraftforge.common.capabilities.Capability;
4+
import ru.zznty.create_factory_abstractions.api.generic.capability.GenericInventorySummaryProvider;
5+
6+
public interface GenericCapabilityWrapperProvider<Cap> {
7+
Capability<Cap> capability();
8+
9+
Cap wrap(GenericInventorySummaryProvider summaryProvider);
10+
11+
GenericInventorySummaryProvider unwrap(Cap capability);
12+
}

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 & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,24 @@
33
import com.simibubi.create.AllBlocks;
44
import com.simibubi.create.api.packager.InventoryIdentifier;
55
import com.simibubi.create.api.packager.unpacking.UnpackingHandler;
6-
import com.simibubi.create.content.logistics.BigItemStack;
76
import com.simibubi.create.content.logistics.box.PackageItem;
8-
import com.simibubi.create.content.logistics.crate.BottomlessItemHandler;
97
import com.simibubi.create.content.logistics.packager.IdentifiedInventory;
108
import com.simibubi.create.content.logistics.packager.PackagerBlockEntity;
11-
import com.simibubi.create.content.logistics.packager.PackagerItemHandler;
129
import com.simibubi.create.content.logistics.stockTicker.PackageOrderWithCrafts;
13-
import com.simibubi.create.foundation.blockEntity.behaviour.inventory.VersionedInventoryTrackerBehaviour;
1410
import com.simibubi.create.foundation.item.ItemHelper;
1511
import net.minecraft.core.BlockPos;
1612
import net.minecraft.core.Direction;
1713
import net.minecraft.world.item.ItemStack;
1814
import net.minecraft.world.level.Level;
1915
import net.minecraft.world.level.block.Block;
2016
import net.minecraft.world.level.block.state.BlockState;
21-
import net.minecraftforge.items.IItemHandler;
2217
import net.minecraftforge.items.ItemStackHandler;
2318
import org.jetbrains.annotations.Nullable;
2419
import ru.zznty.create_factory_abstractions.api.generic.capability.PackageBuilder;
2520
import ru.zznty.create_factory_abstractions.api.generic.capability.PackagerAttachedHandler;
21+
import ru.zznty.create_factory_abstractions.api.generic.key.GenericKeyRegistration;
2622
import ru.zznty.create_factory_abstractions.api.generic.stack.GenericStack;
27-
import ru.zznty.create_factory_abstractions.generic.support.GenericInventorySummary;
23+
import ru.zznty.create_factory_abstractions.generic.key.item.ItemKey;
2824

2925
import java.util.List;
3026

@@ -71,32 +67,8 @@ public PackageBuilder newPackage() {
7167
}
7268

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

10274
@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)