mirror of
https://github.com/architectury/architectury-api.git
synced 2026-03-30 05:05:19 -05:00
Relocate some classes, and add filtering methods to the handler itself
This commit is contained in:
@@ -19,6 +19,9 @@
|
||||
|
||||
package dev.architectury.transfer;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import dev.architectury.transfer.wrapper.filtering.FilteringResourceView;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
@@ -59,4 +62,12 @@ public interface ResourceView<T> extends TransferView<T>, Closeable {
|
||||
|
||||
@Override
|
||||
void close();
|
||||
|
||||
default ResourceView<T> unmodifiable() {
|
||||
return filter(Predicates.alwaysFalse());
|
||||
}
|
||||
|
||||
default ResourceView<T> filter(Predicate<T> filter) {
|
||||
return FilteringResourceView.of(this, filter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,11 +19,14 @@
|
||||
|
||||
package dev.architectury.transfer;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import dev.architectury.fluid.FluidStack;
|
||||
import dev.architectury.transfer.wrapper.filtering.FilteringTransferHandler;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
@@ -97,6 +100,12 @@ public interface TransferHandler<T> extends TransferView<T> {
|
||||
@Deprecated
|
||||
ResourceView<T> getContent(int index);
|
||||
|
||||
default void withContent(int index, Consumer<ResourceView<T>> consumer) {
|
||||
try (ResourceView<T> resource = getContent(index)) {
|
||||
consumer.accept(resource);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts the given resource into the handler, returning the amount that was inserted.
|
||||
*
|
||||
@@ -105,4 +114,67 @@ public interface TransferHandler<T> extends TransferView<T> {
|
||||
* @return the amount that was inserted
|
||||
*/
|
||||
long insert(T toInsert, TransferAction action);
|
||||
|
||||
/**
|
||||
* Extracts the given resource from a given resource index, returning the stack that was extracted.
|
||||
*
|
||||
* @param index the index of the resource
|
||||
* @param toExtract the resource to extract
|
||||
* @param action whether to simulate or actually extract the resource
|
||||
* @return the stack that was extracted
|
||||
*/
|
||||
default T extract(int index, T toExtract, TransferAction action) {
|
||||
try (ResourceView<T> resource = getContent(index)) {
|
||||
return resource.extract(toExtract, action);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the given resource from a given resource index, returning the stack that was extracted.
|
||||
*
|
||||
* @param index the index of the resource
|
||||
* @param toExtract the predicates to use to filter the resources to extract
|
||||
* @param maxAmount the maximum amount of resources to extract
|
||||
* @param action whether to simulate or actually extract the resource
|
||||
* @return the stack that was extracted
|
||||
*/
|
||||
default T extract(int index, Predicate<T> toExtract, long maxAmount, TransferAction action) {
|
||||
try (ResourceView<T> resource = getContent(index)) {
|
||||
return resource.extract(toExtract, maxAmount, action);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the any resource from a given resource index, returning the stack that was extracted.
|
||||
*
|
||||
* @param index the index of the resource
|
||||
* @param maxAmount the maximum amount of resources to extract
|
||||
* @param action whether to simulate or actually extract the resource
|
||||
* @return the stack that was extracted
|
||||
*/
|
||||
default T extract(int index, long maxAmount, TransferAction action) {
|
||||
try (ResourceView<T> resource = getContent(index)) {
|
||||
return resource.extract(maxAmount, action);
|
||||
}
|
||||
}
|
||||
|
||||
default TransferHandler<T> unmodifiable() {
|
||||
return filter(Predicates.alwaysFalse());
|
||||
}
|
||||
|
||||
default TransferHandler<T> onlyInsert() {
|
||||
return filter(Predicates.alwaysTrue(), Predicates.alwaysFalse());
|
||||
}
|
||||
|
||||
default TransferHandler<T> onlyExtract() {
|
||||
return filter(Predicates.alwaysFalse(), Predicates.alwaysTrue());
|
||||
}
|
||||
|
||||
default TransferHandler<T> filter(Predicate<T> filter) {
|
||||
return filter(filter, filter);
|
||||
}
|
||||
|
||||
default TransferHandler<T> filter(Predicate<T> insert, Predicate<T> extract) {
|
||||
return FilteringTransferHandler.of(this, insert, extract);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ package dev.architectury.transfer.fluid.wrapper;
|
||||
import dev.architectury.fluid.FluidStack;
|
||||
import dev.architectury.transfer.TransferHandler;
|
||||
import dev.architectury.transfer.fluid.FluidTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.CombinedTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.combined.CombinedTransferHandler;
|
||||
|
||||
/**
|
||||
* A {@link TransferHandler} that combines multiple {@link TransferHandler}s.<br>
|
||||
|
||||
@@ -21,7 +21,7 @@ package dev.architectury.transfer.item.wrapper;
|
||||
|
||||
import dev.architectury.transfer.TransferHandler;
|
||||
import dev.architectury.transfer.item.ItemTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.CombinedTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.combined.CombinedTransferHandler;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
package dev.architectury.transfer.item.wrapper;
|
||||
|
||||
import dev.architectury.transfer.item.ItemTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.CombinedSingleTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.combined.CombinedSingleTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.single.BaseSingleTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.single.SingleTransferHandler;
|
||||
import net.minecraft.world.Container;
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
package dev.architectury.transfer.item.wrapper;
|
||||
|
||||
import dev.architectury.transfer.wrapper.single.FilteringSingleTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.filtering.FilteringSingleTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.single.SingleTransferHandler;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.world.WorldlyContainer;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package dev.architectury.transfer.wrapper;
|
||||
package dev.architectury.transfer.wrapper.combined;
|
||||
|
||||
import dev.architectury.transfer.ResourceView;
|
||||
import dev.architectury.transfer.TransferHandler;
|
||||
@@ -53,13 +53,11 @@ public interface CombinedSingleTransferHandler<T> extends CombinedTransferHandle
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
default int getContentsSize() {
|
||||
return getParts().size();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
default SingleTransferHandler<T> getContent(int index) {
|
||||
return getParts().get(index);
|
||||
}
|
||||
@@ -17,7 +17,7 @@
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package dev.architectury.transfer.wrapper;
|
||||
package dev.architectury.transfer.wrapper.combined;
|
||||
|
||||
import com.google.common.collect.Streams;
|
||||
import dev.architectury.transfer.ResourceView;
|
||||
@@ -58,12 +58,13 @@ public interface CombinedTransferHandler<T> extends TransferHandler<T>, VariantV
|
||||
if (index < 0) {
|
||||
throw new IllegalArgumentException("Index must be non-negative");
|
||||
}
|
||||
int i = 0;
|
||||
int i = index;
|
||||
for (TransferHandler<T> handler : getHandlers()) {
|
||||
if (i == index) {
|
||||
return handler.getContent(0);
|
||||
int contentsSize = handler.getContentsSize();
|
||||
if (i < contentsSize) {
|
||||
return handler.getContent(i);
|
||||
}
|
||||
i += handler.getContentsSize();
|
||||
i -= contentsSize;
|
||||
}
|
||||
throw new IndexOutOfBoundsException("Index " + index + " is out of bounds");
|
||||
}
|
||||
@@ -17,20 +17,16 @@
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package dev.architectury.transfer.wrapper;
|
||||
package dev.architectury.transfer.wrapper.filtering;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import dev.architectury.transfer.ResourceView;
|
||||
import dev.architectury.transfer.TransferAction;
|
||||
import dev.architectury.transfer.view.ExtractableView;
|
||||
import dev.architectury.transfer.wrapper.forwarding.ForwardingResourceView;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public interface FilteringResourceView<T> extends ForwardingResourceView<T>, ExtractableView<T> {
|
||||
static <T> FilteringResourceView<T> unmodifiable(ResourceView<T> delegate) {
|
||||
return FilteringResourceView.of(delegate, Predicates.alwaysFalse());
|
||||
}
|
||||
|
||||
static <T> FilteringResourceView<T> of(ResourceView<T> delegate, Predicate<T> canExtract) {
|
||||
return new FilteringResourceView<T>() {
|
||||
@Override
|
||||
@@ -17,31 +17,15 @@
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package dev.architectury.transfer.wrapper.single;
|
||||
package dev.architectury.transfer.wrapper.filtering;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import dev.architectury.transfer.TransferAction;
|
||||
import dev.architectury.transfer.wrapper.FilteringTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.forwarding.ForwardingSingleTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.single.SingleTransferHandler;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public interface FilteringSingleTransferHandler<T> extends FilteringTransferHandler<T>, ForwardingSingleTransferHandler<T> {
|
||||
static <T> FilteringSingleTransferHandler<T> unmodifiable(SingleTransferHandler<T> delegate) {
|
||||
return FilteringSingleTransferHandler.of(delegate, Predicates.alwaysFalse(), Predicates.alwaysFalse());
|
||||
}
|
||||
|
||||
static <T> FilteringSingleTransferHandler<T> onlyInsert(SingleTransferHandler<T> delegate) {
|
||||
return FilteringSingleTransferHandler.of(delegate, Predicates.alwaysTrue(), Predicates.alwaysFalse());
|
||||
}
|
||||
|
||||
static <T> FilteringSingleTransferHandler<T> onlyExtract(SingleTransferHandler<T> delegate) {
|
||||
return FilteringSingleTransferHandler.of(delegate, Predicates.alwaysFalse(), Predicates.alwaysTrue());
|
||||
}
|
||||
|
||||
static <T> FilteringSingleTransferHandler<T> predicate(SingleTransferHandler<T> delegate, Predicate<T> predicate) {
|
||||
return FilteringSingleTransferHandler.of(delegate, predicate, predicate);
|
||||
}
|
||||
|
||||
static <T> FilteringSingleTransferHandler<T> of(SingleTransferHandler<T> delegate, Predicate<T> canInsert, Predicate<T> canExtract) {
|
||||
return new FilteringSingleTransferHandler<T>() {
|
||||
@Override
|
||||
@@ -17,33 +17,17 @@
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package dev.architectury.transfer.wrapper;
|
||||
package dev.architectury.transfer.wrapper.filtering;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import dev.architectury.transfer.ResourceView;
|
||||
import dev.architectury.transfer.TransferAction;
|
||||
import dev.architectury.transfer.TransferHandler;
|
||||
import dev.architectury.transfer.view.ModifiableView;
|
||||
import dev.architectury.transfer.wrapper.forwarding.ForwardingTransferHandler;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public interface FilteringTransferHandler<T> extends ForwardingTransferHandler<T>, ModifiableView<T> {
|
||||
static <T> FilteringTransferHandler<T> unmodifiable(TransferHandler<T> delegate) {
|
||||
return FilteringTransferHandler.of(delegate, Predicates.alwaysFalse(), Predicates.alwaysFalse());
|
||||
}
|
||||
|
||||
static <T> FilteringTransferHandler<T> onlyInsert(TransferHandler<T> delegate) {
|
||||
return FilteringTransferHandler.of(delegate, Predicates.alwaysTrue(), Predicates.alwaysFalse());
|
||||
}
|
||||
|
||||
static <T> FilteringTransferHandler<T> onlyExtract(TransferHandler<T> delegate) {
|
||||
return FilteringTransferHandler.of(delegate, Predicates.alwaysFalse(), Predicates.alwaysTrue());
|
||||
}
|
||||
|
||||
static <T> FilteringTransferHandler<T> predicate(TransferHandler<T> delegate, Predicate<T> predicate) {
|
||||
return FilteringTransferHandler.of(delegate, predicate, predicate);
|
||||
}
|
||||
|
||||
static <T> FilteringTransferHandler<T> of(TransferHandler<T> delegate, Predicate<T> canInsert, Predicate<T> canExtract) {
|
||||
return new FilteringTransferHandler<T>() {
|
||||
@Override
|
||||
@@ -17,7 +17,7 @@
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package dev.architectury.transfer.wrapper;
|
||||
package dev.architectury.transfer.wrapper.forwarding;
|
||||
|
||||
import dev.architectury.transfer.ResourceView;
|
||||
import dev.architectury.transfer.TransferAction;
|
||||
@@ -17,11 +17,11 @@
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package dev.architectury.transfer.wrapper.single;
|
||||
package dev.architectury.transfer.wrapper.forwarding;
|
||||
|
||||
import dev.architectury.transfer.ResourceView;
|
||||
import dev.architectury.transfer.TransferAction;
|
||||
import dev.architectury.transfer.wrapper.ForwardingTransferHandler;
|
||||
import dev.architectury.transfer.wrapper.single.SingleTransferHandler;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Stream;
|
||||
@@ -17,7 +17,7 @@
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
package dev.architectury.transfer.wrapper;
|
||||
package dev.architectury.transfer.wrapper.forwarding;
|
||||
|
||||
import dev.architectury.transfer.ResourceView;
|
||||
import dev.architectury.transfer.TransferAction;
|
||||
@@ -19,11 +19,14 @@
|
||||
|
||||
package dev.architectury.transfer.wrapper.single;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import dev.architectury.transfer.ResourceView;
|
||||
import dev.architectury.transfer.TransferHandler;
|
||||
import dev.architectury.transfer.view.ModifiableView;
|
||||
import dev.architectury.transfer.view.VariantView;
|
||||
import dev.architectury.transfer.wrapper.filtering.FilteringSingleTransferHandler;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
@@ -53,4 +56,29 @@ public interface SingleTransferHandler<T> extends TransferHandler<T>, ResourceVi
|
||||
default long getAmount() {
|
||||
return getAmount(getResource());
|
||||
}
|
||||
|
||||
@Override
|
||||
default SingleTransferHandler<T> unmodifiable() {
|
||||
return filter(Predicates.alwaysFalse());
|
||||
}
|
||||
|
||||
@Override
|
||||
default SingleTransferHandler<T> onlyInsert() {
|
||||
return filter(Predicates.alwaysTrue(), Predicates.alwaysFalse());
|
||||
}
|
||||
|
||||
@Override
|
||||
default SingleTransferHandler<T> onlyExtract() {
|
||||
return filter(Predicates.alwaysFalse(), Predicates.alwaysTrue());
|
||||
}
|
||||
|
||||
@Override
|
||||
default SingleTransferHandler<T> filter(Predicate<T> filter) {
|
||||
return filter(filter, filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
default SingleTransferHandler<T> filter(Predicate<T> insert, Predicate<T> extract) {
|
||||
return FilteringSingleTransferHandler.of(this, insert, extract);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user